मूविंग एवरेज ट्रेंड वेक्टर क्वांटिटेटिव ट्रेडिंग रणनीति

SMMA MA EMA DEMA TEMA WMA VWMA HullMA LSMA ALMA SSMA TMA SL TP
निर्माण तिथि: 2025-02-20 10:59:37 अंत में संशोधित करें: 2025-02-27 17:49:25
कॉपी: 2 क्लिक्स: 383
2
ध्यान केंद्रित करना
319
समर्थक

मूविंग एवरेज ट्रेंड वेक्टर क्वांटिटेटिव ट्रेडिंग रणनीति मूविंग एवरेज ट्रेंड वेक्टर क्वांटिटेटिव ट्रेडिंग रणनीति

अवलोकन

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

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

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

रणनीतिक लाभ

  1. लचीला औसत चयनः 11 विभिन्न प्रकार के मोबाइल औसत का समर्थन करता है, जो विभिन्न बाजार विशेषताओं के अनुसार सबसे उपयुक्त औसत प्रकार चुन सकता है।
  2. बेहतर जोखिम प्रबंधनः एक अंतर्निहित स्टॉप-स्टॉप-लॉस तंत्र, जो प्रत्येक लेनदेन के जोखिम को प्रभावी ढंग से नियंत्रित करता है।
  3. बहु-चक्र अनुकूलनः मिनट से लेकर महीने तक के कई समय चक्रों का समर्थन करता है, और पैरामीटर समायोजन के माध्यम से चक्र गुणांक का अनुकूलन कर सकता है।
  4. विज़ुअलाइज़ेशन सपोर्टः प्रवृत्ति रंग टैगिंग सुविधा प्रदान करता है, जो बाजार की गति को समझने में मदद करता है।

रणनीतिक जोखिम

  1. पिछड़ापन का जोखिम: चलती औसत मूल रूप से एक पिछड़ा सूचक है, जो अत्यधिक अस्थिर बाजारों में एक पिछड़ा संकेत उत्पन्न कर सकता है।
  2. अस्थिर बाजार जोखिमः अस्थिर बाजारों में, बार-बार क्रॉस सिग्नल के कारण अत्यधिक व्यापार हो सकता है।
  3. पैरामीटर निर्भरता: रणनीति की प्रभावशीलता पैरामीटर के चयन पर बहुत अधिक निर्भर करती है, और विभिन्न बाजार स्थितियों में पैरामीटर के विभिन्न संयोजनों की आवश्यकता हो सकती है।

रणनीति अनुकूलन दिशा

  1. सिग्नल फ़िल्टरिंगः आप नकली संकेतों को फ़िल्टर करने के लिए यातायात, उतार-चढ़ाव और अन्य सहायक संकेतों को जोड़ सकते हैं।
  2. गतिशील पैरामीटरः बाजार की स्थिति के अनुसार गतिशील औसत रेखा चक्र और प्रकार को समायोजित करने के लिए एक अनुकूलनशील पैरामीटर तंत्र की शुरुआत की।
  3. पोजीशन मैनेजमेंट: पोजीशन मैनेजमेंट सिस्टम को अनुकूलित करें, बाजार की अस्थिरता और प्रवृत्ति की ताकत के आधार पर गतिशील रूप से स्थिति अनुपात को समायोजित करें।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2024-08-01 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Open Close Cross Strategy v6", 
     overlay=true, 
     pyramiding=0, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=10,
     calc_on_every_tick=false)

// === INPUTS ===
var bool useRes = input.bool(true, "Use Alternate Resolution?")
var int intRes = input.int(3, "Multiplier for Alternate Resolution")
var string basisType = input.string("SMMA", "MA Type: ", options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "HullMA", "LSMA", "ALMA", "SSMA", "TMA"])
var int basisLen = input.int(8, "MA Period", minval=1)
var int offsetSigma = input.int(6, "Offset for LSMA / Sigma for ALMA", minval=0)
var float offsetALMA = input.float(0.85, "Offset for ALMA", minval=0, step=0.01)
var bool scolor = input.bool(false, "Show coloured Bars to indicate Trend?")
var int delayOffset = input.int(0, "Delay Open/Close MA (Forces Non-Repainting)", minval=0, step=1)
var string tradeType = input.string("BOTH", "What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])
var float slPoints = input.float(0, "Initial Stop Loss Points (zero to disable)", minval=0)
var float tpPoints = input.float(0, "Initial Target Profit Points (zero for disable)", minval=0)
var int ebar = input.int(10000, "Number of Bars for Back Testing", minval=0)
var bool dummy = input.bool(false, "- SET to ZERO for Daily or Longer Timeframes")

// Определение таймфрейма для alternate resolution
getAlternateResolution() =>
    timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes) + "M" :
         timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes) + "W" :
         timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes) + "D" :
         timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes) : "60"

stratRes = getAlternateResolution()

// === MA Functions ===
variant(type, src, len, offSig, offALMA) =>
    float result = switch type
        "EMA" => ta.ema(src, len)
        "DEMA" => 2 * ta.ema(src, len) - ta.ema(ta.ema(src, len), len)
        "TEMA" => 3 * (ta.ema(src, len) - ta.ema(ta.ema(src, len), len)) + ta.ema(ta.ema(ta.ema(src, len), len), len)
        "WMA" => ta.wma(src, len)
        "VWMA" => ta.vwma(src, len)
        "SMMA" => ta.sma(src, len)  // Упрощенная версия SMMA
        "HullMA" => ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
        "LSMA" => ta.linreg(src, len, offSig)
        "ALMA" => ta.alma(src, len, offALMA, offSig)
        "TMA" => ta.sma(ta.sma(src, len), len)
        "SSMA" => 
            a1 = math.exp(-1.414 * math.pi / len)
            b1 = 2 * a1 * math.cos(1.414 * math.pi / len)
            c2 = b1
            c3 = -a1 * a1
            c1 = 1 - c2 - c3
            c1 * (src + nz(src[1])) / 2 + c2 * nz(ta.sma(src, len)[1]) + c3 * nz(ta.sma(src, len)[2])
        => ta.sma(src, len)

// === Series Setup ===
closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open[delayOffset], basisLen, offsetSigma, offsetALMA)

// Get Alternate resolution Series
closeSeriesAlt = useRes ? request.security(syminfo.tickerid, stratRes, closeSeries, barmerge.gaps_off, barmerge.lookahead_on) : closeSeries
openSeriesAlt = useRes ? request.security(syminfo.tickerid, stratRes, openSeries, barmerge.gaps_off, barmerge.lookahead_on) : openSeries

// === Plotting ===
color trendColor = closeSeriesAlt > openSeriesAlt ? color.green : color.red
color barColor = closeSeries > openSeriesAlt ? color.new(color.lime, 0) : color.new(color.red, 0)

// Перемещаем barcolor в глобальную область видимости
barcolor(scolor ? barColor : na)

var closePlot = plot(closeSeriesAlt, "Close Series", trendColor, 2, plot.style_line)
var openPlot = plot(openSeriesAlt, "Open Series", trendColor, 2, plot.style_line)
fill(closePlot, openPlot, color=trendColor)

// === Trade Conditions ===
xlong = ta.crossover(closeSeriesAlt, openSeriesAlt)
xshort = ta.crossunder(closeSeriesAlt, openSeriesAlt)
longCond = xlong
shortCond = xshort

// === Strategy Logic ===
float tp = tpPoints > 0 ? tpPoints : na
float sl = slPoints > 0 ? slPoints : na

var int lastPositionType = 0  // 1 для long, -1 для short, 0 для нет позиции

if ebar == 0 or (timenow - time) / (timeframe.multiplier * 60000) <= ebar and tradeType != "NONE"
    // Закрытие позиций
    if lastPositionType == 1 and shortCond
        strategy.close("long")
        lastPositionType := 0
        label.new(bar_index, high, "Exit Long", color=color.red, style=label.style_label_down, textcolor=color.white)
    
    if lastPositionType == -1 and longCond
        strategy.close("short")
        lastPositionType := 0
        label.new(bar_index, low, "Exit Short", color=color.green, style=label.style_label_up, textcolor=color.white)
    
    // Открытие новых позиций
    if longCond and tradeType != "SHORT" and lastPositionType == 0
        strategy.entry("long", strategy.long)
        lastPositionType := 1
        label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up, textcolor=color.white)
    
    if shortCond and tradeType != "LONG" and lastPositionType == 0
        strategy.entry("short", strategy.short)
        lastPositionType := -1
        label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down, textcolor=color.white)
    
    // Take Profit и Stop Loss
    if lastPositionType != 0
        strategy.exit("TP/SL", profit=tp, loss=sl)