
ইএমএ ক্রস এবং বুলিংয়ের ডাবল এন্ট্রি কৌশলটি একটি পরিমাণগত ট্রেডিং সিস্টেম যা প্রবণতা ট্র্যাকিং এবং ওভারল্যাপ ব্রেকিংয়ের সমন্বয় করে। এই কৌশলটি মূলত সূচকীয় মুভিং এভারেজ (ইএমএ) এর ক্রস ব্যবহার করে বাজার প্রবণতা নির্ধারণ করে এবং বুলিংয়ের ব্যান্ডগুলি (বোলিংগার ব্যান্ডস) ব্যবহার করে সম্ভাব্য ব্রেকিংয়ের সুযোগগুলি সনাক্ত করতে। এই পদ্ধতিটি শক্তিশালী বাজার প্রবণতা ক্যাপচার করার জন্য এবং বুলিংয়ের ব্যান্ডের ব্রেকিংয়ের মাধ্যমে অতিরিক্ত এন্ট্রি পয়েন্ট সরবরাহ করার জন্য তৈরি করা হয়েছে, যার ফলে ব্যবসায়ের সুযোগ বৃদ্ধি এবং তহবিল পরিচালনা অপ্টিমাইজ করা যায়।
ইএমএ ক্রসঃ কৌশলটি 12 এবং 26 চক্রের ইএমএ ব্যবহার করে ট্রেন্ডের দিকনির্দেশের জন্য। যখন দ্রুত ইএমএ ((12 চক্র) ধীর ইএমএ ((26 চক্র) অতিক্রম করে, তখন একটি মাল্টি-সিগন্যাল উত্পন্ন হয়; বিপরীতভাবে, একটি ফাঁকা সংকেত উত্পন্ন হয়।
বুলিন ব্যান্ডঃ কৌশলটি 55 টি চক্রের সাথে 0.9 স্ট্যান্ডার্ড বিভাজন সহ বুলিন ব্যান্ড সেটিং ব্যবহার করে। যখন দামটি ট্র্যাকের বাইরে চলে যায়, তখন যদি এটি ইতিমধ্যে একটি মাল্টি-হেড ট্রেন্ডে থাকে তবে এটি অতিরিক্ত প্রবেশের সুযোগ দেয়।
ইনপুট লজিকঃ
আউট লজিকঃ
স্টপ লস সেটিংঃ
ঝুঁকি ব্যবস্থাপনা:
মাল্টি-ডাইমেনশনাল বিশ্লেষণঃ ট্রেন্ড ট্র্যাকিং (ইএমএ) এবং ওভারল্যাপ ব্রেকিং (বুলিন ব্যান্ড) কৌশলগুলির সমন্বয়ে ট্রেডিং সিগন্যালের নির্ভরযোগ্যতা বাড়ায়।
নমনীয় প্রবেশ ব্যবস্থাঃ প্রধান ইএমএ ক্রস সিগন্যাল ছাড়াও, বুলিন বন্ডের ব্রেকডাউন ব্যবহার করে অতিরিক্ত প্রবেশের সুযোগ প্রদান করা হয়, যা কৌশলটির অভিযোজনযোগ্যতা বৃদ্ধি করে।
গতিশীল ঝুঁকি ব্যবস্থাপনাঃ এটিআর ব্যবহার করে স্টপ লস এবং পজিশনের আকার পরিবর্তন করা যায়, যাতে কৌশলটি বিভিন্ন বাজারের অবস্থার অধীনে অস্থিরতার সাথে আরও ভালভাবে মানিয়ে নিতে পারে।
বাজারের অবস্থা উপলব্ধি করাঃ বাজারের অবস্থা নির্ধারণের জন্য ব্রিনের বন্ডের মধ্যবর্তী লাইন ব্যবহার করে, ঝুঁকি হ্রাস করার জন্য প্রতিকূল অবস্থার মধ্যে ট্রেডিং স্থগিত করার বিকল্প রয়েছে।
তহবিল ব্যবস্থাপনা অপ্টিমাইজেশানঃ শতকরা ঝুঁকি ব্যবস্থাপনা এবং ATR গতিশীলভাবে অবস্থানের আকার পরিবর্তন করে, আরও সূক্ষ্ম তহবিল নিয়ন্ত্রণ উপলব্ধ।
কাস্টমাইজযোগ্যতাঃ একাধিক প্যারামিটার যেমন ইএমএ চক্র, ব্রিনব্যান্ড সেটিং, এটিআর গুণক ইত্যাদি সামঞ্জস্য করা যায়, যাতে কৌশলগুলি বিভিন্ন ধরণের লেনদেন এবং বাজারের পরিবেশের সাথে খাপ খাইয়ে নিতে পারে।
প্রবণতা বিপরীত ঝুঁকিঃ শক্তিশালী প্রবণতা বাজারে ভাল কাজ করে, তবে ঘন ঘন বাজারে মিথ্যা ব্রেকিং সংকেত দেখা দিতে পারে।
অতিরিক্ত লেনদেনের ঝুঁকিঃ বুলিন বন্ডের ভাঙ্গন অতিরিক্ত লেনদেনের সংকেত সৃষ্টি করতে পারে, যার ফলে লেনদেনের খরচ বাড়তে পারে।
স্লাইড পয়েন্টের ঝুঁকিঃ উচ্চতর অস্থিরতার বাজারে, প্রবেশ এবং প্রস্থান মূল্য প্রত্যাশার চেয়ে বেশি বিচ্যুত হতে পারে।
প্যারামিটার সংবেদনশীলতা: কৌশলগত কর্মক্ষমতা EMA চক্র, ব্রিনব্যান্ড সেটিং ইত্যাদি প্যারামিটার পরিবর্তনের জন্য সংবেদনশীল হতে পারে, যা সাবধানে অপ্টিমাইজ করা এবং পুনরায় পরীক্ষা করা প্রয়োজন।
বাজার পরিস্থিতির উপর নির্ভরশীলতাঃ কৌশলগুলি বিভিন্ন বাজার চক্র এবং অস্থির পরিবেশে সামঞ্জস্যপূর্ণ নাও হতে পারে।
তহবিল ব্যবস্থাপনা ঝুঁকিঃ শতকরা ঝুঁকি ব্যবস্থাপনা ব্যবহার করা হলেও, ক্রমাগত ক্ষতির ক্ষেত্রে অ্যাকাউন্ট প্রত্যাহারের একটি বড় ঝুঁকি থাকতে পারে।
মাল্টি টাইম ফ্রেম বিশ্লেষণঃ মিথ্যা সংকেত কমানোর জন্য দীর্ঘ সময়ের ট্রেন্ড নিশ্চিতকরণ, যেমন ঘূর্ণি বা চাঁদ ইএমএ।
ওঠানামা ফিল্টারঃ কম ওঠানামার পরিবেশে ব্রিনের প্যারামিটারগুলি সামঞ্জস্য করুন বা লেনদেন স্থগিত করুন, যাতে লেনদেনের বাজারগুলিতে অত্যধিক লেনদেন করা যায় না।
প্রবণতা শক্তি এবং সম্ভাব্য বিপরীত সংকেত নিশ্চিত করার জন্য RSI বা MACD এর মতো গতিশীলতার সূচক যুক্ত করুন।
অপ্টিমাইজড আউট-অফ-মেশিনঃ লাভের জন্য আরও ভালভাবে লক করার জন্য স্টপ লস ট্র্যাকিং বা এটিআর-ভিত্তিক গতিশীল মুনাফা লক্ষ্যমাত্রা ব্যবহার বিবেচনা করুন।
বাজার অবস্থা শ্রেণিবিন্যাসঃ একটি বাজার পরিবেশ শ্রেণিবিন্যাস সিস্টেম তৈরি করুন যা বিভিন্ন বাজার অবস্থার জন্য বিভিন্ন প্যারামিটার সেটিং ব্যবহার করে।
মেশিন লার্নিং অপ্টিমাইজেশানঃ মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে বিভিন্ন বাজারের অবস্থার সাথে সামঞ্জস্য রেখে কৌশলগত প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করুন।
প্রাসঙ্গিকতা বিশ্লেষণঃ একাধিক জাতের লেনদেনের সময়, জাতের মধ্যে প্রাসঙ্গিকতা বিবেচনা করুন, সামগ্রিক পোর্টফোলিওর ঝুঁকি-লাভের বৈশিষ্ট্যগুলি অনুকূলিত করুন।
মৌলিক বিষয়গুলি অন্তর্ভুক্ত করুনঃ শেয়ার বা পণ্যগুলির জন্য, প্রাসঙ্গিক মৌলিক সূচক যুক্ত করার কথা বিবেচনা করুন, যাতে প্রবেশের সংকেতের গুণমান উন্নত হয়।
ইএমএ ক্রস এবং বুলিন বন্ড ডাবল এন্ট্রি কৌশলটি একটি পরিমাণযুক্ত ট্রেডিং সিস্টেম যা প্রবণতা ট্র্যাকিং এবং ওভারল্যাপ ব্রেকিংয়ের ধারণাকে একত্রিত করে। এটি ইএমএ ক্রস দ্বারা মূল প্রবণতা ক্যাপচার করে এবং বুলিন বন্ড ব্রেকিংয়ের মাধ্যমে অতিরিক্ত প্রবেশের সুযোগ সরবরাহ করে, যখন গতিশীল ঝুঁকি ব্যবস্থাপনার পদ্ধতি ব্যবহার করে তহবিলের ব্যবহারকে অনুকূল করে তোলে। এই কৌশলটির সুবিধাটি তার বহুমুখী বিশ্লেষণ পদ্ধতি এবং নমনীয় ঝুঁকি ব্যবস্থাপনার মধ্যে রয়েছে, তবে এটি প্রবণতা বিপরীতকরণ এবং অতিরিক্ত ব্যবসায়ের ঝুঁকির মুখোমুখিও রয়েছে।
বহু সময়সীমার বিশ্লেষণ, ওঠানামার হার ফিল্টারিং এবং গতিশীলতার সূচক যুক্ত করার মাধ্যমে এই কৌশলটি অপ্টিমাইজ করার জন্য প্রচুর জায়গা রয়েছে। বিশেষত, মেশিন লার্নিং অ্যালগরিদম এবং বাজার অবস্থা শ্রেণিবদ্ধকরণ সিস্টেম প্রবর্তন করা কৌশলটির অভিযোজনযোগ্যতা এবং স্থায়িত্বকে উল্লেখযোগ্যভাবে উন্নত করতে পারে। তবে, বাস্তব প্রয়োগে, এখনও একটি বিস্তৃত ব্যাকমেট এবং ফরোয়ার্ড টেস্টিং এবং নির্দিষ্ট ট্রেডিং জাত এবং বাজার পরিবেশের উপর নির্ভর করে সূক্ষ্ম প্যারামিটার সমন্বয় প্রয়োজন।
সামগ্রিকভাবে, এটি একটি যুক্তিসঙ্গতভাবে পরিকল্পিত এবং সম্ভাব্য পরিমাণগত ট্রেডিং কৌশলগত কাঠামো। ক্রমাগত অপ্টিমাইজেশান এবং সাবধানে পরিচালনার মাধ্যমে, এটি একটি স্থিতিশীল ট্রেডিং সিস্টেম হওয়ার সম্ভাবনা রয়েছে যা ট্রেন্ড ক্যাপচার করার সময় ঝুঁকি নিয়ন্ত্রণের সন্ধানকারী বিনিয়োগকারীদের জন্য উপযুক্ত।
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover with BB Double Entry", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=100)
// Input parameters
fastLength = input.int(12, "Fast EMA Length")
slowLength = input.int(26, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Multiplier")
useATRStopLoss = input.bool(true, "Use ATR Stop Loss")
stopLossDays = input.int(5, "Number of days for stop loss", minval=1, maxval=50)
riskPerTrade = input.float(3.0, "Risk per trade (%)", minval=0.1, maxval=5, step=0.1)
bbRiskPerTrade = input.float(1.5, "Risk for BB breakout trade (%)", minval=0.1, maxval=5, step=0.1)
// Bollinger Bands parameters
bbLength = input.int(55, "BB Length")
bbMult = input.float(0.9, "BB Standard Deviation")
useBBPauseResume = input.bool(false, "Use BB for Pause/Resume trading")
// Backtesting dates
startDate = input(timestamp("2020-01-01"), "Start Date")
endDate = input(timestamp("9999-12-31"), "End Date")
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Calculate ATR
atr = ta.atr(atrPeriod)
// Calculate Bollinger Bands
bbBasis = ta.sma(close, bbLength)
bbDev = bbMult * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev
// Define trading conditions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
bullish = fastEMA > slowEMA
bearish = fastEMA < slowEMA
// Bollinger Bands breakout
bbBreakout = close > bbUpper and close[1] <= bbUpper[1]
// Calculate lowest low for stop loss
lowestLow = ta.lowest(low, stopLossDays)
// Variables to store entry price and stop loss
var float entryPrice = na
var float stopLoss = na
var bool inPosition = false
var bool pauseTrading = false
// Entry logic
entryConditions = (longCondition or (bbBreakout and bullish)) and
(not useBBPauseResume or close > bbBasis) and
not pauseTrading
if entryConditions and not inPosition
entryPrice := close
atrStopLoss = close - (atr * atrMultiplier)
lowStopLoss = lowestLow
stopLoss := useATRStopLoss ? atrStopLoss : lowStopLoss
riskAmount = strategy.equity * (riskPerTrade / 100)
positionSize = riskAmount / (close - stopLoss)
strategy.entry("Long", strategy.long, qty=positionSize)
inPosition := true
pauseTrading := false
alert("BUY," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(positionSize), alert.freq_once_per_bar_close)
// Additional entry on BB breakout
if inPosition and bbBreakout and bullish and (not useBBPauseResume or close > bbBasis)
bbRiskAmount = strategy.equity * (bbRiskPerTrade / 100)
bbPositionSize = bbRiskAmount / (close - stopLoss)
strategy.entry("Long_BB", strategy.long, qty=bbPositionSize)
alert("ADD," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(bbPositionSize), alert.freq_once_per_bar_close)
// Exit logic
if shortCondition or (useBBPauseResume and inPosition and close < bbBasis)
if shortCondition
strategy.close_all(comment="EMA Crossdown")
inPosition := false
pauseTrading := false
alert("SELL," + syminfo.ticker + ",Reason=EMA_Crossdown", alert.freq_once_per_bar_close)
else if useBBPauseResume
strategy.close_all(comment="Close under BB basic")
pauseTrading := true
alert("SELL," + syminfo.ticker + ",Reason=Below_BB_Basic", alert.freq_once_per_bar_close)
entryPrice := na
stopLoss := na
// Resume trading if price closes above BB basic
if useBBPauseResume and pauseTrading and close > bbBasis
pauseTrading := false
alert("RESUME," + syminfo.ticker, alert.freq_once_per_bar_close)
// Stop loss
if strategy.position_size > 0
strategy.exit("Stop Loss", "Long", stop=stopLoss)
strategy.exit("Stop Loss", "Long_BB", stop=stopLoss)
if close <= stopLoss
alert("SELL," + syminfo.ticker + ",Reason=Stop_Loss", alert.freq_once_per_bar_close)
// Plotting
plot(fastEMA, color=color.new(color.blue, 0), title="Fast EMA")
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA")
plot(bbUpper, color=color.new(color.green, 50), title="BB Upper")
plot(bbLower, color=color.new(color.green, 50), title="BB Lower")
plot(bbBasis, color=color.new(color.yellow, 50), title="BB Basic")
plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, style=plot.style_cross, linewidth=2, title="Stop Loss")
// Alert conditions
alertcondition(entryConditions, title="Buy Alert", message="Buy {{ticker}}")
alertcondition(bbBreakout and inPosition and bullish and (not useBBPauseResume or close > bbBasis), title="Add Position Alert", message="Add Position {{ticker}}")
alertcondition(shortCondition, title="Sell Alert (EMA)", message="Sell {{ticker}} (EMA crossdown)")
alertcondition(useBBPauseResume and inPosition and close < bbBasis, title="Pause Alert", message="Pause trading {{ticker}} (Close under BB basic)")
alertcondition(useBBPauseResume and pauseTrading and close > bbBasis, title="Resume Alert", message="Resume trading {{ticker}} (Close above BB basic)")