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


সৃষ্টির তারিখ: 2023-09-24 13:21:54 অবশেষে সংশোধন করুন: 2023-09-24 13:21:54
অনুলিপি: 1 ক্লিকের সংখ্যা: 796
1
ফোকাস
1617
অনুসারী

ওভারভিউ

এই কৌশলটি MACD গতিশীলতার সূচক এবং RSI ওভারব্লড ওভারসোল্ড সূচককে একত্রিত করে যাচাই করে যে MACD এর গোল্ডফোর্ক / ডেডফোর্ক হওয়ার সময় RSIও সংশ্লিষ্ট স্পর্শকাতর / স্পর্শকাতর রিটার্ন সম্পন্ন করেছে কিনা, যার ফলে আরও নির্ভরযোগ্য ট্রেডিং সিগন্যাল তৈরি হয়। এটি একটি সাধারণ স্বল্পমেয়াদী বিপরীতমুখী কৌশলগত ধারণা।

কৌশল নীতি

  1. MACD সূচকের DIFF, DEA এবং MACD স্তম্ভ গণনা করুন। DIFF যখন DEA অতিক্রম করে তখন একটি গোল্ড ফর্ক সংকেত উত্পন্ন করে, যখন এটি অতিক্রম করে তখন একটি মৃত ফর্ক সংকেত দেয়।

  2. আরএসআই সূচক গণনা করে, নীচের দিকে বা পিছনে টপকে উঠছে কিনা তা নির্ধারণ করুন। এবং সাম্প্রতিক পর্যায়ে নীচের বা শীর্ষস্থানীয় হয়েছে কিনা তা নির্ধারণ করার জন্য একটি ব্যাকআপ উইন্ডো সেট করুন।

  3. যখন MACD গোল্ড ফর্ক হয়, RSI যদি পিছনের উইন্ডোর মধ্যে ট্যাটু রিবাউন্ড সম্পন্ন করে, তাহলে একটি পল্টু সিগন্যাল উৎপন্ন হয়। যখন MACD ডাই ফর্ক হয়, যদি RSI ট্যাটু রিবাউন্ড সম্পন্ন করে, তাহলে একটি পল্টু সিগন্যাল উৎপন্ন হয়।

  4. প্রবেশের পর ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস সেট করুন।

কৌশলগত সুবিধা

  1. ম্যাকড ট্রেন্ড পাল্টানোর সময় সংবেদনশীল। আরএসআই ওভারবয় ওভারসোলের সময় সংবেদনশীল।

  2. একই সময়ে MACD এবং RSI টোকেন যাচাই করে, জাল সংকেতগুলি ফিল্টার করতে পারে।

  3. উইন্ডোর দিকে তাকিয়ে সিগন্যালের নির্ভরযোগ্যতা বাড়ানোর সিদ্ধান্ত নিন।

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

কৌশলগত ঝুঁকি

  1. MACD এবং RSI উভয়ই কিছুটা পিছিয়ে আছে এবং সম্ভবত সেরা প্রবেশের পয়েন্টটি মিস করেছে।

  2. একই সময়ে দুটি সূচক সংকেতের অপেক্ষায় থাকার সম্ভাবনা কম, সংকেত কম।

  3. এই ধরনের প্রবণতা যে কোন প্রকারের প্রবণতাকে প্রভাবিত করে না।

  4. ভুল স্টপ লস সেটিং খুব হালকা বা খুব কঠোর হতে পারে।

সমাধানঃ

  1. MACD এবং RSI প্যারামিটারগুলিকে সামঞ্জস্য করুন যাতে পিছনের সম্ভাবনা কম হয়।

  2. ইন্ডিকেটরগুলির কার্যকর পরিসীমা যথাযথভাবে প্রসারিত করুন যাতে আরও সংকেত সরবরাহ করা যায়।

  3. ট্রেন্ড ফিল্টার যুক্ত করুন এবং বিপরীতমুখী প্রবেশাধিকার এড়িয়ে চলুন।

  4. বিভিন্ন স্টপ লস প্যারামিটার সেটিং পরীক্ষা করুন এবং সর্বোত্তম খুঁজে বের করুন।

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

  1. এসএমএ এবং অন্যান্য সমান্তরাল রেখার প্রভাব পরীক্ষা করুন।

  2. “এটা আমাদের জন্য অনেক বড় একটা অর্জন।

  3. প্রবণতা সূচক যুক্ত করুন এবং প্রবেশের যোগ্যতা নির্ণয় করুন।

  4. মেশিন লার্নিং প্রবর্তন করা হয়েছে।

  5. আরও কিছু বিষয়ের সাথে যুক্ত হয়ে এডমিশন টাইমলাইনের অপ্টিমাইজেশান।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//based on Range Strat - MACD/RSI 
// strategy("MACD/RSI - edited", 
//      overlay=true,
//      default_qty_type=strategy.percent_of_equity,
//      default_qty_value=10, precision=2, initial_capital=100000,
//      pyramiding=2,
//      commission_value=0.05)

//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true

// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")

// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed


coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)

// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")


// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal

MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)

// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01

// Calculating Stop Loss
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)



// Strategy Entry
if (not na(vrsi))
	if (inDateRange and MACDcrossover and coCheck)
		strategy.entry("LONG", strategy.long, comment="LONG")
	if (inDateRange and MACDcrossunder and cuCheck)
		strategy.entry("SHORT", strategy.short, comment="SHORT")

// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
    strategy.exit(id="SHORT STOP", stop=shortStopPrice)