এই কৌশলটি ব্রেকআউট ট্রেডিং বাস্তবায়নের জন্য চলমান গড়, লাগুর আরএসআই সূচক এবং এডিএক্স সূচককে একত্রিত করে। যখন দ্রুত চলমান গড়টি ধীর চলমান গড়ের উপরে অতিক্রম করে, লাগুর আরএসআই 80 এর বেশি হয় এবং এডিএক্স 20 এর বেশি হয়; যখন দ্রুত চলমান গড়টি ধীর চলমান গড়ের নীচে অতিক্রম করে, লাগুর আরএসআই 20 এর কম হয় এবং এডিএক্স 20 এর বেশি হয় তখন এটি দীর্ঘ হয়। এই কৌশলটি বাজারের গতির বৈশিষ্ট্যগুলি ক্যাপচার করে এবং প্রবণতা বিকাশের শুরুতে বাজারে প্রবেশ করে।
কৌশলটি মূলত নিম্নলিখিত সূচকগুলি ব্যবহার করে প্রবণতা এবং প্রবেশের সময় নির্ধারণ করেঃ
চলমান গড় সংমিশ্রণঃ 16-দিনের ইএমএ, 48-দিনের ইএমএ, 200-দিনের এসএমএ। যখন স্বল্পমেয়াদী গড় দীর্ঘমেয়াদী গড়ের উপরে অতিক্রম করে তখন একটি আপট্রেন্ড নির্ধারিত হয় এবং নীচে অতিক্রম করার সময় একটি ডাউনট্রেন্ড।
লাগুরের আরএসআই সূচক ওভারকুপ এবং ওভারসোল্ড জোন নির্ধারণ করে। ৮০ এর বেশি আরএসআই একটি দীর্ঘ সংকেত, এবং ২০ এর কম একটি সংক্ষিপ্ত সংকেত।
ট্রেন্ডের অবস্থা নির্ধারণের জন্য ADX সূচক। ADX 20 এর বেশি একটি ট্রেন্ড নির্দেশ করে, যা ব্রেকআউট ট্রেডিংয়ের জন্য উপযুক্ত।
এন্ট্রি সিগন্যালগুলি চলমান গড় সংমিশ্রণের দিক দ্বারা নির্ধারিত হয়, লেগুর আরএসআই দ্বারা এন্ট্রি টাইমিং, এবং অ-ট্রেন্ডিং বাজারগুলি এডিএক্স দ্বারা ফিল্টার করা হয়। প্রস্থান সংকেতগুলি যখন চলমান গড়গুলি পিছনে ক্রস করে তখন উত্পন্ন হয়। সামগ্রিক কৌশল বিচারের কাঠামোটি বেশ যুক্তিসঙ্গত, বিভিন্ন সূচকগুলি দীর্ঘ / সংক্ষিপ্ত এন্ট্রি এবং প্রস্থানগুলি নির্ধারণের জন্য একসাথে কাজ করে।
এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ
প্রবণতা গতি ধরুনঃ কৌশলটি কেবল প্রবণতা বিকাশের শুরুতে বাজারে প্রবেশ করে, প্রবণতা থেকে এক্সপোনেন্সিয়াল মুনাফা অর্জন করে।
সীমিত ক্ষতিঃ স্টপ লসগুলি যথাযথভাবে সেট করা হয় যাতে পৃথক ব্যবসায়ের ক্ষতি সীমাবদ্ধ থাকে। এমনকি হারানো ব্যবসায়েরও লাভের সম্ভাবনা রয়েছে।
সঠিক সংমিশ্রিত সূচকঃ চলমান গড়, লাগুর আরএসআই এবং এডিএক্স বাজারের দিকনির্দেশ এবং প্রবেশের সময়কাল তুলনামূলকভাবে সঠিকভাবে নির্ধারণ করতে পারে।
সহজ বাস্তবায়নঃ কৌশলটি কেবলমাত্র তিনটি সূচক ব্যবহার করে এবং এটি বোঝা এবং বাস্তবায়ন করা সহজ।
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
প্রবণতা বিপরীত হওয়ার ঝুঁকিঃ প্রবণতা অনুসরণকারী কৌশল হিসাবে, প্রবণতা বিপরীত সময় সনাক্ত না হলে বড় ক্ষতি হতে পারে।
অ্যাকাউন্ট বন্ধের ঝুঁকিঃ বিভিন্ন বাজারে অ্যাকাউন্ট বন্ধ হওয়ার ঝুঁকি থাকে।
প্যারামিটার অপ্টিমাইজেশান ঝুঁকিঃ ব্যর্থতা এড়াতে বিভিন্ন বাজারের জন্য সূচক প্যারামিটারগুলি সামঞ্জস্য করতে হবে।
প্রতিরোধ ব্যবস্থাঃ
একক ট্রেড ক্ষতির পরিমাণ সীমাবদ্ধ করার জন্য কঠোর স্টপ লস।
সূচক প্যারামিটার এবং ব্রেকআউট থ্রেশহোল্ডগুলি অপ্টিমাইজ করুন।
ফিউচার হেজিং ইত্যাদি ব্যবহার করে ড্রডাউন পরিচালনা করা।
কৌশলটি অপ্টিমাইজ করার কিছু উপায়গুলির মধ্যে রয়েছেঃ
প্যারামিটার অপ্টিমাইজেশনঃ সর্বোত্তম সেটিংসের সন্ধানের জন্য চলমান গড় সময়ের সমন্বয়, লাগুরের আরএসআই প্যারামিটার, এডিএক্স প্যারামিটার পরীক্ষা করুন।
ব্রেকআউট অপ্টিমাইজেশনঃ ট্রেডিং ফ্রিকোয়েন্সি এবং লাভজনকতা ভারসাম্য বজায় রাখার জন্য বিভিন্ন চলমান গড় ব্রেকআউট থ্রেশহোল্ড পরীক্ষা করুন।
এন্ট্রি অপ্টিমাইজেশানঃ আরো সঠিক এন্ট্রি টাইমিং জন্য Laguerre RSI সঙ্গে মিলিত অন্যান্য সূচক পরীক্ষা।
প্রস্থান অপ্টিমাইজেশনঃ চলমান গড়ের সাথে সংমিশ্রণে অন্যান্য প্রস্থান সংকেতগুলি গবেষণা করুন।
লাভ গ্রহণ বনাম স্টপ লস অপ্টিমাইজেশনঃ রিটার্ন অপ্টিমাইজ করার জন্য বিভিন্ন কৌশল পরীক্ষা করুন।
সংক্ষেপে, এই কৌশলটি সঞ্চালন গড়, লাগুর আরএসআই এবং এডিএক্সের সংমিশ্রণ ব্যবহার করে প্রবেশ এবং প্রস্থানগুলি নির্ধারণের জন্য প্রবণতা সরানো কার্যকরভাবে ক্যাপচার করে। প্রবণতা বিকাশের প্রাথমিক পর্যায়ে প্রবেশ করে এবং প্রবণতা চলার নিবিড়ভাবে অনুসরণ করে, এক্সপোনেন্সিয়াল মুনাফা অর্জন করা যায়, যখন স্টপ লস ক্ষতি সীমাবদ্ধ করতে সহায়তা করে। কৌশলটি বিনিয়োগকারীদের জন্য উপযুক্ত যাঁরা বাজারের বিচারগুলি আরামদায়ক করে তোলে, পাশাপাশি প্যারামিটার অপ্টিমাইজেশনের পরে স্বয়ংক্রিয় ট্রেডিং করে। সামগ্রিকভাবে কৌশলটির শক্তিশালী ব্যবহারিক উপযোগিতা রয়েছে।
/*backtest start: 2023-12-05 00:00:00 end: 2023-12-12 00:00:00 period: 1m basePeriod: 1m 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/ // © PtGambler //@version=5 strategy("3MA + Laguerre RSI + ADX [Pt]", shorttitle = "3MA+LaRSI+ADX[Pt]", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills = false, max_bars_back = 500) // ********************************** Trade Period / Strategy Setting ************************************** startY = input(title='Start Year', defval=2011, group = "Backtesting window") startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Backtesting window") startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Backtesting window") finishY = input(title='Finish Year', defval=2050, group = "Backtesting window") finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Backtesting window") finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Backtesting window") timestart = timestamp(startY, startM, startD, 00, 00) timefinish = timestamp(finishY, finishM, finishD, 23, 59) use_entry_sess = input.bool(false, 'Use Entry Session Window', group = "Trading Session") t1_session = input("0930-1555:23456", "Entry Session", group="Trading Session", tooltip = "Entry Signal only generated within this period.") t1 = time(timeframe.period, t1_session) window = true margin_req = input.float(1, title="Margin Requirement / Leverage", step=0.1, group = "Trading Options") qty_per_trade = input.float(100, title = "% of initial capital per trade", group = "Trading Options") reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options") reinvest_percent = input.float(defval=100, title = "Reinvest percentage", group="Trading Options") close_eod = input.bool(false, "All trades will close at the close of trading window", group = "Trading Options") close_b4_open = input.bool(false, "Position must hit either SL/PT before entering new trade", group = "Trading Options") profit = strategy.netprofit strategy.initial_capital = 50000 float trade_amount = math.floor(strategy.initial_capital*margin_req / close) if strategy.netprofit > 0 and reinvest trade_amount := math.floor((strategy.initial_capital* (qty_per_trade/100)+(profit*reinvest_percent*0.01))*margin_req/ close) else trade_amount := math.floor(strategy.initial_capital* (qty_per_trade/100)*margin_req / close) // ****************************************************************************************** group_ma = "Moving Average Ribbon" group_larsi = "Laguerre RSI" group_adx = "ADX" group_SL = "Stop Loss / Profit Target" // ----------------------------------------- MA Ribbon ------------------------------------- ema1_len = input.int(16, "Fast EMA Length", group = group_ma) ema2_len = input.int(48, "Slow EMA Length ", group = group_ma) sma1_len = input.int(200, "Slow SMA Length", group = group_ma) ema1 = ta.ema(close, ema1_len) ema2 = ta.ema(close, ema2_len) sma1 = ta.sma(close, sma1_len) plot(ema1, "EMA 1", color.white, linewidth = 2) plot(ema2, "EMA 2", color.yellow, linewidth = 2) plot(sma1, "SMA 1", color.purple, linewidth = 2) ma_bull = ema1 > ema2 and ema2 > sma1 ma_bear = ema1 < ema2 and ema2 < sma1 // ------------------------------------------ Laguerre RSI --------------------------------------- alpha = input.float(0.2, title='Alpha', minval=0, maxval=1, step=0.1, group = group_larsi) gamma = 1 - alpha L0 = 0.0 L0 := (1 - gamma) * close + gamma * nz(L0[1]) L1 = 0.0 L1 := -gamma * L0 + nz(L0[1]) + gamma * nz(L1[1]) L2 = 0.0 L2 := -gamma * L1 + nz(L1[1]) + gamma * nz(L2[1]) L3 = 0.0 L3 := -gamma * L2 + nz(L2[1]) + gamma * nz(L3[1]) cu = (L0 > L1 ? L0 - L1 : 0) + (L1 > L2 ? L1 - L2 : 0) + (L2 > L3 ? L2 - L3 : 0) cd = (L0 < L1 ? L1 - L0 : 0) + (L1 < L2 ? L2 - L1 : 0) + (L2 < L3 ? L3 - L2 : 0) temp = cu + cd == 0 ? -1 : cu + cd LaRSI = temp == -1 ? 0 : cu / temp LaRSI := LaRSI * 100 bull_LaRSI = LaRSI > 80 bear_LaRSI = LaRSI < 20 // --------------------------------------- ADX ------------------------ adxlen = input(14, title="ADX Smoothing", group = group_adx) dilen = input(14, title="DI Length", group = group_adx) 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) active_adx = sig > 20 //and sig > sig[1] // ******************************* Profit Target / Stop Loss ********************************************* use_SLPT = input.bool(false, 'Use Fixed SL / PT', group = group_SL) SL = input.float(50, 'Stop loss in ticks', step = 1, group = group_SL) * syminfo.mintick PT = input.float(100, "Profit target in ticks", step = 1, group = group_SL) * syminfo.mintick var L_PT = 0.0 var S_PT = 0.0 var L_SL = 0.0 var S_SL = 0.0 if strategy.position_size > 0 L_SL := L_SL[1] L_PT := L_PT[1] else if strategy.position_size < 0 S_SL := S_SL[1] S_PT := S_PT[1] else L_SL := close - SL L_PT := close + PT S_SL := close + SL S_PT := close - PT entry_line = plot(use_SLPT and strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na, "Entry Price", color.white, linewidth = 1, style = plot.style_linebr) L_PT_line = plot(use_SLPT and strategy.position_size > 0 ? L_PT : na, "L PT", color.green, linewidth = 2, style = plot.style_linebr) S_PT_line = plot(use_SLPT and strategy.position_size < 0 ? S_PT : na, "S PT", color.green, linewidth = 2, style = plot.style_linebr) L_SL_line = plot(use_SLPT and strategy.position_size > 0 ? L_SL : na, "L SL", color.red, linewidth = 2, style = plot.style_linebr) S_SL_line = plot(use_SLPT and strategy.position_size < 0 ? S_SL : na, "S SL", color.red, linewidth = 2, style = plot.style_linebr) fill(L_PT_line, entry_line, color = color.new(color.green,90)) fill(S_PT_line, entry_line, color = color.new(color.green,90)) fill(L_SL_line, entry_line, color = color.new(color.red,90)) fill(S_SL_line, entry_line, color = color.new(color.red,90)) // ---------------------------------- Strategy setup ------------------------------------------------------ L_entry1 = ma_bull and bull_LaRSI and active_adx S_entry1 = ma_bear and bear_LaRSI and active_adx L_exit1 = ta.crossunder(ema1, ema2) S_exit1 = ta.crossover(ema1, ema2) // Trigger zones bgcolor(ma_bull ? color.new(color.green ,90) : na) bgcolor(ma_bear ? color.new(color.red,90) : na) if L_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true) strategy.entry("Long", strategy.long, trade_amount) if S_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true) strategy.entry("Short", strategy.short, trade_amount) if use_SLPT strategy.exit("Exit Long", "Long", limit = L_PT, stop = L_SL, comment_profit = "Exit Long, PT hit", comment_loss = "Exit Long, SL hit") strategy.exit("Exit Short", "Short", limit = S_PT, stop = S_SL, comment_profit = "Exit Short, PT hit", comment_loss = "Exit Short, SL hit") else if L_exit1 strategy.close("Long", comment = "Exit Long") if S_exit1 strategy.close("Short", comment = "Exit Short") if use_entry_sess and not window and close_eod strategy.close_all(comment = "EOD close")