
पीछे हटने और पीछे हटने के लिए एक रणनीति है, जो एक प्रवृत्ति को पकड़ने और पीछे हटने के लिए एक रणनीति है, जिसमें औसत रेखा, एमएसीडी, आरएसआई और एडीएक्स जैसे संकेतक शामिल हैं। यह विशेष रूप से एक उग्रवादी राजा के लिए है, जो अपने सामान्य पीछे हटने की विशेषता का उपयोग करके पीछे हटने का संचालन करता है।
यह रणनीति ईएमए की औसत रेखा का उपयोग करती है ताकि समग्र प्रवृत्ति की दिशा का पता लगाया जा सके और प्रवृत्ति के मजबूत कमजोर क्षेत्रों का निर्माण किया जा सके। जब कीमतें मजबूत क्षेत्रों से कमजोर क्षेत्रों में वापस आ जाती हैं, तो यह रणनीति प्रवृत्ति को उलटने का अवसर प्रदान करती है।
गलतफहमी को फ़िल्टर करने के लिए, रणनीति में MACD संकेतक को शामिल किया गया है ताकि अल्पकालिक प्रतिवर्ती संकेतों का आकलन किया जा सके। MACD के पूर्ण मूल्य को एक निश्चित परिमाण से अधिक होने पर, प्रतिवर्ती अवसरों को बढ़ाया जाता है। साथ ही, ADX के मूल्य को एक निश्चित स्तर से अधिक की आवश्यकता होती है, यह सुनिश्चित करने के लिए कि वर्तमान में ट्रेंडिंग बाजार में है, न कि बाजार को समेकित करना।
अंत में, आरएसआई संकेतकों का कार्य ओवरबॉट क्षेत्र में खरीदने से बचने और ओवरबॉट क्षेत्र को बेचने से बचने के लिए है। आरएसआई मूल्य केवल एक निश्चित सीमा तक सीमित होने पर संकेत देता है।
प्रत्येक ईएमए औसत रेखा के क्रॉसिंग पर, रणनीति ट्रेडों की संख्या शून्य है। साथ ही, प्रत्येक क्रॉसिंग पर अधिकतम ट्रेडों की संख्या निर्धारित की जा सकती है, ताकि दोहराए जाने वाले ट्रेडों से बचा जा सके।
जब शर्तें पूरी हो जाती हैं, तो स्टॉप-लॉस और स्टॉप-स्टॉप अनुपात के आधार पर एक कमीशन सेट करें और रिवर्स ट्रेड करें।
इस रणनीति का सबसे बड़ा लाभ ईएमए द्वारा निर्मित मजबूत कमजोर क्षेत्रों का उपयोग करना है, जो कि कट्टरपंथी तिल के राजा के पीछे हटने की विशेषता को पकड़ता है। गलत प्रविष्टि को फ़िल्टर करने के लिए कई संकेतकों का उपयोग किया जाता है, और उच्च विश्वसनीयता है।
इस रणनीति के साथ एक एकल आघात सूचक की तुलना में प्रवृत्ति का आकलन किया जाता है, जिससे अनावश्यक उलटापन को कम किया जा सकता है। प्रत्येक ईएमए क्रॉसिंग के लिए अधिकतम ट्रेडों की संख्या को नियंत्रित करने के साथ, बार-बार ट्रेडों से बड़े नुकसान से बचा जा सकता है।
इस रणनीति का सबसे बड़ा जोखिम यह है कि राजा ने वापस नहीं खींचा। यदि राजा सीधे ईएमए को तोड़ता है और आगे बढ़ता है या गिरता है, तो यह रणनीति गलत संकेत देती है और वापस आ जाती है। इस समय नुकसान को नियंत्रित करने के लिए स्टॉप की आवश्यकता होती है।
इसके अलावा, अनुचित संकेतक पैरामीटर भी सिग्नल की गुणवत्ता में गिरावट का कारण बन सकता है। विभिन्न बाजार स्थितियों के लिए अनुकूलित पैरामीटर को बार-बार परीक्षण करने की आवश्यकता होती है।
अंत में, स्टॉप लॉस को बहुत बड़ा सेट करना, या रिवर्स के बाद एक उग्र झटके जारी रखना, एकल नुकसान को बढ़ा सकता है। इसके लिए उचित स्टॉप लॉस की आवश्यकता होती है, और जोखिम प्रबंधन को मजबूत करना आवश्यक है।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
विभिन्न बाजारों और मापदंडों का परीक्षण करना ताकि ईएमए रुझानों का अधिक सटीक रूप से आकलन कर सके;
MACD मापदंडों को अनुकूलित करना ताकि उनके रिवर्स सिग्नल अधिक सटीक और विश्वसनीय हों;
आरएसआई के पैरामीटर की सीमा को समायोजित करें ताकि ओवरबॉट और ओवरसोल्ड क्षेत्र को बहुत अधिक उग्रता से बचा जा सके;
स्टॉप लॉस स्टॉप अनुपात का अनुकूलन करें और एकमुश्त नुकसान के जोखिम को कम करें।
पीछे हटने और पीछे हटने वाले राजा की रणनीति विशेष रूप से कट्टरपंथी राजा की पीछे हटने वाली विशेषताओं के लिए पीछे हटने के लिए है, जो अल्पकालिक पलटाव के अवसरों को प्रभावी ढंग से पकड़ सकता है। यह प्रवृत्ति की दिशा और ताकत का आकलन करने के लिए ईएमए के कई फ़िल्टर का उपयोग करता है; और एमएसीडी, आरएसआई और अन्य संकेतकों के साथ प्रवेश की पुष्टि करने के लिए, उच्च विश्वसनीयता। पैरामीटर परीक्षण और अनुकूलन के माध्यम से, विभिन्न बाजार स्थितियों के लिए अनुकूलन करने में सक्षम, एक बहुत ही व्यावहारिक प्रवृत्ति उलट रणनीति है।
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
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/
// © npietronuto1
//@version=5
strategy("Hulk Scalper x35 Leverage", shorttitle = "Smash Pullback Strat", overlay=true, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//RSI
rsiLength = input.int(20)
RsiTopInput = input.int(2)
RsiBotInput = input.int(-2)
// toprsiLine = hline(RsiTopInput, title = "Rsi Top Line", linestyle = hline.style_solid)
// botrsiLine = hline(RsiBotInput, title = "Rsi Bottom Line", linestyle = hline.style_solid)
rsi = ta.rsi(close, rsiLength)
rsiWeighted = rsi - 50 //Zeros Rsi to look nicer
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up = ta.change(high)
down = -ta.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 = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ADXfilterlevel = input.int(33, title = "ADX filter amount")
// plot(sig, color=color.red, title="ADX")
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//MACD
FastMacdLength = input.int(12, group = "MACD")
SlowMacdLength = input.int(26, group = "MACD")
SignalLength = input.int(11, group = "MACD")
MacdTickAmountNeeded = input.float(5.45, title = "Tick Amount for entry", group = "MACD")
res = input.timeframe("1", group = "MACD")
// bullishgrow_col = input.color(defval = #3179f5)
// bullishweaken_col = input.color(defval = #00e1ff)
// bearishweaken_col = input.color(defval = #ff01f1)
// bearishgrow_col = input.color(defval = #9d00e5)
[FastMacd, SlowMacd, Macdhist] = ta.macd(close, FastMacdLength, SlowMacdLength, SignalLength)
//Pull MACD from Lower timeframe
MACD = request.security(syminfo.tickerid, res, Macdhist, gaps = barmerge.gaps_on)
//Grow and Fall Color
// getgrow_fall_col(Value) =>
// if Value >= 0
// if Value >= Value[1]
// color.new(bullishgrow_col, transp = 10)
// else if Value <= Value[1]
// color.new(bullishweaken_col, transp = 10)
// else if Value <= 0
// if Value <= Value[1]
// color.new(bearishgrow_col, transp = 10)
// else if Value >= Value[1]
// color.new(bearishweaken_col, transp = 10)
//CONDITIONS that check if MACD is overbought or oversold
MACDisAboveBand = MACD > MacdTickAmountNeeded
MACDisBelowBand = MACD < MacdTickAmountNeeded*-1
//Plot
// plot(MACD, style = plot.style_columns, color = getgrow_fall_col(MACD))
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//EMAs
//Inputs
EmaFastLength = input.int(50, title = "Ema Fast Length")
EmaSlowLength = input.int(200, title = "Ema Slow Length")
StrongUpTrendCol = input.color(color.rgb(74, 255, 163))
//WeakUptrend = input.color(color.rgb(74, 255, 163, 50))
StrongDownTrendCol = input.color(color.rgb(255, 71, 84))
//WeakDownTrend = input.color(color.rgb(255, 71, 84, 50))
//Calculations
emaFast= ta.ema(close, EmaFastLength)
emaSlow= ta.ema(close, EmaSlowLength)
emaDist=emaFast-emaSlow
EmaLengthFraction = emaDist/4
emafrac5 = emaSlow + EmaLengthFraction
emafrac4 = emaSlow + EmaLengthFraction*2
emafrac3 = emaSlow + EmaLengthFraction*3
emafrac2 = emaSlow + EmaLengthFraction*4
UptrendCol_DowntrendCol= emaFast>=emaSlow ? StrongUpTrendCol:StrongDownTrendCol
//Plot
ema1p = plot(emaFast, color = color.new(#000000, transp = 100))
ema2p = plot(emafrac2, color = color.new(#000000, transp = 100))
ema3p = plot(emafrac3, color = color.new(#000000, transp = 100))
ema4p = plot(emafrac4, color = color.new(#000000, transp = 100))
ema5p = plot(emafrac5, color = color.new(#000000, transp = 100))
ema6p = plot(emaSlow, color = color.new(#000000, transp = 100))
fill(ema2p,ema3p, color = color.new(UptrendCol_DowntrendCol, 70))
fill(ema3p,ema4p, color = color.new(UptrendCol_DowntrendCol, 60))
fill(ema4p,ema5p, color = color.new(UptrendCol_DowntrendCol, 50))
fill(ema5p,ema6p, color = color.new(UptrendCol_DowntrendCol, 40))
//Conditons
FastEma_above_SlowEma = emaFast > emaSlow
FastEma_below_SlowEma = emaFast < emaSlow
emaCrossEvent = ta.crossover(emaFast, emaSlow) or ta.crossover(emaSlow, emaFast)
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Trade Cap per EMA X
//Inputs
MaxTrades_PerCross_Checkbox = input.bool(true, "Limit Trades Per Cross", group = "Filters")
TrdCount = 0//Variable that keeps current trade count
if(TrdCount[1] > 0)//Passes variable on to current candle
TrdCount := TrdCount[1]
//Reset trade count if EMAs X
emaXevent = ta.crossover(emaFast, emaSlow) or ta.crossover(emaSlow, emaFast) // Check for EMA cross
if(emaXevent)
TrdCount := 0
//Conditions
MaxTrades = input.int(6)
IsMaxTrades_BelowCap = TrdCount[1] < MaxTrades //Condition that applies max trade count
if(not MaxTrades_PerCross_Checkbox)
IsMaxTrades_BelowCap := true
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//STRATEGY LOGIC
//Parameters
TakeProfitInput = input.float(0.0135, title = "Take Profit %", group = "TP/SL")
StopLossInput = input.float(0.011, title = "Stop Loss %", group = "TP/SL")
//TP/SL calculations
Long_takeProfit = close * (1 + TakeProfitInput)
Long_stopLoss = close * (1 - StopLossInput)
Short_takeProfit = close * (1 - TakeProfitInput)
Short_stopLoss = close * (1 + StopLossInput)
//LONG and Short
LongConditionPt1 = close > emaSlow and MACDisBelowBand and sig > ADXfilterlevel
LongConditionPt2 = FastEma_above_SlowEma and IsMaxTrades_BelowCap and strategy.position_size == 0
//Checks if Rsi Inbetween Lines
LongConditionPt3 = rsiWeighted < RsiTopInput and rsiWeighted > RsiBotInput
ShortConditionPt1 = close < emaSlow and MACDisAboveBand and sig > ADXfilterlevel
ShortConditionPt2 = FastEma_below_SlowEma and IsMaxTrades_BelowCap and strategy.position_size == 0
//Checks if Rsi Inbetween Lines
ShortConditionPt3 = rsiWeighted < RsiTopInput and rsiWeighted > RsiBotInput
// longCondition = FastEma_above_SlowEma and MACDisBelowBand and IsMaxTrades_BelowCap and rsiWeighted < RsiTopInput and strategy.position_size == 0
longCondition = LongConditionPt1 and LongConditionPt2 and LongConditionPt3
if(longCondition)
strategy.entry("long", strategy.long)
strategy.exit("exit", "long", limit = Long_takeProfit, stop = Long_stopLoss)
TrdCount := TrdCount + 1//ADD to Max Trades Count
alert("Go Long with TP at" + str.tostring(Long_takeProfit) + "and SL at" + str.tostring(Long_stopLoss), alert.freq_once_per_bar_close)
shortCondition = ShortConditionPt1 and ShortConditionPt2 and ShortConditionPt3
if(shortCondition )
strategy.entry("short", strategy.short)
strategy.exit("exit", "short", limit = Short_takeProfit, stop = Short_stopLoss)
TrdCount := TrdCount + 1 //ADD to Max Trades Count
alert("Go Short with TP at" + str.tostring(Short_takeProfit) + "and SL at" + str.tostring(Short_stopLoss), alert.freq_once_per_bar_close)