अनुकूलन ATR स्टॉप लॉस के साथ MACD ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-09-20 15:23:00
टैगः

अवलोकन

यह रणनीति ट्रेडिंग सिग्नल उत्पन्न करने और जोखिमों को नियंत्रित करने के लिए अनुकूलनशील एटीआर-आधारित स्टॉप लॉस उत्पन्न करने के लिए एमएसीडी संकेतक का उपयोग करती है। यह ट्रेंड फॉलो करने वाली रणनीतियों से संबंधित है।

रणनीति तर्क

  1. एमएसीडी डेल्टा लाइन क्रॉसओवर 0 खरीद और बिक्री संकेत उत्पन्न करता है।

  2. गतिशील स्टॉप लॉस की गणना एटीआर की हाल की एन अवधि के आधार पर की जाती है, जो अस्थिरता को दर्शाता है।

  3. स्टॉप लॉस अस्थिरता में परिवर्तन के साथ अनुकूलनशील रूप से समायोजित होता है, अस्थिरता बढ़ने पर व्यापक होता है।

  4. वास्तविक समय में स्टॉप लॉस अपडेट करें, जब पदों में, मुनाफे में लॉक और जोखिमों को नियंत्रित करने के लिए।

  5. जोखिमों के प्रबंधन के लिए स्टॉप लॉस को ट्रिगर करने पर एक्जिट पोजीशन

लाभ

  1. एमएसीडी रुझानों को ट्रैक करने में संवेदनशील है।

  2. अनुकूलनशील स्टॉप विभिन्न बाजार वातावरणों के अनुकूल होते हैं, बहुत तंग या ढीले स्टॉप से बचते हैं।

  3. दृश्य स्टॉप लाइनें जोखिम की स्थिति को सहज रूप से दर्शाती हैं।

  4. सरल और स्पष्ट रणनीति नियम, समझने और लागू करने में आसान।

  5. नियंत्रित उपयोग और प्रभावी जोखिम प्रबंधन।

जोखिम

  1. एमएसीडी गलत संकेत उत्पन्न कर सकता है जिससे अनावश्यक नुकसान हो सकता है।

  2. अनुचित एटीआर मापदंडों से बहुत तंग या ढीला स्टॉप होता है।

  3. बहुत बार रुकने का खतरा।

  4. जब रुझान उलट जाता है तो समय पर रुकना मुश्किल होता है।

  5. मापदंडों का अनुकूलन करते समय अति-अनुकूलन का जोखिम।

सुधार

  1. इष्टतम संयोजन के लिए एमएसीडी मापदंडों का परीक्षण करें।

  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)

अधिक