एमएसीडी गति संकेतक बैकटेस्ट रणनीति

लेखक:चाओझांग, दिनांक: 2023-09-24 13:21:54
टैगः

अवलोकन

यह रणनीति एमएसीडी गति संकेतक को आरएसआई ओवरबॉट / ओवरसोल्ड संकेतक के साथ जोड़ती है। जब एमएसीडी ऊपर या नीचे पार करता है, तो यह जांचता है कि क्या आरएसआई अधिक विश्वसनीय ट्रेडिंग संकेत उत्पन्न करने के लिए लुकबैक अवधि में संबंधित निचले / शीर्ष उलट को भी पूरा करता है। विशिष्ट अल्पकालिक औसत प्रतिगमन रणनीति तर्क।

रणनीति तर्क

  1. मैकडी डीआईएफएफ, डीईए और हिस्टोग्राम की गणना करें। डीईए के ऊपर डीआईएफएफ का क्रॉसओवर तेजी का क्रॉसओवर संकेत देता है, और नीचे क्रॉसओवर मौत का क्रॉसओवर संकेत देता है।

  2. ओवरसोल्ड बाउंस और ओवरबॉट सेल्स की पहचान करने के लिए आरएसआई की गणना करें। यदि हाल ही में निचला स्तर या टॉपिंग हुआ है तो लुकबैक विंडो की जांच करें।

  3. जब एमएसीडी बुलिश क्रॉसओवर होता है, यदि आरएसआई लुकबैक विंडो के भीतर ओवरसोल्ड से उछल गया है, तो लंबा संकेत उत्पन्न होता है। एमएसीडी डेथ क्रॉस पर, यदि आरएसआई लुकबैक विंडो से ऊपर है, तो छोटा संकेत उत्पन्न होता है।

  4. जोखिम नियंत्रण में प्रवेश करने के बाद स्टॉप लॉस सेट करें।

लाभ

  1. एमएसीडी संवेदनशील रूप से रुझान परिवर्तनों की पहचान करता है। आरएसआई प्रभावी रूप से ओवरबॉट/ओवरसोल्ड स्तरों का आकलन करता है।

  2. एमएसीडी और आरएसआई दोनों संकेतों की आवश्यकता होने से झूठे संकेतों को फ़िल्टर किया जाता है।

  3. पीछे की ओर देखने वाली खिड़की से संकेत की विश्वसनीयता में सुधार होता है।

  4. स्टॉप लॉस जोखिम प्रबंधन में सहायता करता है।

जोखिम

  1. एमएसीडी और आरएसआई की पिछड़ने से इष्टतम प्रविष्टियों को याद किया जा सकता है।

  2. डबल इंडिकेटर सिग्नल की कम संभावना का अर्थ है कम ट्रेड।

  3. व्यापक रुझान की दिशा पर विचार न करने से फंसने का खतरा होता है।

  4. खराब स्टॉप लॉस ट्यूनिंग बहुत चौड़ी या बहुत तंग हो सकती है।

संभावित समाधान:

  1. देरी को कम करने के लिए एमएसीडी और आरएसआई मापदंडों को समायोजित करें।

  2. अधिक संकेत प्रदान करने के लिए सूचक सीमा सीमाओं का विस्तार करें।

  3. विपरीत प्रवृत्ति प्रविष्टियों से बचने के लिए प्रवृत्ति फ़िल्टर जोड़ें.

  4. इष्टतम स्तरों के लिए विभिन्न स्टॉप लॉस पैरामीटर का परीक्षण करें।

अनुकूलन दिशाएँ

  1. एसएमए और अन्य चलती औसत का परीक्षण करें।

  2. लचीले स्टॉप के लिए ट्रेलिंग स्टॉप लॉस जोड़ें.

  3. प्रवेश की गुणवत्ता का आकलन करने के लिए प्रवृत्ति शक्ति को शामिल करें।

  4. संकेतक आंदोलनों की भविष्यवाणी करने के लिए मशीन लर्निंग का उपयोग करें।

  5. प्रवेश के समय को अनुकूलित करने के लिए अधिक कारकों को मिलाएं।

सारांश

यह रणनीति समन्वित एमएसीडी और आरएसआई का उपयोग करके विश्वसनीय उलट सिग्नल के लिए फ़िल्टर करती है। तर्क स्पष्ट है और सूचक चयन, प्रवृत्ति फ़िल्टर, स्टॉप लॉस तकनीक आदि जैसे सुधारों के लिए पैरामीटर लचीले हैं ताकि स्थिरता बनाए रखते हुए अधिक ट्रेड प्राप्त किए जा सकें, लेकिन ओवर-ऑप्टिमाइज़ेशन जोखिमों से बचा जा सके।


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

अधिक