رفتار توڑنے کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-23 14:27:21
ٹیگز:

img

جائزہ

رفتار توڑنے کی حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو مارکیٹ کی رفتار کو ٹریک کرتی ہے۔ یہ متعدد اشارے کو یکجا کرتی ہے تاکہ یہ فیصلہ کیا جاسکے کہ آیا مارکیٹ فی الحال اوپر یا نیچے کے رجحان میں ہے ، اور کلیدی مزاحمت کی سطح کو توڑنے پر لمبی پوزیشنیں کھولتی ہے اور اہم سپورٹ کی سطح کو توڑنے پر مختصر پوزیشنیں کھولتی ہے۔

حکمت عملی منطق

یہ حکمت عملی بنیادی طور پر مارکیٹ کے رجحانات اور اہم قیمتوں کی سطح کا تعین کرنے کے لئے متعدد ٹائم فریموں کے ڈونچیان چینلز کا استعمال کرتی ہے۔ خاص طور پر ، جب قیمتیں طویل مدتی ڈونچیان چینل کی اوپری ریل سے گزرتی ہیں جیسے 40 دن ، تو اسے ایک اپ ٹرینڈ کے طور پر سمجھا جاتا ہے۔ سال کے اندر نئی اونچائیوں اور حرکت پذیر اوسط کی سیدھ کے طور پر اضافی فلٹرز کے ساتھ مل کر ، طویل سگنل متحرک ہوتے ہیں۔ جب قیمتیں طویل مدتی ڈونچیان چینل کی نچلی ریل سے نیچے ہوتی ہیں ، تو اسے نیچے کا رجحان سمجھا جاتا ہے۔ سال کے اندر نئی نچلی سطحوں جیسے فلٹرز کے ساتھ مل کر ، مختصر سگنل متحرک ہوتے ہیں۔

حکمت عملی میں باہر نکلنے کی پوزیشنوں کے لئے دو اختیارات فراہم کیے جاتے ہیں: فکسڈ انفیکشن لائن اور ٹریلنگ اسٹاپ نقصان۔ فکسڈ انفیکشن لائن 20 دن جیسے مختصر ڈونچیان چینل کی نچلی / اوپری ریل کا استعمال کرتی ہے۔ ٹریلنگ اسٹاپ نقصان اے ٹی آر کی اقدار کی بنیاد پر ہر روز متحرک اسٹاپ نقصان لائن کا حساب لگاتا ہے۔ دونوں طریقے خطرات کو مؤثر طریقے سے کنٹرول کرسکتے ہیں۔

فوائد کا تجزیہ

اس حکمت عملی میں رجحان کا فیصلہ اور بریکآؤٹ آپریشنز کا امتزاج ہوتا ہے ، جو مارکیٹ میں قلیل مدتی سمت کے مواقع کو مؤثر طریقے سے پکڑ سکتا ہے۔ واحد اشارے کے مقابلے میں ، یہ متعدد فلٹرز کا استعمال کرتا ہے جو کچھ جھوٹے بریکآؤٹس کو فلٹر کرسکتے ہیں اور انٹری سگنلز کے معیار کو بہتر بناسکتے ہیں۔ اس کے علاوہ ، اسٹاپ نقصان کی حکمت عملیوں کا اطلاق اس کی لچک کو بھی بڑھاتا ہے اور اگر مارکیٹ مختصر طور پر پیچھے ہٹ جاتی ہے تو بھی نقصانات کو مؤثر طریقے سے کنٹرول کرسکتا ہے۔

خطرے کا تجزیہ

اس حکمت عملی کا بنیادی خطرہ یہ ہے کہ قیمتوں میں پرتشدد اتار چڑھاؤ ہوسکتا ہے ، جس سے باہر نکلنے کی پوزیشنوں میں اسٹاپ نقصانات کا باعث بنتا ہے۔ اگر قیمتیں بعد میں تیزی سے الٹ جاتی ہیں تو ، مواقع ضائع ہوسکتے ہیں۔ اس کے علاوہ ، متعدد فلٹرز کا استعمال کچھ مواقع کو بھی فلٹر کرسکتا ہے اور تجارت کی تعدد کو کم کرسکتا ہے۔

خطرات کو کم کرنے کے ل AT ، اے ٹی آر کے ضرب کو ایڈجسٹ کیا جاسکتا ہے یا ڈونچیئن چینل کے وقفے کو بڑھا دیا جاسکتا ہے تاکہ اسٹاپ نقصان کے امکانات کو کم کیا جاسکے۔ اندراج کی تعدد کو بڑھانے کے لئے کچھ فلٹرز کو بھی ہٹا یا آرام کیا جاسکتا ہے ، لیکن خطرات میں بھی اضافہ ہوگا۔

اصلاح کی ہدایات

اس حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

  1. پیرامیٹرز کے بہترین مجموعہ کو تلاش کرنے کے لئے Donchian چینلز کی لمبائی کو بہتر بنائیں.
  2. فلٹر کے طور پر مختلف قسم کے چلتے ہوئے اوسط کی کوشش کریں.
  3. ATR ضرب کو ایڈجسٹ کریں یا سٹاپ نقصان کے لئے مقررہ پوائنٹس استعمال کریں۔
  4. مزید رجحانات کا جائزہ لینے والے اشارے جیسے MACD شامل کریں.
  5. سال کے اندر نئے اعلی / نچلے حصے وغیرہ کے لئے نظرثانی کی مدت کو بہتر بنائیں.

مختلف پیرامیٹرز کی جانچ کر کے، خطرات اور منافع کو متوازن کرنے کے لئے بہترین مجموعہ پایا جا سکتا ہے.

نتیجہ

یہ حکمت عملی رجحان کی سمت کا تعین کرنے کے لئے متعدد اشارے کو جوڑتی ہے اور اہم بریک آؤٹ سطحوں پر تجارت کو متحرک کرتی ہے۔ اس کا اسٹاپ نقصان کا طریقہ کار اسے خطرات سے بھی لچکدار بناتا ہے۔ پیرامیٹرز کو بہتر بنانے سے ، مستحکم اضافی منافع حاصل کیا جاسکتا ہے۔ یہ ان سرمایہ کاروں کے لئے موزوں ہے جن کے پاس مارکیٹ پر واضح نظریہ نہیں ہے لیکن وہ رجحانات کی پیروی کرنا چاہتے ہیں۔


/*backtest
start: 2024-01-23 00:00:00
end: 2024-02-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("BuyHigh-SellLow Strategy", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)
donchianEntryLength = input(40, step=10)
donchianExitLength = input(20, step=10)

considerNewLongTermHighLows = input(true)
shortHighLowPeriod = input(120, step=10)
longHighLowPeriod = input(180, step=10)

considerMAAlignment = input(true)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(40, minval=10,step=10)

atrLength = input(22)
atrMult = input(4)

exitStrategy = input(title="Exit Strategy", defval="tsl", options=["dc", "tsl"])

considerYearlyHighLow = input(true)
backtestYears = input(10, minval=1, step=1)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

f_getTrailingStop(atr, atrMult)=>
    stop = close - atrMult*atr
    stop := strategy.position_size > 0 ? max(stop, stop[1]) : stop
    stop

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0

//////////////////////////////////// Calculate new high low condition //////////////////////////////////////////////////
f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)=>
    newHigh = highest(shortHighLowPeriod) == highest(longHighLowPeriod) or not considerNewLongTermHighLows
    newLow = lowest(shortHighLowPeriod) == lowest(longHighLowPeriod) or not considerNewLongTermHighLows
    [newHigh,newLow]

//////////////////////////////////// Calculate Yearly High Low //////////////////////////////////////////////////
f_getYearlyHighLowCondition(considerYearlyHighLow)=>
    yhigh = security(syminfo.tickerid, '12M', high[1]) 
    ylow = security(syminfo.tickerid, '12M', low[1]) 
    yhighlast = yhigh[365]
    ylowlast = ylow[365]
    yhighllast = yhigh[2 * 365]
    ylowllast = ylow[2 * 365]
    
    yearlyTrendUp = na(yhigh)? true : na(yhighlast)? close > yhigh : na(yhighllast)? close > max(yhigh,yhighlast) : close > max(yhigh, min(yhighlast, yhighllast))
    yearlyHighCondition = (  (na(yhigh) or na(yhighlast) ? true : (yhigh > yhighlast) ) and ( na(yhigh) or na(yhighllast) ? true : (yhigh > yhighllast))) or yearlyTrendUp or not considerYearlyHighLow
    yearlyTrendDown = na(ylow)? true : na(ylowlast)? close < ylow : na(ylowllast)? close < min(ylow,ylowlast) : close < min(ylow, max(ylowlast, ylowllast))
    yearlyLowCondition = (  (na(ylow) or na(ylowlast) ? true : (ylow < ylowlast) ) and ( na(ylow) or na(ylowllast) ? true : (ylow < ylowllast))) or yearlyTrendDown or not considerYearlyHighLow
    
    label_x = time+(60*60*24*1000*1)
    [yearlyHighCondition,yearlyLowCondition]

donchian(rangeLength)=>
    upper = highest(rangeLength)
    lower = lowest(rangeLength)
    middle = (upper+lower)/2
    [middle, upper, lower]

inDateRange = true
[eMiddle, eUpper, eLower] = donchian(donchianEntryLength)
[exMiddle, exUpper, exLower] = donchian(donchianExitLength)
maAlignment = f_getMaAlignment(MAType, false)
[yearlyHighCondition, yearlyLowCondition] = f_getYearlyHighLowCondition(considerYearlyHighLow)
[newHigh,newLow] = f_calculateNewHighLows(shortHighLowPeriod, longHighLowPeriod, considerNewLongTermHighLows)

maAlignmentLongCondition = highest(maAlignment, LookbackPeriod) == 1 or not considerMAAlignment 

atr = atr(atrLength)
tsl = f_getTrailingStop(atr, atrMult)

//U = plot(eUpper, title="Up", color=color.green, linewidth=2, style=plot.style_linebr)
//D = plot(exLower, title="Ex Low", color=color.red, linewidth=2, style=plot.style_linebr)
longCondition = crossover(close, eUpper[1]) and yearlyHighCondition and newHigh and maAlignmentLongCondition
exitLongCondition = crossunder(close, exLower[1])

shortCondition = crossunder(close, eLower[1]) and yearlyLowCondition and newLow
exitShortCondition = crossover(close, exUpper[1])
strategy.entry("Buy", strategy.long, when=longCondition and inDateRange, oca_name="oca_buy")
strategy.exit("ExitBuyDC", "Buy", when=exitStrategy=='dc', stop=exLower)
strategy.exit("ExitBuyTSL", "Buy", when=exitStrategy=='tsl', stop=tsl)
plot(strategy.position_size > 0 ? (exitStrategy=='dc'?exLower:tsl) : na, title="Trailing Stop", color=color.red, linewidth=2, style=plot.style_linebr)
//strategy.close("Buy", when=exitLongCondition)

مزید