रैखिक प्रतिगमन चलती औसत ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-25 10:58:02
टैगः

img

अवलोकन

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

रणनीति तर्क

यह रणनीति सबसे पहले शेयर की कीमत की n-दिवसीय रैखिक प्रतिगमन रेखा और m-दिवसीय चलती औसत की गणना करती है। प्रतिगमन रेखा दीर्घकालिक सांख्यिकीय रुझानों को पकड़ती है जबकि चलती औसत अल्पकालिक गति को दर्शाती है।

जब चलती औसत प्रतिगमन रेखा के ऊपर से गुजरती है, तो यह ऊपर की ओर गति को मजबूत करने का संकेत देती है और एक खरीद संकेत उत्पन्न करती है। जब चलती औसत नीचे से गुजरती है, तो यह कमजोर ऊपर की ओर संकेत देती है और एक बिक्री संकेत उत्पन्न करती है।

विशेष रूप से, रणनीति व्यापार संकेतों को निर्धारित करने के लिए निम्नलिखित चरणों का पालन करती हैः

  1. कीमतों की n-दिन रैखिक प्रतिगमन रेखा की गणना करें lrLine

  2. lrLine के m-day सरल चलती औसत की गणना करें जिसे lrMA कहा जाता है

  3. ईएमए नामक कीमतों के एम-दिन के घातीय चलती औसत की गणना करें

  4. जब ईएमए आईआरएमए के ऊपर पार करता है, तो खरीद संकेत उत्पन्न करता है

  5. जब ईएमए आईआरएमए के नीचे पार करता है, तो बेचने का संकेत उत्पन्न करता है

  6. केवल जब बाजार तेजी से है खरीद संकेत पर विचार करें

  7. संकेतों के आधार पर ट्रेड निष्पादित करें

प्रविष्टियों को निर्धारित करने के लिए प्रतिगमन और चलती औसत के बीच क्रॉसओवर का उपयोग करके, रणनीति प्रभावी रूप से झूठे ब्रेक को फ़िल्टर कर सकती है और कम खरीदने और उच्च बेचने के लिए उलटफेर की पहचान कर सकती है।

लाभ

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

जोखिम

  • अस्थिरता के दौरान लगातार क्रॉसओवर गलत संकेत उत्पन्न कर सकते हैं
  • अशुद्ध बाजार फिल्टर गलत समय पर प्रविष्टियों का कारण बनते हैं
  • खराब पैरामीटर समायोजन रणनीति प्रदर्शन को प्रभावित करता है
  • उच्च व्यापारिक आवृत्ति से अधिक लागत होती है

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

सुधार

इस रणनीति को कई पहलुओं में अनुकूलित किया जा सकता हैः

  1. विभिन्न प्रकार के एमए का परीक्षण करके चलती औसत अनुकूलन

  2. गणना अवधि को समायोजित करके प्रतिगमन रेखा अनुकूलन

  3. विभिन्न संकेतकों का परीक्षण करके बाजार फिल्टर अनुकूलन

  4. कठोर बैकटेस्टिंग के माध्यम से पैरामीटर अनुकूलन

  5. विभिन्न स्टॉप लॉस लॉजिक्स का परीक्षण करके स्टॉप लॉस अनुकूलन

  6. लागत के आधार पर व्यापार आवृत्ति को समायोजित करके लागत अनुकूलन

ये अनुकूलन रणनीति की स्थिरता और लाभप्रदता में और सुधार कर सकते हैं।

निष्कर्ष

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


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lazy_capitalist

//@version=5
strategy('Linear Regression MA', overlay=true, initial_capital=10000)
datesGroup = "Date Info"
startMonth = input.int(defval = 1,    title = "Start Month",  minval = 1, maxval = 12,  group=datesGroup)
startDay   = input.int(defval = 1,    title = "Start Day",    minval = 1, maxval = 31,  group=datesGroup)
startYear  = input.int(defval = 2022, title = "Start Year",   minval = 1970,            group=datesGroup)

averagesGroup = "Averages"
lrLineInput     = input.int(title="Linear Regression Line",   defval=55, minval = 1, group=averagesGroup)
lrMAInput       = input.int(title="Linear Regression MA",     defval=55, minval = 1, group=averagesGroup)
emaInput        = input.int(title="EMA Length",               defval=55, minval = 1, group=averagesGroup)


tradesGroup = "Execute Trades"
executeLongInput    = input.bool(title="Execute Long Trades",       defval=true)
executeShortInput   = input.bool(title="Execute Short Trades",      defval=true)
executeStopLoss     = input.bool(title="Execute Stop Loss",         defval=true)

fourHrSMAExpr       = ta.sma(close, 200)
fourHrMA            = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr)

bullish             = close > fourHrMA ? true : false


maxProfitInput              = input.float(  title="Max Profit (%)",         defval=10.0,    minval=0.0)   * 0.01
stopLossPercentageInput     = input.float(  title="Stop Loss (%)",          defval=1.75,    minval=0.0)   * 0.01

start       = timestamp(startYear, startMonth, startDay, 00, 00)            // backtest start  window
window()    => time >= start ? true : false                              // create function "within window of time"
showDate    = input(defval = true, title = "Show Date Range")

lrLine = ta.linreg(close, lrLineInput, 0)
lrMA   = ta.sma(lrLine, lrMAInput)
ema     = ta.ema(close, emaInput)

longEntry   = ema   < lrMA
longExit    = lrMA  < ema

shortEntry  = lrMA  < ema
shortExit   = ema   < lrMA


maxProfitLong   = strategy.opentrades.entry_price(0) * (1 + maxProfitInput)
maxProfitShort  = strategy.opentrades.entry_price(0) * (1 - maxProfitInput)

stopLossPriceShort  = strategy.position_avg_price * (1 + stopLossPercentageInput)
stopLossPriceLong   = strategy.position_avg_price * (1 - stopLossPercentageInput)

if(executeLongInput and bullish)
    strategy.entry( id="long_entry", direction=strategy.long,   when=longEntry and window(),    qty=10,  comment="long_entry")
    strategy.close( id="long_entry", when=longExit,     comment="long_exit")
    // strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp")
    
if(executeShortInput and not bullish)
    strategy.entry( id="short_entry", direction=strategy.short,   when=shortEntry and window(),    qty=10,  comment="short_entry")
    strategy.close( id="short_entry", when=shortExit,     comment="short_exit")
    // strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp")

if(strategy.position_size > 0 and executeStopLoss)
    strategy.exit(  id="long_entry",        stop=stopLossPriceLong,             comment="exit_long_SL")
    strategy.exit(  id="short_entry",       stop=stopLossPriceShort,            comment="exit_short_SL")
    
// plot(series=lrLine,     color=color.green)
plot(series=lrMA,       color=color.red)
plot(series=ema,        color=color.blue)


अधिक