मोमेंटम ब्रेकआउट अनुकूलित ट्रेंड फॉलोइंग रणनीति


निर्माण तिथि: 2024-01-17 16:44:30 अंत में संशोधित करें: 2024-01-17 16:44:30
कॉपी: 0 क्लिक्स: 622
1
ध्यान केंद्रित करना
1617
समर्थक

मोमेंटम ब्रेकआउट अनुकूलित ट्रेंड फॉलोइंग रणनीति

अवलोकन

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

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

  • 1. प्रवृत्ति की दिशा का आकलन करने के लिए एक तकनीकी संकेतक के रूप में कीमतों के लिए ZLEMA चलती औसत की गणना करना
  • 2. एटीआर के आधार पर लंबी स्थिति के लिए स्टॉप प्राइस और छोटी स्थिति के लिए स्टॉप प्राइस
  • 3. सीएमओ सूचकांक की गणना ओवरबॉय ओवरसोल सीमा के लिए करें, जो एक प्रवेश संकेत के रूप में चलती औसत के साथ काम करता है
  • 4. एटीआर और चलती औसत के आधार पर ट्रेडिंग सिग्नल के तीन सेटों का निर्माण
    • मूविंग एवरेज और स्टॉप प्राइस के क्रॉस सिग्नल
    • मूल्य और स्टॉप मूल्य का क्रॉस सिग्नल
    • मूल्य और चलती औसत के क्रॉस सिग्नल
  • 5. विभिन्न प्रकार के सिग्नल के सक्रियण को पैरामीटर सेटिंग के माध्यम से नियंत्रित करें
  • 6. जोखिम प्रबंधन के लिए जोखिम गुणांक और स्थिति नियंत्रण सेट करें

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

श्रेष्ठता विश्लेषण

कई सूचकांक संयोजनों का उपयोग

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

गतिशील ट्रेलिंग स्टॉप

एटीआर-आधारित गतिशील स्टॉप-लॉस तंत्र, जो बाजार में उतार-चढ़ाव के आधार पर स्टॉप-लॉस स्थिति को लचीले ढंग से समायोजित कर सकता है, प्रभावी रूप से एकल नुकसान को नियंत्रित करता है।

अच्छा जोखिम प्रबंधन

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

समृद्ध व्यापारिक संकेत

रणनीति कुल मिलाकर ट्रेडिंग सिग्नल के तीन सेट प्रदान करती है, जो विभिन्न प्रकार के सिग्नल के संयोजन को सक्षम करने का विकल्प चुनकर बेहतर प्रतिक्रिया प्राप्त कर सकती है।

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

बहुत अधिक लेन-देन

जब सभी सिग्नल पोर्टफोलियो को सक्षम किया जाता है, तो ट्रेडिंग की उच्च आवृत्ति हो सकती है। केवल कुछ सिग्नल पोर्टफोलियो का उपयोग करके इसे टाला जा सकता है।

सूचक पैरामीटर संवेदनशील

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

ब्रीच सिग्नल रिट्रीट दर उच्च

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

अनुकूलन दिशा

विभिन्न संयोजनों का परीक्षण करें

चलती औसत प्रकार और लंबाई पैरामीटर का अनुकूलन करें; एटीआर चक्र पैरामीटर का अनुकूलन करें; सीएमओ पैरामीटर का अनुकूलन करें। पैरामीटर का इष्टतम मिलान ढूंढें।

सिग्नल के उपयोग को अनुकूलित करने की रणनीति

परीक्षण केवल चलती औसत संकेतों, स्टॉप मूल्य संकेतों और संयोजन संकेतों का उपयोग करके किया जाता है, ताकि सर्वोत्तम उपयोग की रणनीति का विश्लेषण किया जा सके।

विभिन्न किस्मों में प्रदर्शन का परीक्षण

स्टॉक इंडेक्स, विदेशी मुद्रा और कमोडिटी किस्मों पर प्रतिक्रिया करें और बाजार के प्रकार के लिए रणनीति की उपयुक्तता का विश्लेषण करें।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic

strategy(title="Profit Maximizer PMax", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=0.025, slippage=2)


src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="ZLEMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc   = input(title="Risk %", type=input.float, defval=0.5, step=0.25)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2019, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(src, length)
longStop = MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)

alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")


// Calculate position size
riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? floor(riskEquity / atrCurrency) : 1

//Long
buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="BuyL", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)


if(buySignalk and showsignalsk and inDateRange)
    strategy.entry(id="buySignalk", long=true, qty=posSize)
    
sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="SellL", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

if(sellSignallk and showsignalsk and inDateRange)
    strategy.order(id="sellSignallk", long=false, qty=strategy.position_size)
    
//Short
buySignalc = crossover(src, PMax)
plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="BuyS", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

if(buySignalc and showsignalsc and inDateRange)
    strategy.entry(id="BuyS", long=false, qty=posSize)

sellSignallc = crossunder(src, PMax)
plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="SellS", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

if(sellSignallc and showsignalsc and inDateRange)
    strategy.order(id="SellS", long=true, qty=abs(strategy.position_size))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)

longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na

fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

// Exit open market position when date range ends
if (not inDateRange)
    strategy.close_all()