मूविंग एवरेज और सुपर ट्रेंड पर आधारित ट्रेलिंग स्टॉप लॉस रणनीति


निर्माण तिथि: 2023-10-20 16:50:01 अंत में संशोधित करें: 2023-10-20 16:50:01
कॉपी: 2 क्लिक्स: 727
1
ध्यान केंद्रित करना
1617
समर्थक

मूविंग एवरेज और सुपर ट्रेंड पर आधारित ट्रेलिंग स्टॉप लॉस रणनीति

अवलोकन

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

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

इस रणनीति में दो FRAMA समानांतर रेखाओं का उपयोग किया जाता है ताकि खरीद और बिक्री के संकेतों का आकलन किया जा सके, और सुपरट्रेंड सूचकांकों के संयोजन के साथ फ़िल्टर किया जा सके।

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

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

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

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

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

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

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

इन जोखिमों को कम करने के लिए, चलती औसत मापदंडों को समायोजित करें, सुपरट्रेंड सूचक सेटिंग्स को अनुकूलित करें और ट्रैक स्टॉप लॉस का उचित उपयोग करें।

अनुकूलन दिशा

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

  1. चलती औसत मापदंडों को अनुकूलित करें, सबसे अच्छा संयोजन खोजें

विभिन्न चक्र मापदंडों के संयोजनों का परीक्षण किया जा सकता है ताकि चिकनाई प्रभाव और संवेदनशीलता का सबसे अच्छा संतुलन पाया जा सके।

  1. सुपर ट्रेंड सूचक पैरामीटर को अनुकूलित करें

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

  1. अन्य मापदंडों को फ़िल्टर करें

सिग्नल को और अधिक फ़िल्टर करने के लिए कमोडिटी चैनल इंडिकेटर, अस्थिरता इंडिकेटर आदि को जोड़ने का परीक्षण किया जा सकता है।

  1. ट्रैक करने के लिए अनुकूलित स्टॉप लॉस पैरामीटर

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

  1. अन्य स्टॉप लॉस रणनीतियों के साथ संयोजन

सामान्य रोकथाम, कंपन रोकथाम और गतिशील रोकथाम जैसी रणनीतियों के संयोजन का परीक्षण किया जा सकता है।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-13 00:00:00
period: 30m
basePeriod: 15m
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/
// © 03.freeman

//@version=4
// strategy("FRAMA strategy", overlay=true,precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)
ma_src = input(title="MA FRAMA Source", type=input.source, defval=close)
ma_frama_len = input(title="MA FRAMA Length", type=input.integer, defval=12)
res = input(title="Resolution", type=input.resolution, defval="1W")
frama_FC = input(defval=1,minval=1, title="* Fractal Adjusted (FRAMA) Only - FC")
frama_SC = input(defval=200,minval=1, title="* Fractal Adjusted (FRAMA) Only - SC")
High = security(syminfo.tickerid, res, high)
Low = security(syminfo.tickerid, res, low)
source = security(syminfo.tickerid, res, ma_src)
enterRule = input(false,title = "Use supertrend for enter")
exitRule = input(false,title = "Use supertrend for exit")

ma(src, len) =>
    float result = 0
    int len1 = len/2
    e = 2.7182818284590452353602874713527
    w = log(2/(frama_SC+1)) / log(e) // Natural logarithm (ln(2/(SC+1))) workaround
    H1 = highest(High,len1)
    L1 = lowest(Low,len1)
    N1 = (H1-L1)/len1
    H2_ = highest(High,len1)
    H2 = H2_[len1]
    L2_ = lowest(Low,len1)
    L2 = L2_[len1]
    N2 = (H2-L2)/len1
    H3 = highest(High,len)
    L3 = lowest(Low,len)
    N3 = (H3-L3)/len
    dimen1 = (log(N1+N2)-log(N3))/log(2)
    dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
    alpha1 = exp(w*(dimen-1))
    oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
    oldN = (2-oldalpha)/oldalpha
    N = (((frama_SC-frama_FC)*(oldN-1))/(frama_SC-1))+frama_FC
    alpha_ = 2/(N+1)
    alpha = alpha_<2/(frama_SC+1)?2/(frama_SC+1):(alpha_>1?1:alpha_)
    frama = 0.0
    frama :=(1-alpha)*nz(frama[1]) + alpha*src
    result := frama
    result

frama = ma(sma(source,1),ma_frama_len)
signal = ma(frama,ma_frama_len)
plot(frama, color=color.red)
plot(signal, color=color.green)


longCondition = crossover(frama,signal)
shortCondition = crossunder(frama,signal)

Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)


Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))

TrendUp = 0.0
TrendDown = 0.0
Trend = 0.0
Tsl = 0.0
TrendUp :=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown :=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl := Trend==1? TrendUp: TrendDown

linecolor = Trend == 1 ? color.green : color.red

//plot(Tsl, color = linecolor , style =  plot.style_line , linewidth = 2,title = "SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,color.green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, color.red,0,0)

plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=color.lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=color.red, maxheight=60, minheight=50, transp=0)


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => enterRule? (longCondition and Trend ==1):longCondition                                             // functions can be used to wrap up and work out complex conditions
exitLong() => exitRule and Trend == -1

strategy.entry(id = "Buy", long = true, when = enterLong() )             // use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() )                         // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => enterRule? (shortCondition and Trend ==-1):shortCondition
exitShort() => exitRule and Trend == 1

strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()