মোমেন্টাম ব্রেকআউট মুভিং এভারেজ কৌশল একটি স্টক ট্রেডিং কৌশল যা গতির সূচকগুলির সাথে চলমান গড় ক্রসওভার সংকেতগুলিকে একত্রিত করে। কৌশলটি এক্সপোনেনশিয়াল মুভিং এভারেজ (ইএমএ), সহজ চলমান গড় (এসএমএ), চলমান গড় কনভার্জেন্স ডিভার্জেন্স (এমএসিডি), এবং একটি সংশোধিত আপেক্ষিক শক্তি সূচক (স্টকআরএসআই) সহ একাধিক প্রযুক্তিগত সূচক ব্যবহার করে। যখন স্বল্পমেয়াদী গতির সূচকগুলি বিপরীত সংকেত দেখায়, তখন কৌশলটি মুনাফা নেয়।
এই কৌশলটির মূল উপাদানগুলি হল:
EMA/SMA ক্রসওভার: একটি ৯ পেরিওড EMA দ্রুত রেখা একটি ২১ পেরিওড SMA ধীর রেখার উপরে ক্রস করে একটি ক্রয় সংকেত সক্রিয় করে।
এমএসিডি সূচক: MACD হিস্টোগ্রামটি EMA/SMA ক্রসওভার সংকেতের সাথে সংযুক্ত হলে অতিরিক্ত নিশ্চিতকরণের জন্য ইতিবাচক হতে হবে।
স্টকআরএসআই সূচক: স্টকআরএসআই যখন ওভারবয়ড লেভেলের (৮০) বা ওভারসোল্ড লেভেলের (২০) নিচে থাকে তখন সংকেত সক্রিয় হয় ।
বোলিংজার ব্যান্ড: দামের ব্যাংকের মধ্যে থাকা প্রয়োজন যেখানে মাঝারি ব্যাংকের 20 পিরিয়ডের এসএমএ এবং ব্যাংকের প্রস্থ দুটি স্ট্যান্ডার্ড ডিভিয়েশন।
ক্ষতি বন্ধ করুন এবং লাভ নিন: ১৪ পেরিওডের ATR এর উপর ভিত্তি করে গণনা করা হয়।
এই কৌশলটি ক্রয়ের সংকেত দেওয়ার জন্য 3 টির মধ্যে কমপক্ষে 2 টি সূচকের প্রয়োজন, দামটি বোলিংজার ব্যান্ডের মধ্যে রয়েছে এবং চূড়ান্ত ক্রয়ের সংকেত তৈরি করতে দীর্ঘমেয়াদী প্রবণতা উত্থান অব্যাহত রয়েছে। এটি যখন এমএসিডি হিস্টোগ্রাম নেতিবাচক হয়ে যায় এবং স্টকআরএসআই ওভারকোপড অঞ্চলে প্রবেশ করে তখন এটি একটি বিক্রয় সংকেত দেয়।
এই কৌশলটির মূল শক্তি হল:
ব্যাকটেস্টের চমৎকার ফলাফল: একাধিক প্রমাণিত সূচকগুলি রেফারেন্স মার্ক এবং পৃথক সূচকগুলির তুলনায় ভাল পারফরম্যান্সের দিকে পরিচালিত করে।
অপ্টিমাইজড প্যারামিটার: ইএমএ সময়কাল এবং বোলিংজার ব্যান্ডের মতো মূল পরামিতিগুলি উন্নত স্থিতিশীলতার জন্য অনুকূলিত করা হয়েছে।
স্বয়ংক্রিয় স্টপ লস/লাভ গ্রহণ: বোলিংজার ব্যান্ড এবং এটিআর ঝুঁকি নিয়ন্ত্রণের জন্য স্টপগুলির গতিশীল সমন্বয় করতে সক্ষম করে।
বাস্তবায়ন করা সহজ: পরিষ্কার কোড কাঠামো এবং সহজ তথ্য অ্যাক্সেসযোগ্যতা সহজ ব্যবহারিক ক্রিয়াকলাপের ফলাফল।
ভালো পারফরম্যান্স সত্ত্বেও, প্রধান ঝুঁকিগুলির মধ্যে রয়েছেঃ
মিথ্যা সংকেত: বাজারের অস্বাভাবিক অস্থিরতা বা সূচকগুলির ব্যর্থতা ভুল সংকেত তৈরি করতে পারে। তারপর দীর্ঘমেয়াদী প্রবণতা একটি অতিরিক্ত ফিল্টার হিসাবে অন্তর্ভুক্ত করা উচিত।
অপর্যাপ্ত পরামিতি: ভুল পরামিতিগুলি অত্যধিক ঘন ঘন বা অপর্যাপ্ত সংবেদনশীলতার দিকে পরিচালিত করতে পারে। বিভিন্ন পণ্য এবং বাজারের পরিবেশ অনুযায়ী পরামিতিগুলি সামঞ্জস্য করা উচিত।
অপ্রয়োজনীয় স্টপ লস: একটি স্টপ লস যা খুব সংকীর্ণ হয় তা অকাল বন্ধ হয়ে যায়, যখন একটি স্টপ লস সেট করা খুব প্রশস্ত হয় তা অত্যধিক ক্ষতির ফলে হতে পারে। স্টপ লস এবং লাভের স্তরের মধ্যে সঠিক ভারসাম্য অর্জন করা উচিত।
উপরের ঝুঁকিগুলি মোকাবেলা করার জন্য, নিম্নলিখিত ব্যবস্থা গ্রহণ করা যেতে পারেঃ
ম্যানুয়াল হস্তক্ষেপ: অস্বাভাবিক পরিস্থিতিতে, সংকেতগুলি ম্যানুয়ালি পরীক্ষা করা যেতে পারে, পরামিতিগুলি পুনরায় সামঞ্জস্য করা বা কৌশলগুলি সাময়িকভাবে বন্ধ করা যেতে পারে।
প্যারামিটার অপ্টিমাইজেশন: আরও বৈজ্ঞানিক এবং উদ্দেশ্যমূলক পদ্ধতি যেমন জেনেটিক অ্যালগরিদমগুলি পদ্ধতিগত অপ্টিমাইজেশনের জন্য ব্যবহার করা যেতে পারে।
অস্থিরতা সংশোধিত স্টপ: স্টপ লস রেঞ্জগুলি অস্থিরতাকে অন্তর্ভুক্ত করার জন্য ATR এর 1-3 গুণ সেট করা যেতে পারে।
এই কৌশল নিম্নলিখিত ক্ষেত্রে আরও উন্নত করা যেতে পারেঃ
আরও শক্তিশালী স্টপ লস মেকানিজম: ট্রেলিং স্টপ লস বা চলমান গড়ের উপর ভিত্তি করে স্টপ অন্তর্ভুক্ত করা যেতে পারে।
ভলিউম ফিল্টার: ভুয়া ব্রেকআউট এড়াতে ভলিউম সূচক যোগ করা হচ্ছে।
গতিশীল পরামিতি: স্বয়ংক্রিয়ভাবে বাজারের পরিবর্তিত অবস্থার উপর ভিত্তি করে চলমান গড় সময়কাল এবং ব্যান্ড প্রস্থের মত প্যারামিটার অপ্টিমাইজ করা।
মেশিন লার্নিং: LSTM, RNN এবং অন্যান্য অ্যালগরিদমগুলি প্যারামিটারগুলির গতিশীল অপ্টিমাইজেশান সক্ষম করতে পারে।
মোমেন্টাম ব্রেকআউট মুভিং এভারেজ কৌশলটি একাধিক প্রযুক্তিগত সূচককে একত্রিত করার শক্তির উপর মূলধন অর্জন করে এবং দীর্ঘ ও স্বল্পমেয়াদী নিশ্চিতকরণের সাথে শালীন লাভজনকতা অর্জন করেছে। বাস্তবায়নে ভাল ঝুঁকি নিয়ন্ত্রণ পদ্ধতির সাথে, এই কৌশলটির আরও ধারাবাহিক আলফা রিটার্ন অর্জনের জন্য স্টপ লস প্রক্রিয়া এবং সংকেত ফিল্টারিংয়ের মতো ক্ষেত্রগুলিতে আরও উন্নতির জন্য প্রচুর সম্ভাবনা রয়েছে।
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true) // Volatility volatility = ta.atr(14) // EMA/MA Crossover fast_length = 9 slow_length = 21 fast_ma = ta.ema(close, fast_length) slow_ma = ta.sma(close, slow_length) crossover_signal = ta.crossover(fast_ma, slow_ma) // MACD [macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9) macd_signal = crossover_signal and (macdHistogram > 0) // Bollinger Bands source = close basis = ta.sma(source, 20) upper = basis + 2 * ta.stdev(source, 20) lower = basis - 2 * ta.stdev(source, 20) // Fractal-based Support and Resistance levels isFractalHigh = high[2] < high[1] and high[1] > high[0] isFractalLow = low[2] > low[1] and low[1] < low[0] resistance = ta.valuewhen(isFractalHigh, high[1], 0) support = ta.valuewhen(isFractalLow, low[1], 0) // StockRSI length = 14 K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length)) D = ta.sma(K, 3) overbought = 80 oversold = 20 stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought)) // Buy and sell conditions mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0) // Long-term Trend Check long_term_ma = ta.sma(close, 200) long_term_bullish = close > long_term_ma long_term_bearish = close < long_term_ma // Plot the long-term MA for visual clarity plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1) // Simplified Buy and Sell conditions buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper) sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought) // Potential SL and TP based on volatility potential_SL = close - volatility potential_TP = close + 2 * volatility plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr) plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr) // ... (rest of your code above) // State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting var bool inPosition = false var tradeCounter = 0 var tradeCounterDelayed = 0 // Declaration of the variable // Buy logic: Check if tradeCounter is 0 and the buy condition is met if tradeCounter == 0 and buy_condition strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP) inPosition := true tradeCounter := tradeCounter + 1 // Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position if tradeCounter == 1 and inPosition and sell_condition strategy.close("BUY") inPosition := false tradeCounter := tradeCounter - 1 // Update the delayed trade counter: tradeCounterDelayed := tradeCounter // Plotting bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na) plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small) plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small) // ... (rest of your code if any)