এমএসিডি ট্রেন্ড ব্যালেন্সিং কৌশল

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

img

সারসংক্ষেপ

এটি একটি প্রবণতা অনুসরণকারী কৌশল যা এমএসিডি সূচক ব্যবহার করে উত্থান এবং bearish দিক চিহ্নিত করে। এটি দ্রুত এবং ধীর চলমান গড়ের মধ্যে পার্থক্য গণনা করে এমএসিডি প্রধান লাইন তৈরি করে। কৌশলটি ক্রয় সংকেত তৈরি করতে এমএসিডি প্রধান লাইন এবং সংকেত লাইনের সোনার ক্রস এবং বিক্রয় সংকেত তৈরি করতে মৃত্যুর ক্রস ব্যবহার করে, প্রবণতার ভারসাম্যপূর্ণ ট্র্যাকিং অর্জন করে।

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

কোডটি প্রথমে কৌশলটির ঐতিহাসিক পারফরম্যান্স পরীক্ষা করার জন্য ব্যাকটেস্টিং টাইমফ্রেম সেট করে।

ম্যাকডি সূচকটি দ্রুত চলমান গড়, ধীর চলমান গড় এবং ম্যাকডি চলমান গড়ের দৈর্ঘ্যের সেটিংস সহ গণনা করা হয়। দ্রুত লাইনটি আরও সংবেদনশীলভাবে প্রতিক্রিয়া করে এবং ধীর লাইনটি আরও স্থিতিশীলভাবে প্রতিক্রিয়া করে। তাদের পার্থক্য ম্যাকডি প্রধান লাইন গঠন করে, যা তারপরে ম্যাকডি সিগন্যাল লাইন গঠনের জন্য একটি চলমান গড় দ্বারা মসৃণ হয়। যখন পার্থক্য শূন্য রেখার উপরে অতিক্রম করে, তখন একটি উত্থান সংকেত উত্পন্ন হয়। যখন এটি নীচে অতিক্রম করে, তখন একটি হ্রাস সংকেত উত্পন্ন হয়।

যখন দ্রুত এবং ধীর রেখা ক্রস হয়, তখন কিনে / বিক্রয় সংকেতগুলি নিশ্চিত করুন এবং রেকর্ড করুন, তারপরে একটি অবস্থান খোলা যেতে পারে।

একটি পজিশনে প্রবেশ করার পর, পজিশনের সর্বোচ্চ এবং সর্বনিম্ন মূল্যকে ক্রমাগত ট্র্যাক করুন। একটি স্টপ লস শতাংশ সেট করুন, যখন ক্ষতি এই শতাংশে পৌঁছে যায়, স্টপ লস দিয়ে বেরিয়ে আসুন।

সুবিধা

  1. ম্যাকডি ইন্ডিকেটর কার্যকরভাবে প্রবণতা সনাক্ত করতে পারে এবং এটি ক্লাসিকাল প্রযুক্তিগত সূচকগুলির মধ্যে একটি।

  2. দ্রুত এবং ধীর গতির গড়ের মধ্যে পার্থক্য দ্রুত মূল্যের গতি এবং দিক পরিবর্তনগুলি ধরতে পারে।

  3. চলমান গড়ের ফিল্টারিং প্রভাব কিছু মিথ্যা সংকেত ফিল্টার করতে সাহায্য করে।

  4. এই কৌশলটি ঝুঁকি নিয়ন্ত্রণের জন্য একটি স্টপ লস প্রক্রিয়া অন্তর্ভুক্ত করে।

ঝুঁকি

  1. এমএসিডি সীমিত অপ্টিমাইজেশান স্পেসের সাথে মিথ্যা সংকেত উত্পাদন করতে প্রবণ।

  2. ভুল স্টপ লস প্লেসমেন্ট খুব সক্রিয় বা সংরক্ষণশীল হতে পারে, যা পণ্য জুড়ে পৃথক অপ্টিমাইজেশান প্রয়োজন।

  3. ফিক্সড পজিশনের আকার সহজেই অতিরিক্ত লিভারেজিংয়ের দিকে পরিচালিত করতে পারে, অ্যাকাউন্টের আকারের উপর ভিত্তি করে পজিশনের আকার বিবেচনা করুন।

  4. অতিরিক্ত ফিটিং রোধ করার জন্য ব্যাকটেস্টের সময়সীমার যুক্তি যাচাই করা দরকার।

অপ্টিমাইজেশন

  1. দ্রুত এবং ধীর চলমান গড়ের সংমিশ্রণগুলি অনুকূলিত করুন যাতে বিভিন্ন পণ্যগুলির জন্য সেরা পরামিতিগুলি খুঁজে পাওয়া যায়।

  2. সিগন্যাল ফিল্টার করার জন্য মোমবাতি, বোলিংজার ব্যান্ড, আরএসআই এর মতো অন্যান্য সূচক যুক্ত করুন।

  3. ড্রাউনডাউন, শার্প রেসিওর উপর ভিত্তি করে স্টপ লস এর বিভিন্ন স্তরের মূল্যায়ন করুন।

  4. স্টপ লস টেকনিক যেমন স্টপ লস, লিমিট অর্ডার এর মত।

  5. মূলধন, অস্থিরতার উপর ভিত্তি করে গতিশীল পজিশনের আকার পরীক্ষা করুন।

সিদ্ধান্ত

এমএসিডি ট্রেন্ড ব্যালেন্সিং কৌশলটি ক্লাসিক এমএসিডি সূচকের উপর ভিত্তি করে। এটিতে মূল্যের গতিবেগ সংবেদনশীলভাবে ক্যাপচার করার ক্ষমতা রয়েছে এবং প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে বিভিন্ন পণ্যের সাথে ভালভাবে মানিয়ে নেওয়া যেতে পারে। ফিল্টারিং সংকেত, স্টপ লস কৌশল এবং গতিশীল অবস্থানের আকারের উপর আরও উন্নতি স্থিতিশীলতা এবং লাভজনকতা উন্নত করতে পারে।


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
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)

/////////////// Component Code Start ///////////////
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)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

long = crossover(delta, 0) 
short = crossunder(delta, 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 = 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 = 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 = 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])

sl_inp = input(5.0, title='Stop Loss %', type=float)/100

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)

আরো