गतिशील एटीआर स्टॉप-लॉस सेंटरलाइन रणनीति

लेखक:चाओझांग, दिनांकः 2023-10-16 16:20:06
टैगः

动态ATR止损中心线策略

अवलोकन

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

रणनीतिक सिद्धांत

यह रणनीति 25 की लंबाई का उपयोग करती है, और 5 के साथ एक रैखिक प्रतिगमन का उपयोग करके केंद्र रेखा xLG का गणना करती है; फिर केंद्र रेखा पर नीचे की ओर 6% की कीमतों को चैनल सीमा के रूप में किया जाता है, जहां चैनल की ऊपरी रेखा xLG1r है, और चैनल की निचली रेखा xLG1s है।

जब कीमत xLG1r से अधिक हो, तो अधिक करें; जब कीमत xLG1s से कम हो, तो खाली करें; और अंतिम अधिक करने और खाली करने का समय रिकॉर्ड करें। जब अंतिम अधिक करने का समय अंतिम खाली करने का समय से अधिक हो, तो अधिक करने का संकेत उत्पन्न करें; जब अंतिम खाली करने का समय अंतिम खाली करने का समय से अधिक हो, तो खाली करने का संकेत उत्पन्न करें।

गतिशील एटीआर स्टॉप-लॉस की गणना एटीआर चक्र 1, गुणक 2 का उपयोग करके की जाती है। जब ओवरटाइम किया जाता है, तो स्टॉप-लॉस लाइन बंद मूल्य के लिए एटीआर मूल्य और गुणकों के गुणकों को कम करती है; जब खाली किया जाता है, तो स्टॉप-लॉस लाइन बंद मूल्य के लिए एटीआर मूल्य और गुणकों के गुणकों को जोड़ती है।

फायदे का विश्लेषण

  • रैखिक प्रतिगमन के माध्यम से दीर्घकालिक रुझानों को ट्रैक करें
  • एटीआर पर आधारित स्टॉप-डॉमेज गणना, गतिशील रूप से समायोजित किया जा सकता है ताकि स्टॉप-डॉमेज बहुत बड़ा या छोटा न हो
  • कीमतों में बदलाव के संकेतों का उपयोग करना झूठे संकेतों को कम कर सकता है

जोखिम और सुधार

  • रैखिक प्रतिगमन मार्ग के पैरामीटर को अनुकूलित करने की आवश्यकता है, और वर्तमान में मार्गों की सीमा बहुत संकीर्ण हो सकती है
  • एटीआर गुणकों को भी परीक्षण करने की आवश्यकता है ताकि सर्वोत्तम पैरामीटर प्राप्त हो सके।
  • यदि आप किसी भी प्रकार की गलत जानकारी प्राप्त करना चाहते हैं, तो आप इस पर विचार कर सकते हैं।

सोच का अनुकूलन

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

सारांश

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-06-24 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Thanks to HPotter for the original code for Center of Gravity Backtest
strategy("Center of Gravity 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.15)

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

///////////// Center of Gravity /////////////
Length = input(25, minval=1)
m = input(5, minval=0)
Percent = input(6, minval=0, title="COG %")

xLG = linreg(close, Length, m)
xLG1r = xLG + ((close * Percent) / 100)
xLG1s = xLG - ((close * Percent) / 100)

pos = 0.0
pos := iff(close > xLG1r, 1, iff(close < xLG1s, -1, nz(pos[1], 0))) 
possig = iff(pos == 1, 1, iff(pos == -1, -1, pos))

/////////////// Srategy ///////////////
long = possig == 1 
short = possig == -1 

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(1, minval=1, title='ATR Stop Period')
atrMult = input(2, 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 ///////////////
plot(xLG1r, color=color.lime, title="LG1r")
plot(xLG1s, color=color.red, title="LG1s")
plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=1)
plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=1)
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)

अधिक जानकारी