অ্যাডাপ্টিভ ATR স্টপ লস সহ MACD ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৩-০৯-২০ ১৫ঃ২৩ঃ০০
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি ট্রেডিং সিগন্যাল এবং ঝুঁকি নিয়ন্ত্রণের জন্য অভিযোজিত ATR-ভিত্তিক স্টপ লস তৈরি করতে MACD সূচক ব্যবহার করে। এটি ট্রেন্ড অনুসরণকারী কৌশলগুলির অন্তর্গত।

কৌশলগত যুক্তি

  1. এমএসিডি ডেল্টা লাইন ক্রসওভার ০ ক্রয় এবং বিক্রয় সংকেত উৎপন্ন করে।

  2. এটিআর-এর সাম্প্রতিক এন সময়ের উপর ভিত্তি করে গণনা করা গতিশীল স্টপ লস, যা অস্থিরতাকে প্রতিফলিত করে।

  3. স্টপ লস পরিবর্তনশীলতার সাথে অভিযোজিতভাবে সামঞ্জস্য করে, যখন অস্থিরতা বৃদ্ধি পায় তখন প্রসারিত হয়।

  4. মুনাফা এবং ঝুঁকি নিয়ন্ত্রণের জন্য পজিশনে রিয়েল টাইমে স্টপ লস আপডেট করুন।

  5. ঝুঁকি পরিচালনার জন্য স্টপ লস চালু হলে পজিশন থেকে বেরিয়ে আসা।

সুবিধা

  1. এমএসিডি ট্রেন্ড ট্র্যাকিংয়ে সংবেদনশীল।

  2. অভিযোজিত স্টপগুলি বিভিন্ন বাজারের পরিবেশে ফিট করে, খুব শক্ত বা আলগা স্টপগুলি এড়ানো।

  3. ভিজ্যুয়াল স্টপ লাইনগুলি ঝুঁকির অবস্থাকে স্বজ্ঞাতভাবে প্রতিফলিত করে।

  4. সহজ এবং পরিষ্কার কৌশল নিয়ম, সহজেই বোঝা এবং বাস্তবায়ন।

  5. নিয়ন্ত্রিত ড্রডাউন এবং কার্যকর ঝুঁকি ব্যবস্থাপনা।

ঝুঁকি

  1. এমএসিডি ভুল সংকেত তৈরি করতে পারে যা অপ্রয়োজনীয় ক্ষতির কারণ হতে পারে।

  2. ভুল এটিআর পরামিতিগুলি খুব টাইট বা আলগা বন্ধের দিকে পরিচালিত করে।

  3. খুব ঘন ঘন বন্ধ হওয়ার ঝুঁকি।

  4. যখন প্রবণতা বিপরীত হয় তখন সময়মত থামানো কঠিন।

  5. প্যারামিটার অপ্টিমাইজ করার সময় অতিরিক্ত ফিটিং ঝুঁকি।

উন্নতকরণ

  1. সর্বোত্তম সংমিশ্রণের জন্য MACD পরামিতি পরীক্ষা করুন।

  2. অন্যান্য স্টপ পদ্ধতি চেষ্টা করুন যেমন ট্রেইলিং স্টপ।

  3. ফ্রিকোয়েন্সি এবং ঝুঁকি নিয়ন্ত্রণের ভারসাম্য বজায় রাখার জন্য স্টপগুলি অপ্টিমাইজ করুন।

  4. বিপরীতমুখী স্টপ প্রতিরোধ করার জন্য প্রবণতা ফিল্টার যোগ করুন।

  5. অতিরিক্ত ট্রেডিং এড়াতে ট্রেডিং খরচ প্রভাব বিবেচনা করুন।

  6. স্টপগুলি ট্রিগার করার জন্য স্লিপিং বা বর্ধিত স্টপ ব্যবহার করুন।

সিদ্ধান্ত

এই কৌশলটি অভিযোজনশীল এটিআর গতিশীল স্টপগুলির সাথে এমএসিডি সংকেতগুলি ট্রেড করে। এটি নিয়ন্ত্রণযোগ্য ঝুঁকি এবং সরলতা বৈশিষ্ট্যযুক্ত। তবে এমএসিডি সংকেতগুলি মিথ্যা হতে পারে এবং স্টপগুলির ক্রমাগত অপ্টিমাইজেশনের প্রয়োজন। সামগ্রিকভাবে, প্যারামিটার টিউনিং, স্টপ অপ্টিমাইজেশন ইত্যাদির সাথে এটি একটি শক্তিশালী ট্রেন্ড অনুসরণকারী সিস্টেম হয়ে উঠতে পারে।


/*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)

আরো