Esta estrategia calcula el indicador de CMO y la tasa de cambio para trazar dinámicamente las líneas de soporte. Las señales comerciales se generan cuando el precio rompe las líneas de soporte. Mientras tanto, la estrategia también optimiza el rango de stop loss alrededor de las líneas de soporte para obtener más ganancias.
Soluciones de riesgos:
En general, esta estrategia funciona bien, utilizando la línea de soporte para determinar claramente la dirección de la tendencia. Combinada con el indicador CMO y la parada de pérdida optimizada, se logran buenos resultados. Pero hay algunos riesgos de señales falsas, que se pueden mejorar combinando más indicadores.
/*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)