یہ حکمت عملی متعدد تکنیکی اشارے کو مربوط کرتی ہے۔ جب بولنگر بینڈز اشارے کی قیمتوں میں تبدیلی کے اشارے پیدا ہوتے ہیں تو یہ اعلی امکان کے ساتھ واپسی کے تجارتی مواقع کی تلاش کرتا ہے ، جس میں آر ایس آئی ، اے ڈی ایکس اور اے ٹی آر اشارے سے مارکیٹ کی ساخت کے بارے میں فیصلے ہوتے ہیں۔
20 پیریڈ بولنگر بینڈ استعمال کریں اور جب قیمت بینڈ کی اونچائیوں یا نچلی سطحوں تک پہنچ جاتی ہے تو الٹ پلٹ موم بتی کے نمونوں کا انتظار کریں۔
آر ایس آئی اشارے کا جائزہ لیتا ہے کہ آیا مارکیٹ رینج موڈ میں ہے، 60 سے زیادہ آر ایس آئی بولش رینج اور 40 سے کم کم رینج کی نشاندہی کرتا ہے۔
اے ڈی ایکس 20 سے نیچے مارکیٹ کی حالت کو ظاہر کرتا ہے جبکہ 20 سے اوپر رجحان کی حالت کو ظاہر کرتا ہے۔
اے ٹی آر سٹاپ نقصان اور پیچھے سٹاپ نقصان مقرر کرتا ہے.
EMA لائنوں سے اضافی فلٹر.
متعدد اشارے مل کر اعلی امکان کے تجارتی سگنل فراہم کرتے ہیں۔
ترتیب دینے کے قابل پیرامیٹرز مختلف مارکیٹ کے ماحول کو اپنانے.
سخت سٹاپ نقصان کے قوانین مؤثر طریقے سے خطرات کو کنٹرول کرتے ہیں.
پیرامیٹرز کی غلط ترتیبات زیادہ کثرت سے تجارت کا سبب بن سکتی ہیں۔
واپسی کی ناکامی کا امکان اب بھی موجود ہے.
ٹریلنگ سٹاپ نقصان کچھ مارکیٹوں میں ناکام ہو سکتا ہے.
بہتر پیرامیٹر ترتیب تلاش کرنے کے لئے مزید اشارے کے مجموعے کی جانچ کریں.
ابتدائی ناکامی کے بعد مسلسل واپسی کے مواقع کی بروقت نشاندہی کریں۔
اسٹاپ کو زیادہ ذہین بنانے کے لیے سٹاپ نقصان کے مختلف طریقے آزمائیں۔
یہ حکمت عملی بنیادی تجارتی سگنلز کے لئے بولنگر بینڈ کا استعمال کرتی ہے ، اور متعدد معاون اشارے ایک اعلی امکان فلٹرنگ سسٹم تشکیل دیتے ہیں۔ اسٹاپ نقصان کے قوانین بھی کافی مکمل ہیں۔ پیرامیٹر ٹیوننگ اور اشارے کی اصلاح کے ذریعے کارکردگی میں مزید بہتری حاصل کی جاسکتی ہے۔ مجموعی طور پر ، یہ حکمت عملی ایک قابل اعتماد الٹ ٹریڈنگ سسٹم تشکیل دیتی ہے۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(shorttitle="BB + EMA + RSI + ADX + ATR Reversal", title="Bollinger Bands Reversal", overlay=true) // Inputs ema1Input = input(title = "EMA1 Input", defval = 200, minval = 10, maxval = 400, step = 10, group = "Indicators") ema2Input = input(title = "EMA2 Input", defval = 100, minval = 10, maxval = 400, step = 10, group = "Indicators") length = input(title = "BB Length", defval = 20, minval=1, group = "Bollinger Band Indicator") bbsrc = input(title = "BB Source", defval = close, group = "Bollinger Band Indicator") mult = input(title = "BB Standard Deviation", type = input.float, defval = 2.0, minval=0.001, maxval=50, group = "Bollinger Band Indicator") offset = input(title = "BB Offset", defval = 0, minval = -500, maxval = 500, group = "Bollinger Band Indicator") rsilen = input(title = "RSI Length", defval = 14, minval=1, group = "RSI Indicator") rsisrc = input(title = "RSI Source", defval = close, group = "RSI Indicator") rsiMaxEntry = input(title = "RSI Maximum Value", defval = 60, minval = 50, maxval = 100, group = "RSI Indicator") rsiMinEntry = input(title = "RSI Minimum Value", defval = 40, minval = 0, maxval = 50, group = "RSI Indicator") rsiMaxExit = input(title = "RSI Max Exit Value", defval = 70, minval = 50, maxval = 100, group = "RSI Indicator") rsiMinExit = input(title = "RSI Min Exit Value", defval = 30, minval = 0, maxval = 50, group = "RSI Indicator") atrLength = input(title = "ATR Length", defval = 14, minval = 1, group = "ATR Indicator") useStructure = input(title = "Use Trailing Stop?", type = input.bool, defval = true, group = "ATR Indicator") atrlookback = input(title = "ATR Lookback Period", defval = 7, minval = 1, group = "ATR Indicator") atrMultiplier = input(title = "ATR Multiplier", type = input.float, defval = 1.0, minval = 0.1, group = "ATR Indicator") sigMaxValue = input(title = "ADX Max Value", type = input.float, defval = 20.0, minval = 0, maxval = 100, step = 0.1, group = "ADX Indicator") adxlen = input(title = "ADX Smoothing", defval = 14, group = "ADX Indicator") dilen = input(title = "DI Length", defval = 14, group = "ADX Indicator") // Date input fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12, group = "Backtest Date Range") fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31, group = "Backtest Date Range") fromYear = input(defval = 2000, title = "From Year", minval = 1970, group = "Backtest Date Range") thruMonth = input(defval = 1, title = "Thru Month", minval = 1, maxval = 12, group = "Backtest Date Range") thruDay = input(defval = 1, title = "Thru Day", minval = 1, maxval = 31, group = "Backtest Date Range") thruYear = input(defval = 2099, title = "Thru Year", minval = 1970, group = "Backtest Date Range") inDataRange = true // Built in Bollinger Band basis = sma(bbsrc, length) dev = mult * stdev(bbsrc, length) upper = basis + dev lower = basis - dev // Built in RSI up = rma(max(change(rsisrc), 0), rsilen) down = rma(-min(change(rsisrc), 0), rsilen) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // Built in ADX dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // Custom variables ema1 = ema(close, ema1Input) ema2 = ema(close, ema2Input) atr = atr(atrLength) // Entry and exit signals CrossLongEntry = (close <= lower or close[1] <= lower[1]) and close > open and close[1] < open[1] and close > ema1 and close > ema2 and strategy.position_size == 0 and inDataRange and rsi > rsiMinEntry and rsi < rsiMaxEntry and sig < sigMaxValue CrossShortEntry = (close >= upper or close[1] >= upper[1]) and close < open and close[1] > open[1] and close < ema1 and close < ema2 and strategy.position_size == 0 and inDataRange and rsi > rsiMinEntry and rsi < rsiMaxEntry and sig < sigMaxValue CrossLongExit = (close >= upper or close[1] >= upper[1]) and close < open and close[1] > open[1] and strategy.position_size > 0 and inDataRange or rsi < rsiMinExit or rsi > rsiMaxExit CrossShortExit = (close <= lower or close[1] <= lower[1]) and close > open and close[1] < open[1] and strategy.position_size < 0 and inDataRange or rsi < rsiMinExit or rsi > rsiMaxExit // Determining the stop loss based on ATR StopLossLong = (useStructure ? lowest(low, atrlookback) : close) - atr * atrMultiplier StopLossShort = (useStructure ? highest(high, atrlookback) : close) + atr * atrMultiplier // Custom variables used to store the stoploss value var StopLong = 0.0 var StopShort = 0.0 // Telling my script to store the stoploss value in the corresponding variables if CrossLongEntry StopLong := StopLossLong if CrossShortEntry StopShort := StopLossShort // Strategy strategy.entry("Entry Long", strategy.long, when = CrossLongEntry, comment = "Entry Long") strategy.close("Entry Long", when = CrossLongExit or close < StopLong, comment = "Long Exit") strategy.entry("Entry Short", strategy.short, when = CrossShortEntry, comment = "Entry Short") strategy.close("Entry Short", when = CrossShortExit or close > StopShort, comment = "Short Exit") // Plots the Bollinger Band plot(basis, "Basis", color=#872323, offset = offset) p1 = plot(upper, "Upper", color=color.teal, offset = offset) p2 = plot(lower, "Lower", color=color.teal, offset = offset) fill(p1, p2, title = "Background", color=#198787, transp=95) // Use this if you want to see the stoploss visualised, be aware though plotting these can be confusing // plot(StopLong) // plot(StopShort)