
اس حکمت عملی میں تین بار اشاریہ اوسط حرکت پذیر لائن ((Triple MACD) اور نسبتا strong مضبوط اشاریہ ((RSI) کا امتزاج کیا گیا ہے تاکہ کریپٹوکرنسی مارکیٹ میں 1 منٹ کے وقت کے دورانیے کے لئے خاص طور پر مقدار کی تجارت کی جاسکے۔ اس حکمت عملی کا بنیادی نظریہ مارکیٹ میں متعدد متحرک تبدیلیوں کو پکڑنے کے لئے مختلف دورانیہ کے پیرامیٹرز کے ساتھ MACD اشارے کا استعمال کرنا ہے ، جبکہ رجحان کی طاقت کی تصدیق کے لئے RSI اشارے کا استعمال کیا جاتا ہے۔ تین بار MACD سگنل کو اوسط کرنے سے ، سلائڈ شور کو مؤثر طریقے سے ختم کیا جاسکتا ہے ، جس سے ٹریڈنگ سگنل کی وشوسنییتا میں اضافہ ہوتا ہے۔
اس حکمت عملی میں تین مختلف پیرامیٹرز کے MACD اشارے استعمال کیے گئے ہیں ، جس میں تیز لائن کا دورانیہ 5/13/34 اور سست لائن کا دورانیہ 8/21/144 ہے ، اور ان کے مابین فرق کی حساب سے MACD کی قیمت حاصل کی گئی ہے۔ پھر ان تینوں MACD کو اوسط پر رکھا گیا ، اس کی سگنل کی قیمت کو اوسط سے کم کرنے کے لئے MACD کی اوسط سے کم قیمت (یعنی MACD کا دورانیہ NEMA) ، اور اس کے نتیجے میں MACD کالم گراف حاصل کیا گیا۔ اس کے ساتھ ساتھ 14 دورانیے کے RSI اشارے کا حساب بھی کیا گیا ، جس سے رجحان کی طاقت کا اندازہ لگانے میں مدد ملی۔ جب اوسط MACD کالم گراف منفی سے مثبت ، RSI 55 سے کم اور کثیر سر ترتیب میں ہوتا ہے تو ایک سے زیادہ سگنل پیدا ہوتا ہے۔ اس کے برعکس ، جب اوسط MACD کالم گراف منفی سے مثبت ، RSI 45 سے زیادہ اور خالی سر ترتیب میں ہوتا ہے تو اس کے برابر پوزیشن سگنل پیدا ہوتا ہے۔ اس کے علاوہ ، حکمت عملی میں 11 دورانیوں کی لائنوں کی واپسی کی K
حکمت عملی نے تین بار MACD کو آر ایس آئی کے اشارے کے ساتھ مل کر اور لکیری رجعت کی تکنیک کو استعمال کرتے ہوئے پوزیشن کو مستحکم کرنے کی شناخت کی ہے ، جس سے ایک مکمل ہائی فریکوینسی کوالٹی ٹریڈنگ حکمت عملی تشکیل دی گئی ہے۔ حکمت عملی کی سخت کھلی پوزیشن کی شرائط اور اوسط MACD سگنل کا اطلاق ، تجارت کی درستگی کو بڑھانے اور واپسی کو کنٹرول کرنے میں مدد کرتا ہے۔ اگرچہ حکمت عملی ایک طرفہ رجحانات کی صورت حال میں بہتر کارکردگی کا مظاہرہ کرتی ہے۔ تاہم ، اتار چڑھاؤ کی شرح فلٹرنگ ، پوزیشن کو مستحکم کرنے کی شناخت کے طریقہ کار کو بہتر بنانے ، متحرک اسٹاپ سیٹ اپ ، اور مختلف اقسام کے لئے آزاد پیرامیٹرز کی ترتیب جیسے اقدامات کو متعارف کرانے سے حکمت عملی کی موافقت اور استحکام کو مزید بڑھا دیا جاسکتا ہے۔ مجموعی طور پر ، یہ ایک بہت ہی ممکنہ cryptocurrency حجم ٹریڈنگ حکمت عملی ہے ، جو مزید اصلاح اور پوزیشن کو مستحکم کرنے کے قابل ہے۔
/*backtest
start: 2023-03-23 00:00:00
end: 2024-03-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="TrippleMACD", shorttitle="TrippleMACD + RSI strategy", format=format.price, precision=4, overlay=true)
// RSI
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
// Divergence
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)
plFound = na(ta.pivotlow(rsi, lookbackLeft, lookbackRight)) ? false : true
phFound = na(ta.pivothigh(rsi, lookbackLeft, lookbackRight)) ? false : true
_inRange(cond) =>
bars = ta.barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low
rsiHL = rsi[lookbackRight] > ta.valuewhen(plFound, rsi[lookbackRight], 1) and _inRange(plFound[1])
// Price: Lower Low
priceLL = low[lookbackRight] < ta.valuewhen(plFound, low[lookbackRight], 1)
bullCondAlert = priceLL and rsiHL and plFound
bullCond = showDivergence and bullCondAlert
// rsi: Lower High
rsiLH = rsi[lookbackRight] < ta.valuewhen(phFound, rsi[lookbackRight], 1) and _inRange(phFound[1])
// Price: Higher High
priceHH = high[lookbackRight] > ta.valuewhen(phFound, high[lookbackRight], 1)
bearCondAlert = priceHH and rsiLH and phFound
bearCond = showDivergence and bearCondAlert
// Getting inputs
stopLuse = input(1.040)
fast_length = input(title = "Fast Length", defval = 5)
slow_length = input(title = "Slow Length", defval = 8)
fast_length2 = input(title = "Fast Length2", defval = 13)
slow_length2 = input(title = "Slow Length2", defval = 21)
fast_length3 = input(title = "Fast Length3", defval = 34)
slow_length3 = input(title = "Slow Length3", defval = 144)
fast_length4 = input(title = "Fast Length3", defval = 68)
slow_length4 = input(title = "Slow Length3", defval = 288)
src = input(title = "Source", defval = close)
signal_length2 = input.int(title="Signal Smoothing", minval = 1, maxval = 200, defval = 11)
signal_length = input.int(title = "Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type", defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
fast_ma2 = sma_source == "SMA2" ? ta.sma(src, fast_length2) : ta.ema(src, fast_length2)
slow_ma2 = sma_source == "SMA2" ? ta.sma(src, slow_length2) : ta.ema(src, slow_length2)
fast_ma3 = sma_source == "SMA3" ? ta.sma(src, fast_length3) : ta.ema(src, fast_length3)
slow_ma3 = sma_source == "SMA3" ? ta.sma(src, slow_length3) : ta.ema(src, slow_length3)
fast_ma4 = sma_source == "SMA3" ? ta.sma(src, fast_length3) : ta.ema(src, fast_length3)
slow_ma4 = sma_source == "SMA3" ? ta.sma(src, slow_length3) : ta.ema(src, slow_length3)
macd = fast_ma - slow_ma
macd2 = fast_ma2 - slow_ma2
macd3 = fast_ma3 - slow_ma3
macd4 = fast_ma4 - slow_ma4
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
signal2 = sma_signal == "SMA" ? ta.sma(macd2, signal_length) : ta.ema(macd2, signal_length)
signal3 = sma_signal == "SMA" ? ta.sma(macd3, signal_length) : ta.ema(macd3, signal_length)
signal4 = sma_signal == "SMA" ? ta.sma(macd4, signal_length) : ta.ema(macd4, signal_length)
//hist = (macd + macd2 + macd3)/1 - (signal + signal2 + signal3)/1
hist = (macd + macd2 + macd3 + macd4)/4 - (signal + signal2 + signal3 + signal4)/4
signal5 = (signal + signal2 + signal3)/3
sma_signal2 = input.bool(title="Simple MA (Signal Line)", defval=true)
lin_reg = input.bool(title="Lin Reg", defval=true)
linreg_length = input.int(title="Linear Regression Length", minval = 1, maxval = 200, defval = 11)
bopen = lin_reg ? ta.linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? ta.linreg(high, linreg_length, 0) : high
blow = lin_reg ? ta.linreg(low, linreg_length, 0) : low
bclose = lin_reg ? ta.linreg(close, linreg_length, 0) : close
shadow = (bhigh - bclose) + (bopen - blow)
body = bclose - bopen
perc = (shadow/body)
cond2 = perc >=2 and bclose+bclose[1]/2 > bopen+bopen[1]/2
r = bopen < bclose
//signal5 = sma_signal2 ? ta.sma(bclose, signal_length) : ta.ema(bclose, signal_length)
plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color= color.green, wickcolor=color.green, bordercolor=color.green, editable= true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable= true)
//alertcondition(hist[1] >= 0 and hist < 0, title = 'Rising to falling', message = 'The MACD histogram switched from a rising to falling state')
//alertcondition(hist[1] <= 0 and hist > 0, title = 'Falling to rising', message = 'The MACD histogram switched from a falling to rising state')
green = hist >= 0 ? (hist[1] < hist ? "G" : "GL") : (hist[1] < hist ? "RL" : "R")
Buy = green == "G" and green[1] != "G" and green[1] != "GL" and bopen < bclose and rsi < 55.0 //and not cond2
//StopBuy = (green == "R" or green == "RL" or green == "RL") and bopen > bclose and bopen[1] < bclose[1]
StopBuy = bopen > bclose and bopen[1] < bclose[1] and (green == "G" or green == "GL" or green == "R") and bopen[2] < bclose[2] and bopen[3] < bclose[3]
hists = close[3] < close[2] and close[2] < close[1]
//Buy = green == "RL" and hist[0] > -0.07 and hist[0] < 0.00 and rsi < 55.0 and hists
//StopBuy = green == "GL" or green == "R"
alertcondition(Buy, "Long","Покупка в лонг")
alertcondition(StopBuy, "StopLong","Закрытие сделки")
//hline(0, "Zero Line", color = color.new(#787B86, 50))
plot(hist + (close - (close * 0.03)), title = "Histogram", style = plot.style_line, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
plotshape(Buy ? low : na, 'Buy', shape.labelup, location.belowbar , color=color.new(#0abe40, 50), size=size.small, offset=0)
plotshape(StopBuy ? low : na, 'Buy', shape.cross, location.abovebar , color=color.new(#be0a0a, 50), size=size.small, offset=0)
plot(macd4 + (close - (close * 0.01)), title = "MACD", color = #2962FF)
plot(signal5 + (close - (close * 0.01)), title = "Signal", color = #FF6D00)
plotchar(cond2 , char='↓', color = color.rgb(0, 230, 119), text = "-")
if (Buy)
strategy.entry("long", strategy.long)
// if (startShortTrade)
// strategy.entry("short", strategy.short)
profitTarget = strategy.position_avg_price * stopLuse
strategy.exit("Take Profit", "long", limit=profitTarget)
// strategy.exit("Take Profit", "short", limit=profitTarget)