एमए मोमबत्तियों और सुपरट्रेंड पर आधारित रणनीति के बाद की प्रवृत्ति

लेखक:चाओझांग, दिनांक: 2023-09-13 18:07:54
टैगः

इस रणनीति का नाम है ट्रेंड फॉलोइंग स्ट्रैटेजी बेस्ड ऑन एमए कैंडल और सुपरट्रेंड। यह ट्रेंड कैंडल बनाने के लिए चलती औसत का उपयोग करता है और ट्रेंड फॉलोइंग के लिए ट्रेडिंग सिग्नल उत्पन्न करने के लिए सुपरट्रेंड तंत्र को शामिल करता है।

विशेष रूप से, व्यापारिक तर्क हैः

  1. प्रवृत्ति मोमबत्तियों को ग्राफ करने के लिए चलती औसत के साथ खुले, उच्च, निम्न और बंद कीमतों की गणना करें।

  2. लंबी और छोटी स्टॉप प्राप्त करने के लिए ट्रेंड कैंडल पर सुपरट्रेंड तकनीक लागू करें।

  3. जब कीमतें लॉन्ग स्टॉप से ऊपर जाती हैं, तो खरीद संकेत उत्पन्न होते हैं। जब कीमतें शॉर्ट स्टॉप से नीचे जाती हैं, तो बिक्री संकेत उत्पन्न होते हैं।

  4. सीमाबद्ध बाजारों के दौरान अत्यधिक अमान्य संकेतों से बचने के लिए उच्च समय सीमाओं के वार्षिक उच्च/निम्न कीमतों को शामिल करें।

  5. जब सुपरट्रेंड उलट जाता है, तो स्टॉप लॉस के साथ पोजीशन बंद हो जाती हैं।

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

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Candles Supertrend Strategy", shorttitle="MACSTS", overlay=true, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)

MAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LoopbackBars = input(20, step=10)

AtrMAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
AtrLength = input(30, step=10)
AtrMult = input(1)
adoptiveWicks = false // does not work
wicks = input(true)

dThreshold = input(0.2, step=0.1, maxval=1)
rThreshold = input(0.7, step=0.1, maxval=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true
strategy.risk.allow_entry_in(tradeDirection)

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)

f_getYearlyHighLowCondition()=>
    yhighrange = f_secureSecurity(syminfo.tickerid, '12M', high, 1) 
    ylowrange = f_secureSecurity(syminfo.tickerid, '12M', low, 1)
    yearlyHighCondition = close > yhighrange*(1-dThreshold) or close > ylowrange*(1+rThreshold)
    yearlyLowCondition = close < ylowrange*(1+dThreshold) or close < yhighrange*(1-rThreshold)
    [yearlyHighCondition, yearlyLowCondition]


f_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, AtrMult, wicks)=>
    truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1])
    
    averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
    atr = averagetruerange * AtrMult

    longWicks = (adoptiveWicks and (close < oClose)) or wicks
    shortWicks = (adoptiveWicks and (close > oClose)) or wicks
    longStop = oClose - atr
    longStopPrev = nz(longStop[1], longStop)
    longStop := (longWicks ? oLow[1] : oClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop
    
    shortStop = oClose + atr
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := (shortWicks ? oHigh[1] : oClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
    
    dir = 1
    dir := nz(dir[1], dir)
    dir := dir == -1 and (longWicks ? oHigh : oClose) > shortStopPrev ? 1 : dir == 1 and (shortWicks[1]? oLow : oClose) < longStopPrev ? -1 : dir
    

    [dir, longStop, shortStop]

oOpen = f_getMovingAverage(open, MAType, LoopbackBars)
oClose = f_getMovingAverage(close, MAType, LoopbackBars)
oHigh = f_getMovingAverage(high, MAType, LoopbackBars)
oLow = f_getMovingAverage(low, MAType, LoopbackBars)

colorByPreviousClose = false
candleColor = colorByPreviousClose ?
                 (oClose[1] < oClose ? color.green : oClose[1] > oClose ? color.red : color.silver) : 
                 (oOpen < oClose ? color.green : oOpen > oClose ? color.red : color.silver)
plotcandle(oOpen, oHigh, oLow, oClose, 'Oscilator Candles', color = candleColor)

[yearlyHighCondition, yearlyLowCondition] =  f_getYearlyHighLowCondition()
[dir, longStop, shortStop] = f_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, AtrMult, wicks)
trailingStop = dir == 1? longStop : shortStop
trendColor = dir == 1? color.green: color.red
plot(trailingStop, title="TrailingStop", color=trendColor, linewidth=2, style=plot.style_linebr)

longCondition = close > shortStop and dir == 1 and yearlyHighCondition
shortCondition = close < longStop and dir == -1 and yearlyLowCondition

exitLongCondition = dir == -1
exitShortCondition = dir == 1

strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Long", strategy.long, when=longCondition, oca_name="oca_buy")
strategy.close("Long", when=exitLongCondition)
strategy.entry("Short", strategy.short, when=shortCondition, oca_name="oca_sell")
strategy.close("Short", when=exitShortCondition)


अधिक