Esta estrategia se basa en el indicador de súper tendencia y el indicador de canal de precios, combinado con señales de promedio móvil para la negociación.
Calcular el indicador de Super Tendencia. Los rieles superior e inferior son el precio actual más/menos N veces el indicador ATR respectivamente. Cuando el precio es más alto que el rieles superior, es alcista. Cuando el precio es más bajo que el rieles inferior, es bajista.
Calcular el indicador del canal de precios. La línea del canal de precios es M veces la desviación estándar de N días del precio. Los precios más altos / más bajos que la línea del canal se consideran estados anormales.
Calcule las medias móviles. Tome las líneas medias de precio abierto, precio cerrado y Super Tendencia, respectivamente.
Generar señales comerciales:
Señales de compra: el precio de cierre cruza por encima de la línea de Super Tendencia y es superior al promedio móvil del precio abierto.
Señales de venta: el precio de cierre cruza por debajo de la línea de Super Tendencia y es inferior al promedio móvil del precio abierto.
Establecer el stop loss y tomar el canal de precios de ganancia.
La combinación de múltiples indicadores evita señales falsas.
El uso del canal de precios para juzgar los estados anormales de precios puede filtrar algunos puntos de entrada indeseables.
Los promedios móviles combinados con juzgar la dirección de la tendencia evitan el comercio en contra de la tendencia.
Establecer el stop loss y tomar el rango de ganancias controla el riesgo.
La configuración de parámetros es demasiado subjetiva y necesita optimización.
El intervalo de stop loss y take profit puede ser demasiado amplio o demasiado estrecho.
Los parámetros de los canales de precios pueden no ser adecuados para todos los productos, por lo que es necesario realizar pruebas por separado.
Las pérdidas significativas pueden ocurrir durante cambios drásticos de tendencia.
Prueba y optimiza los parámetros para encontrar combinaciones óptimas.
Prueba las medias móviles con diferentes períodos para seleccionar los parámetros óptimos.
Prueba de retroceso en varios productos y selección de parámetros según el rendimiento, respectivamente.
Optimizar la estrategia de stop loss para evitar pérdidas individuales excesivamente grandes.
Esta estrategia combina múltiples indicadores para juzgar las anomalías de precios y las direcciones de tendencia, que teóricamente pueden filtrar algunas señales falsas. Sin embargo, las configuraciones de parámetros siguen siendo relativamente subjetivas con espacio para la optimización. Además, los costos comerciales como comisiones y deslizamiento deben considerarse en el comercio real. En general, esta estrategia es más adecuada como una estrategia de seguimiento de tendencias, pero los parámetros deben optimizarse y ajustarse para diferentes productos.
/*backtest start: 2023-12-10 00:00:00 end: 2023-12-11 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Vol ST VM", overlay=true) source = close hilow = ((high - low)*100) openclose = ((close - open)*100) vol = (volume / hilow) spreadvol = (openclose * vol) VPT = spreadvol + cum(spreadvol) window_len = 28 v_len = 14 price_spread = stdev(high-low, window_len) v = spreadvol + cum(spreadvol) smooth = sma(v, v_len) v_spread = stdev(v - smooth, window_len) shadow = (v - smooth) / v_spread * price_spread out = shadow > 0 ? high + shadow : low + shadow // src = out src1=open src2=low src3=high tf =input(720) len = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7 c = ema(src, len) plot(c,color=color.red) o = ema(src1,len) plot(o,color=color.blue) //h = ema(src3,len) //l=ema(src2,len) // col=c > o? color.lime : color.orange vis = true vl = c ll = o m1 = plot(vl, color=col, linewidth=1, transp=60) m2 = plot(vis ? ll : na, color=col, linewidth=2, transp=80) fill(m1, m2, color=col, transp=70) // vpt=ema(out,len) // INPUTS // st_mult = input(1, title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01) st_period = input(10, title = 'SuperTrend Period', minval = 1) // CALCULATIONS // up_lev = vpt - (st_mult * atr(st_period)) dn_lev = vpt + (st_mult * atr(st_period)) up_trend = 0.0 up_trend := close[1] > up_trend[1] ? max(up_lev, up_trend[1]) : up_lev down_trend = 0.0 down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev // Calculate trend var trend = 0 trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1) // Calculate SuperTrend Line st_line = trend ==1 ? up_trend : down_trend // Plotting plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend") buy=crossover( close, st_line) and close>o sell=crossunder(close, st_line) and close<o //plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny) //plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny) plotshape(buy, title="buy", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0) //plot for buy icon plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0) //plot for sell icon // multiplier = input(title="TP", type=input.float, defval=2, minval=1) src5 = close len5 = input(title="TP length", defval=150, minval=1) offset = 0 calcSlope(src5, len5) => sumX = 0.0 sumY = 0.0 sumXSqr = 0.0 sumXY = 0.0 for i = 1 to len5 val = src5[len5-i] per = i + 1.0 sumX := sumX + per sumY := sumY + val sumXSqr := sumXSqr + per * per sumXY := sumXY + val * per slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX) average = sumY / len5 intercept = average - slope * sumX / len5 + slope [slope, average, intercept] var float tmp = na [s, a, i] = calcSlope(src5, len5) vwap1=(i + s * (len5 - offset)) sdev = stdev(close, len5) dev = multiplier * sdev top=vwap1+dev bott=vwap1-dev // z1 = vwap1 + dev x1 = vwap1 - dev low1 = crossover(close, x1) high1 = crossunder(close, z1) plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0) //plot for buy icon plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0) //plot for sell icon strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1) strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1) /////// Alerts ///// alertcondition(buy,title="buy") alertcondition(sell,title="sell") alertcondition(low1,title="sell tp") alertcondition(high1,title="buy tp")