गतिशील रुझान ट्रैकिंग अनुकूलित रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-12 11:20:04
टैगः

img

अवलोकन

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

रणनीति तर्क

  1. मूल्य प्रवृत्ति निर्धारित करने के लिए सीओएम सूचक की गणना करें
  2. मूल्य परिवर्तन की प्रवृत्ति को प्रतिबिंबित करने के लिए परिवर्तन दर Var की गणना करें
  3. परिवर्तन दर के आधार पर ग्राफ समर्थन रेखा
  4. अनुकूलित स्टॉप हानि लाइनों की गणना करें longStop और shortStop
  5. जब मूल्य समर्थन रेखा को तोड़ता है तो व्यापार संकेत उत्पन्न करें

लाभ विश्लेषण

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

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

  1. सीओएम सूचक का प्रभाव कम होता है, मूल्य मोड़ के बिंदुओं को याद कर सकता है
  2. समर्थन लाइन के टूटने से झूठे संकेत उत्पन्न हो सकते हैं
  3. गलत स्टॉप लॉस ऑप्टिमाइजेशन से अधिक नुकसान हो सकते हैं

जोखिम समाधान:

  1. पिछड़ेपन को कम करने के लिए सीएमओ मापदंडों को उचित रूप से समायोजित करें
  2. झूठे संकेतों से बचने के लिए अन्य संकेतकों के साथ अधिक फ़िल्टर जोड़ें
  3. उपयुक्त स्टॉप लॉस ऑप्टिमाइजेशन अनुपात निर्धारित करने के लिए परीक्षण

अनुकूलन दिशाएँ

  1. झूठे संकेतों को फ़िल्टर करने के लिए अधिक संकेतक जोड़ें
  2. स्टॉप लॉस रेंज का स्वचालित अनुकूलन
  3. स्वतः विनिमय आकार समायोजित करें

सारांश

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


/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 45m
basePeriod: 5m
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/
// © melihtuna

//@version=4
strategy("Optimized Trend Tracker - Strategy Version", shorttitle="OTT-Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent)

src = input(close, title="Source")
pds=input(1, "OTT Period", minval=1)
percent=input(0.1, "OTT Percent", type=input.float, step=0.1, minval=0)
condition = input(title="Condition", defval="Support Line Crossing Signals", options=["Price/OTT Crossing Signals", "Support Line Crossing Signals"])
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
highlight = input(title="Show OTT Color Changes?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloing = input(title="Barcolor On/Off ?", type=input.bool, defval=true)
showlabels = input(title="Show OTT BUY/SELl Labels?", type=input.bool, defval=false)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

alpha=2/(pds+1)
ud1=src>src[1] ? src-src[1] : src
dd1=src<src[1] ? src[1]-src : src
UD=sum(ud1,9)
DD=sum(dd1,9)
CMO=(UD-DD)/(UD+DD)
k= abs(CMO)
Var=0.0
Var:=(alpha*k*src)+(1-alpha*k)*nz(Var[1])
fark=Var*percent*0.01
longStop = Var - fark
longStopPrev = nz(longStop[1], longStop)
longStop := Var > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop =  Var + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := Var < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and Var > shortStopPrev ? 1 : dir == 1 and Var < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=Var>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 
plot(showsupport ? Var : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = highlight ? OTT[2] > OTT[3] ? color.green : color.red : #B800D9 
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)

buySignalk = window() and crossover(Var, OTT[2])
sellSignallk = window() and crossunder(Var, OTT[2])
buySignalc = window() and crossover(src, OTT[2])
sellSignallc = window() and crossunder(src, OTT[2])

plotshape(condition == "Support Line Crossing Signals" ? showlabels and buySignalk ? OTT*0.995 : na : showlabels and buySignalc ? OTT*0.995 : na, title="BUY", text="BUY", location=location.belowbar, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
plotshape(condition == "Support Line Crossing Signals" ? showlabels and sellSignallk ? OTT*1.005 : na : showlabels and sellSignallc ? OTT*1.005 : na, title="SELL", text="SELL", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
  
ottBuyColor=#77DD77
ottSellColor=#FF0000
vColor = strategy.position_size > 0 ? ottBuyColor : ottSellColor

if condition == "Support Line Crossing Signals"
    strategy.entry("BUY", true, 1, when = buySignalk)
    strategy.entry("SELL", false, 1, when = sellSignallk)
else
    strategy.entry("BUY", true, 1, when = buySignalc)
    strategy.entry("SELL", false, 1, when = sellSignallc)

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

longFillColor = highlighting ? (Var>OTT ? color.green : na) : na
shortFillColor = highlighting ? (Var<OTT ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

barcolor(barcoloing ? vColor : na)





अधिक