হাল্ক পুলব্যাক বিপরীত একটি কৌশল যা পুলব্যাক পর্যায়ে প্রবণতা বিপরীততা সনাক্ত করতে চলমান গড়, এমএসিডি, আরএসআই এবং এডিএক্স ব্যবহার করে। এটি বিশেষত আক্রমণাত্মক প্রবণতা অনুসরণকারীদের লক্ষ্য করে, বিপরীত ট্রেডগুলির জন্য তাদের সাধারণ পুলব্যাক বৈশিষ্ট্যগুলি মূলধন করে।
কৌশলটি সামগ্রিক প্রবণতা দিক নির্ধারণের জন্য ইএমএ ব্যবহার করে, পাশাপাশি শক্তি / দুর্বলতা অঞ্চল তৈরি করে। যখন মূল্য শক্তি থেকে দুর্বলতায় ফিরে আসে, কৌশলটি সম্ভাব্য বিপরীতমুখী সুযোগগুলি সনাক্ত করে।
মিথ্যা এন্ট্রিগুলি ফিল্টার করার জন্য, MACD সংক্ষিপ্ত মেয়াদী বিপরীত সংকেতগুলি নিশ্চিত করতে অন্তর্ভুক্ত করা হয়। যখন MACD পরম মান একটি নির্দিষ্ট প্রান্তিক অতিক্রম করে, বিপরীত সম্ভাবনা বৃদ্ধি পায়। ADX এছাড়াও একটি স্তরের উপরে থাকা প্রয়োজন, যা নিশ্চিত করে যে বাজারটি প্রবণতার পরিবর্তে বিস্তৃত।
অবশেষে, আরএসআই অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় অঞ্চলগুলি এড়াতে কাজ করে। যখন আরএসআই মানগুলি একটি সংজ্ঞায়িত পরিসরের মধ্যে থাকে তখনই সংকেত উত্পন্ন হয়।
ইএমএ ক্রসওভারে লেনদেনের সংখ্যা পুনরায় সেট করা হয়। ক্রসওভারের জন্য সর্বাধিক লেনদেনের সীমাও সেট করা যেতে পারে, অতিরিক্ত লেনদেন এড়ানো যায়।
যখন শর্ত পূরণ করা হয়, তখন রিভার্সাল ট্রেডের জন্য স্টপ লস এবং লাভের অনুপাতের ভিত্তিতে অর্ডার দেওয়া হয়।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল শক্তি / দুর্বলতা অঞ্চল তৈরির জন্য ইএমএ ব্যবহার করা, প্রত্যাহারের প্যাটার্নগুলিকে মূলধন করা। মাল্টি-ইন্ডিকেটর ফিল্টারিং নির্ভরযোগ্যতা উন্নত করে।
সিঙ্গল ওসিলেটর সূচকের তুলনায়, প্রবণতা নির্ধারণের যোগ অপ্রয়োজনীয় বিপরীতমুখীতা এড়াতে সহায়তা করে। ইএমএ ক্রসওভারে সর্বাধিক লেনদেন নিয়ন্ত্রণ করাও অতিরিক্ত লেনদেন রোধ করে।
সবচেয়ে বড় ঝুঁকি হ'ল যখন ট্রেন্ড অনুসরণকারীটি সরাসরি ইএমএগুলি ভেঙে দেয় না। এটি ভুল সংকেত তৈরি করবে এবং ক্ষতির কারণ হবে। ডাউনসাইড নিয়ন্ত্রণের জন্য স্টপ লস প্রয়োজন।
অনুপযুক্ত সূচক পরামিতিগুলিও সংকেতের গুণমানকে হ্রাস করতে পারে। বিভিন্ন বাজারের অবস্থার জন্য পরামিতিগুলিকে বারবার পরীক্ষা করা এবং অনুকূলিত করা দরকার।
অবশেষে, অত্যধিক স্টপ লস এবং বিপরীতের পরে অব্যাহত আগ্রাসন একক বাণিজ্য ক্ষতি বাড়িয়ে তুলতে পারে। যুক্তিসঙ্গত স্টপ এবং ঝুঁকি ব্যবস্থাপনা অপরিহার্য।
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
বিভিন্ন বাজার এবং পরামিতি পরীক্ষা করুন যাতে EMAs প্রবণতা ভালভাবে পরিমাপ করতে পারে।
আরো সঠিক এবং নির্ভরযোগ্য বিপরীত সংকেত জন্য MACD পরামিতি অপ্টিমাইজ করুন।
অতিরিক্ত ক্রয়/বিক্রয় মাত্রা এড়াতে RSI পরিসীমা সামঞ্জস্য করুন।
একক বাণিজ্য ঝুঁকি হ্রাস করার জন্য স্টপ লস এবং লাভের অনুপাতকে অনুকূল করুন।
হাল্ক পুলব্যাক বিপরীতমুখী কৌশলটি বিশেষভাবে আক্রমণাত্মক প্রবণতা অনুসরণকারীদের পুলব্যাক প্যাটার্নগুলিকে লক্ষ্য করে, কার্যকরভাবে স্বল্পমেয়াদী বিপরীতমুখী সুযোগগুলি ক্যাপচার করে। এটি মাল্টি-স্তরীয় প্রবণতা দিক এবং শক্তি ফিল্টারিংয়ের জন্য ইএমএ ব্যবহার করে, উচ্চ নির্ভরযোগ্যতার এন্ট্রি নিশ্চিতকরণের জন্য এমএসিডি, আরএসআই সহ। যথাযথ পরামিতি পরীক্ষা এবং অপ্টিমাইজেশনগুলি বিভিন্ন বাজারের পরিবেশে অভিযোজন সক্ষম করে, এটিকে একটি খুব ব্যবহারিক প্রবণতা বিপরীতমুখী কৌশল করে তোলে।
/*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)