
برن بینڈ اور ایکویڈینٹ لائن جوڑی ٹریڈنگ حکمت عملی ایک رجحان سے باخبر رہنے کی حکمت عملی ہے جو مارکیٹ کی مقدار کے ساتھ چلتی ہے۔ اس میں برن بینڈ اور متحرک ایکویڈینٹ لائن کے کراس کو بطور تجارتی سگنل استعمال کیا جاتا ہے ، جس سے ایک ایسی مقدار کی حکمت عملی حاصل ہوتی ہے جو مارکیٹ کے رجحانات کو خود بخود پہچان سکتی ہے اور اسٹاپ اسٹاپ نقصان کے قواعد کے ساتھ تجارت کرتی ہے۔
یہ حکمت عملی بنیادی طور پر برلن بینڈ اشارے اور متحرک اوسط اشارے کے کراس سگنل پر مبنی تجارت کرتی ہے۔ خاص طور پر ، یہ ایک ہی وقت میں برلن بینڈ ٹریک ، برلن بینڈ ٹریک ، اور 5 سے 200 دن کی لمبائی کی 7 متحرک اوسطوں کا استعمال کرتا ہے۔ جب قیمت نیچے سے اوپر کی طرف سے برلن بینڈ ٹریک اور نیچے کی طرف سے ٹریک کو توڑتی ہے تو خریدنے کا اشارہ ہوتا ہے۔ جب قیمت اوپر سے نیچے کی طرف سے برلن بینڈ ٹریک کو توڑتی ہے تو فروخت کا اشارہ ہوتا ہے۔
اس کے علاوہ ، حکمت عملی میں moveToFract کا ایک کثیر فاصلہ فیصلہ کرنے والا اشارے بھی متعارف کرایا گیا ہے۔ یہ اشارے قلیل مدتی اور طویل مدتی منتقل اوسط کے ترتیب سے ترتیب دینے کی صورت حال کا حساب لگاتا ہے تاکہ یہ معلوم کیا جاسکے کہ مارکیٹ کی موجودہ حرکت اوپر کی طرف ہے یا نیچے کی طرف ، اس طرح ہلچل کے حالات میں غلط سگنل پیدا ہونے سے بچا جاسکتا ہے۔ آخر میں ، ترتیب دینے کے قابل اسٹاپ اسٹاپ نقصان کے قواعد کے ساتھ مل کر ، ایک زیادہ مکمل رجحان سے باخبر رہنے والی تجارتی حکمت عملی تشکیل دی گئی ہے۔
یہ حکمت عملی مجموعی طور پر ایک بہت ہی عملی ٹرینڈ ٹریکنگ حکمت عملی ہے۔ اس میں اشارے کے کراسنگ کا استعمال کرتے ہوئے فیصلے کیے جاتے ہیں ، اور اس میں ٹرینڈ فیصلہ کرنے والا ماڈیول شامل کیا جاتا ہے ، جو غلط سگنل کو مؤثر طریقے سے ختم کرسکتا ہے۔ اسٹاپ نقصان کی تشکیل کے بعد ، آپ ٹریڈنگ کے لئے رجحان کی مکمل پیروی کرسکتے ہیں ، اور بہتر منافع حاصل کرسکتے ہیں۔ پیرامیٹرز کے مجموعے کو ایڈجسٹ کرکے اور مزید فلٹرز شامل کرکے ، اس حکمت عملی کو مزید بہتر بنایا جاسکتا ہے ، اور مارکیٹ کے زیادہ ماحول کے مطابق ڈھال لیا جاسکتا ہے ، جس میں بہتری کی گنجائش اور اطلاق کے امکانات ہیں۔
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 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("BuyTheDip", overlay=true, initial_capital = 100000, 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)
MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
exitType = input(title="Exit Strategy", defval="Signal", options=["Signal", "TrailingStop", "Both"])
LookbackPeriod = input(30, minval=10,step=10)
BBStdDev = input(2, minval=1, maxval=10, step=0.5)
BBLength = input(60, minval=5, step=5)
atrLength = input(22)
atrMult = input(6)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.all, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)
includePartiallyAligned = true
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
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)
exitBySignal = exitType == "Signal" or exitType == "Both"
exitByTrailingStop = exitType == "TrailingStop" or exitType == "Both"
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
atr = atr(atrLength)
trailingStop = f_getTrailingStop(atr, atrMult)
maAligned = highest(maAlignment,LookbackPeriod)
[middle, upper, lower] = bb(close, BBLength, BBStdDev)
buyCondition = maAligned == 1 and (crossover(close, lower) or crossover(close, middle))
buyExitCondition = crossunder(close, upper)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=buyExitCondition and exitBySignal)
strategy.exit("ExitBuy", "Buy", stop = trailingStop, when=exitByTrailingStop )