رفتار توڑنے کی حکمت عملی ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو مارکیٹ کی رفتار کو ٹریک کرتی ہے۔ یہ متعدد اشارے کو یکجا کرتی ہے تاکہ یہ فیصلہ کیا جاسکے کہ آیا مارکیٹ فی الحال اوپر یا نیچے کے رجحان میں ہے ، اور کلیدی مزاحمت کی سطح کو توڑنے پر لمبی پوزیشنیں کھولتی ہے اور اہم سپورٹ کی سطح کو توڑنے پر مختصر پوزیشنیں کھولتی ہے۔
یہ حکمت عملی بنیادی طور پر مارکیٹ کے رجحانات اور اہم قیمتوں کی سطح کا تعین کرنے کے لئے متعدد ٹائم فریموں کے ڈونچیان چینلز کا استعمال کرتی ہے۔ خاص طور پر ، جب قیمتیں طویل مدتی ڈونچیان چینل کی اوپری ریل سے گزرتی ہیں جیسے 40 دن ، تو اسے ایک اپ ٹرینڈ کے طور پر سمجھا جاتا ہے۔ سال کے اندر نئی اونچائیوں اور حرکت پذیر اوسط کی سیدھ کے طور پر اضافی فلٹرز کے ساتھ مل کر ، طویل سگنل متحرک ہوتے ہیں۔ جب قیمتیں طویل مدتی ڈونچیان چینل کی نچلی ریل سے نیچے ہوتی ہیں ، تو اسے نیچے کا رجحان سمجھا جاتا ہے۔ سال کے اندر نئی نچلی سطحوں جیسے فلٹرز کے ساتھ مل کر ، مختصر سگنل متحرک ہوتے ہیں۔
حکمت عملی میں باہر نکلنے کی پوزیشنوں کے لئے دو اختیارات فراہم کیے جاتے ہیں: فکسڈ انفیکشن لائن اور ٹریلنگ اسٹاپ نقصان۔ فکسڈ انفیکشن لائن 20 دن جیسے مختصر ڈونچیان چینل کی نچلی / اوپری ریل کا استعمال کرتی ہے۔ ٹریلنگ اسٹاپ نقصان اے ٹی آر کی اقدار کی بنیاد پر ہر روز متحرک اسٹاپ نقصان لائن کا حساب لگاتا ہے۔ دونوں طریقے خطرات کو مؤثر طریقے سے کنٹرول کرسکتے ہیں۔
اس حکمت عملی میں رجحان کا فیصلہ اور بریکآؤٹ آپریشنز کا امتزاج ہوتا ہے ، جو مارکیٹ میں قلیل مدتی سمت کے مواقع کو مؤثر طریقے سے پکڑ سکتا ہے۔ واحد اشارے کے مقابلے میں ، یہ متعدد فلٹرز کا استعمال کرتا ہے جو کچھ جھوٹے بریکآؤٹس کو فلٹر کرسکتے ہیں اور انٹری سگنلز کے معیار کو بہتر بناسکتے ہیں۔ اس کے علاوہ ، اسٹاپ نقصان کی حکمت عملیوں کا اطلاق اس کی لچک کو بھی بڑھاتا ہے اور اگر مارکیٹ مختصر طور پر پیچھے ہٹ جاتی ہے تو بھی نقصانات کو مؤثر طریقے سے کنٹرول کرسکتا ہے۔
اس حکمت عملی کا بنیادی خطرہ یہ ہے کہ قیمتوں میں پرتشدد اتار چڑھاؤ ہوسکتا ہے ، جس سے باہر نکلنے کی پوزیشنوں میں اسٹاپ نقصانات کا باعث بنتا ہے۔ اگر قیمتیں بعد میں تیزی سے الٹ جاتی ہیں تو ، مواقع ضائع ہوسکتے ہیں۔ اس کے علاوہ ، متعدد فلٹرز کا استعمال کچھ مواقع کو بھی فلٹر کرسکتا ہے اور تجارت کی تعدد کو کم کرسکتا ہے۔
خطرات کو کم کرنے کے ل AT ، اے ٹی آر کے ضرب کو ایڈجسٹ کیا جاسکتا ہے یا ڈونچیئن چینل کے وقفے کو بڑھا دیا جاسکتا ہے تاکہ اسٹاپ نقصان کے امکانات کو کم کیا جاسکے۔ اندراج کی تعدد کو بڑھانے کے لئے کچھ فلٹرز کو بھی ہٹا یا آرام کیا جاسکتا ہے ، لیکن خطرات میں بھی اضافہ ہوگا۔
اس حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
مختلف پیرامیٹرز کی جانچ کر کے، خطرات اور منافع کو متوازن کرنے کے لئے بہترین مجموعہ پایا جا سکتا ہے.
یہ حکمت عملی رجحان کی سمت کا تعین کرنے کے لئے متعدد اشارے کو جوڑتی ہے اور اہم بریک آؤٹ سطحوں پر تجارت کو متحرک کرتی ہے۔ اس کا اسٹاپ نقصان کا طریقہ کار اسے خطرات سے بھی لچکدار بناتا ہے۔ پیرامیٹرز کو بہتر بنانے سے ، مستحکم اضافی منافع حاصل کیا جاسکتا ہے۔ یہ ان سرمایہ کاروں کے لئے موزوں ہے جن کے پاس مارکیٹ پر واضح نظریہ نہیں ہے لیکن وہ رجحانات کی پیروی کرنا چاہتے ہیں۔
/*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)