दोहरी चलती औसत क्रॉसओवर निरंतर अपट्रेंड रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-13 10:47:48
टैगः

img

अवलोकन

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

रणनीति तर्क

रणनीति मुख्य रूप से प्रवेश संकेतों के लिए चलती औसत क्रॉसओवर पर आधारित है। विशेष रूप से, एक तेज एमए (एमए 1) और धीमी एमए (एमए 2) परिभाषित की जाती है। जब एमए 1 एमए 2 से ऊपर पार करता है, तो यह एक संकेत है कि यह लंबा हो जाएगा।

अल्पकालिक क्रॉसओवर से झूठे संकेतों से बचने के लिए, एक कोण सीमा जोड़ी जाती है, ताकि MA2 कोण एक निर्धारित सीमा से ऊपर होने पर ही एक खरीद संकेत ट्रिगर किया जाए। इससे कुछ गैर-ट्रेंडिंग अल्पकालिक रैली को फ़िल्टर किया जाता है।

यह रणनीति स्टॉप लॉस और टेक प्रॉफिट को भी सेट करती है। स्टॉप लॉस अचानक बाजार उलट के मामले में नुकसान से बचाता है, जबकि लाभ में लाभ लॉक्स लेता है। वे प्रवेश मूल्य से प्रतिशत सीमा के रूप में निर्धारित होते हैं।

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

लाभ विश्लेषण

यह एक सरल और सहज प्रवृत्ति रणनीति का अनुसरण करता है। इसके फायदे हैंः

  1. एमए कॉम्बो बाजार शोर को फ़िल्टर करता है और प्रवृत्ति की दिशा में लॉक करता है
  2. कोण की सीमा अल्पकालिक दोलन से भटकने से बचती है
  3. दो तरफ़ा व्यापार सीमाबद्ध बाजारों से लाभान्वित होने की अनुमति देता है
  4. स्टॉप लॉस और ले लाभ नियंत्रण जोखिम

जोखिम विश्लेषण

कुछ जोखिमों पर ध्यान देंः

  1. एमए में विलंब होता है और मोड़ के बिंदुओं को याद कर सकते हैं
  2. स्टॉप लॉस की गारंटी नहीं है, तेजी से बाजारों में गैप किया जा सकता है
  3. डबल-एज ट्रेडिंग जोखिम को दोगुना करती है, शॉर्ट एंट्री का समय महत्वपूर्ण है
  4. एमए अवधि जैसे खराब पैरामीटर ट्यूनिंग परिणामों को प्रभावित कर सकते हैं

सुधार के क्षेत्र

रणनीति को और अधिक अनुकूलित करने के कुछ तरीके:

  1. सटीकता में सुधार के लिए एमएसीडी, बोलिंगर जैसे ट्रेंड फिल्टर जोड़ें
  2. एमए अवधि को गतिशील रूप से अनुकूलित करने के लिए मशीन लर्निंग का उपयोग करें
  3. स्टॉप लॉस और ले लाभ सेटिंग्स का अनुकूलन करें जैसे कि ट्रेलिंग स्टॉप
  4. घाटे को सीमित करने के लिए स्थिति आकार जोड़ें
  5. ADX के साथ आकार औसत प्रतिगमन स्थिति के लिए गेज प्रवृत्ति शक्ति

निष्कर्ष

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


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by markjames12210@gmail.com
//@version=5
strategy(title="MJ-Dual Moving Average",initial_capital=10000,overlay=false)

// import TradingView/ZigZag/6 as ZigZagLib 

// // Create Zig Zag instance from user settings.
// var zigZag = ZigZagLib.newInstance(
//   ZigZagLib.Settings.new(
//       input.float(5.0, "Price deviation for reversals (%)", 0.00001, 100.0, 0.5, "0.00001 - 100"),
//       input.int(10, "Pivot legs", 2),
//       input(#2962FF, "Line color"),
//       input(true, "Extend to last bar"),
//       input(true, "Display reversal price"),
//       input(true, "Display cumulative volume"),
//       input(true, "Display reversal price change", inline = "priceRev"),
//       input.string("Absolute", "", ["Absolute", "Percent"], inline = "priceRev"),
//       true)
//  )

// // Update 'zigZag' object on each bar with new ​pivots, ​volume, lines, labels.
// zigZag.update()
// // plot(zigZag.pivots, "zigZag")

ma1= ta.sma(close,8)
ma2= ta.sma(close,21)

angleCriteria = input.int(title="Angle", defval=7, minval=1, maxval=13)

i_lookback   = input.int(2,     "Angle Period", minval = 1)
i_atrPeriod  = input.int(10,    "ATR Period",   minval = 1)
i_angleLevel = input.int(6,     "Angle Level",  minval = 1)
i_maSource   = input.source(close, "MA Source")
TP = input.float(1, "TP", minval = 0.1)
SL = input.float(1, "SL", minval = 0.1)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ta.atr(i_atrPeriod), "atr")
// plot(ma1,color=#FF0000)
// plot(ma2,color=#00FF00)

crosso=ta.crossover(ma1,ma2) 
crossu=ta.crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

atr_factor = 1
atr = ta.atr(i_atrPeriod)
e = atr * atr_factor 

afr = close 
afr := nz(afr[1], afr)

atr_factoryHigh = close + e
atr_factoryLow = close - e 

if atr_factoryLow > afr 
    afr := atr_factoryLow
if atr_factoryHigh < afr 
    afr := atr_factoryHigh

// plot(afr, "afr", display = display.data_window)
// plot(atr_factoryHigh, "afr", color = color.yellow, display = display.all)
// plot(atr_factoryLow, "afr", color = color.green, display = display.all)


inLong() => strategy.position_size > 0
inShort() => strategy.position_size < 0
inZero() => not inLong() and not inShort()

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)

plotshape(long, "Buy", shape.arrowup, location.belowbar, color = #FF0000)
plotshape(short, "Sell", shape.arrowdown, location.abovebar, color = #00FF00)

var longTp = 0.0
var longSl = 0.0
var shortTp = 0.0
var shortSl = 0.0
[b_middle, b_high, b_low] = ta.bb(close, 20, 2)
entry_price = strategy.opentrades.entry_price(0)

if inZero()
    if short
        longTp := close * (1 + TP/100)
        longSl := close * (1 - SL/100)
        strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
    if long
        shortTp := close * (1 - TP/100)
        shortSl := close * (1 + SL/100)
        strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

if inLong()
    // if close - entry_price > close * 0.005
    //     longSl := entry_price + close * 0.001
    if high > longTp
        strategy.close("LONG")
        if (close - open) > close * 0.014
            shortTp := close * (1 - TP/100)
            shortSl := close * (1 + SL/100)
            strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

    if close < longSl
        strategy.close("LONG")
    if open >= b_high and close >= b_high
        strategy.close("LONG")
    // if high > b_high and entry_price < high
    //     strategy.close("LONG")


if inShort()
    // if entry_price - close > close * 0.005
    //     shortSl := entry_price - close * 0.001
    if low < shortTp
        strategy.close("SHORT")
        if (open - close) > close * 0.014
            longTp := close * (1 + TP/100)
            longSl := close * (1 - SL/100)
            strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))


    if close > shortSl
        strategy.close("SHORT")
    if open < b_low and close < b_low
        strategy.close("SHORT")
    // if low < b_low and entry_price > low
    //     strategy.close("SHORT")

अधिक