এই কৌশলটি MACD সূচক ব্যবহার করে ট্রেডিং সংকেত তৈরি করে এবং এটিআর-ভিত্তিক অভিযোজিত স্টপ লস ব্যবহার করে ঝুঁকি নিয়ন্ত্রণ করে।
MACD সূচকটির বিভাজক ডেল্ট বিভাজকটি 0 অক্ষকে ক্রয় এবং বিক্রয় সংকেত দেয়।
ATR-এর গতিশীল স্টপ লস গণনা করা হয় সাম্প্রতিক N চক্রের উপর ভিত্তি করে। এটিআর বাজার ওঠানামা প্রতিফলিত করতে পারে।
স্টপ লস রেট ওলট-পালট হওয়ার সাথে সাথে সামঞ্জস্যপূর্ণ হয় এবং ওলট-পালট বাড়ার সাথে সাথে স্টপ লস প্রশস্ত হয়।
সিগন্যাল ধরে রাখার সময় রিয়েল-টাইমে স্টপ লস আপডেট করুন, যাতে মুনাফা লক করা যায় এবং ঝুঁকি নিয়ন্ত্রণ করা যায়।
যখন স্টপ লস ট্রিগার হয় তখন পজিশন থেকে বেরিয়ে ঝুঁকি নিয়ন্ত্রণ সম্পন্ন করুন।
MACD সূচকগুলি ট্রেন্ড ট্র্যাকিংয়ের জন্য সংবেদনশীল।
ডায়নামিক স্টপ মার্কেটের পরিস্থিতির সাথে খাপ খাইয়ে নিতে পারে এবং খুব কাছাকাছি বা খুব দূরে স্টপ এড়াতে পারে।
একটি দৃশ্যমান স্টপ লস রেখাচিত্র, যা ঝুঁকির অবস্থাকে স্বতন্ত্রভাবে প্রতিফলিত করে।
নীতিমালা সহজ, সুস্পষ্ট এবং সহজে বোঝা যায়।
রিটার্ন নিয়ন্ত্রণযোগ্য, ঝুঁকি ব্যবস্থাপনা কার্যকর।
MACD সূচকগুলি ভুল সংকেত তৈরি করতে পারে যার ফলে অপ্রয়োজনীয় ক্ষতি হতে পারে।
এটিআর প্যারামিটারটি ভুলভাবে সেট করা হয়েছে, যা খুব কাছাকাছি বা খুব দূরবর্তী সমস্যার কারণ হতে পারে।
এটি প্রায়শই ট্রিগার হওয়ার ঝুঁকিতে থাকে।
ট্রেন্ডের বিপরীতমুখী হওয়া কঠিন এবং সময় নষ্ট করা কঠিন।
প্যারামিটার অপ্টিমাইজেশনের ক্ষেত্রে ওভারফ্যাটিংয়ের ঝুঁকি থাকতে পারে।
বিভিন্ন প্যারামিটারের MACD এর সমন্বয় পরীক্ষা করে সর্বোত্তম প্যারামিটার খুঁজুন।
অন্য কিছু চেষ্টা করুন, যেমন ট্র্যাকিং।
স্টপ লস প্যারামিটার অপ্টিমাইজ করুন, স্টপ লস ফ্রিকোয়েন্সি এবং ঝুঁকি নিয়ন্ত্রণের ভারসাম্য বজায় রাখুন।
ট্রেন্ড ডিসিশন মেকানিজম যুক্ত করা হয়েছে যাতে রিভার্স স্টপ লস এড়ানো যায়।
স্লাইড পয়েন্ট বা বর্ধিত স্টপ ক্ষতির কার্যকারিতা নিশ্চিত করে।
এই কৌশলটি MACD সূচকের উপর ভিত্তি করে সংকেত প্রেরণ করে এবং এটিআর গতিশীল স্টপ লস ব্যবহার করে। এটির ঝুঁকি নিয়ন্ত্রণযোগ্য এবং সহজ ব্যবহারিক বৈশিষ্ট্য রয়েছে। তবে MACD সংকেতগুলি ভুল সিদ্ধান্তের জন্য প্রবণ, এবং স্টপ লস প্রক্রিয়াটি ক্রমাগত অপ্টিমাইজ করা দরকার। সামগ্রিকভাবে, প্যারামিটার সামঞ্জস্য, স্টপ লস কৌশলটি অপ্টিমাইজ করা ইত্যাদির মাধ্যমে এটি একটি আরও স্থিতিশীল প্রবণতা অনুসরণকারী ট্রেডিং সিস্টেম তৈরি করতে পারে।
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MACD BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
/////////////// MACD ///////////////
fastLength = input(13)
slowlength = input(30)
MACDLength = input(12)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
/////////////// Strategy ///////////////
long = crossover(delta, 0)
short = crossunder(delta, 0)
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
/////////////// Dynamic ATR Stop Losses ///////////////
atrLkb = input(2, minval=1, title='ATR Stop Period')
atrMult = input(1.25, step=0.25, title='ATR Stop Multiplier')
atr1 = atr(atrLkb)
longStop = 0.0
longStop := short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop[1]
shortStop = 0.0
shortStop := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop[1]
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)
strategy.exit("Long SL", "Long", stop=longStop, when=since_longEntry > 0)
strategy.exit("Short SL", "Short", stop=shortStop, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
barcolor(long ? color.lime : short ? color.red : na)
plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=2)
plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=2)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)