
La estrategia se basa en un indicador de tendencia súper y un indicador de canal de precios para operar en combinación con una señal de línea de equilibrio. Su idea central es usar el canal de precios para determinar si el precio actual está en un estado anormal, la tendencia súper para determinar la dirección de la tendencia actual y generar una señal de operación con una combinación de señales de línea de equilibrio.
Calcula el indicador de tendencia súper. Donde la línea ascendente y la línea descendente son N veces el precio actual más/menos el indicador ATR. Cuando el precio está por encima de la línea ascendente, es un alza, y cuando el precio está por debajo de la línea descendente, es una baja.
Calcular el indicador de la línea de precios. Donde la línea de precios es M veces la diferencia estándar de N días entre los precios. Los precios por encima o por debajo de la línea de precios se consideran estados anormales.
Calcula la línea media. Toma el promedio de los precios de apertura, cierre y súper tendencia, respectivamente.
Se generan señales de transacción:
Señales de compra: el precio de cierre cruza la línea de tendencia súper y está por encima de la línea media de apertura
Señales de venta: cruzar la línea de tendencia súper por debajo del precio de cierre y por debajo de la línea media de apertura
Establezca un canal de precios de parada de pérdidas.
La combinación de varios indicadores evita falsas señales.
El uso de un canal de precios para evaluar las anomalías de precios puede filtrar los puntos de entrada no deseados.
La línea media se combina para determinar la dirección de la tendencia y evitar operaciones de contratiempo.
Establezca un rango de detención de pérdidas para controlar el riesgo.
La configuración de los parámetros es demasiado subjetiva y requiere optimización.
El alcance de la parada de daños puede estar demasiado grande.
Los parámetros del canal de precios pueden no ser adecuados para todas las variedades, y se deben probar individualmente para cada variedad.
En el caso de un cambio brusco de tendencia, las pérdidas podrían ser mayores.
Optimización de la prueba de los parámetros para encontrar la combinación óptima de parámetros.
Prueba diferentes ciclos de medias y selecciona los parámetros óptimos.
Se realizan pruebas de retorno en varias variedades, seleccionando los parámetros según el rendimiento.
Optimizar las estrategias de stop loss para evitar pérdidas excesivas en una sola operación.
Esta estrategia integra varios indicadores para determinar las anomalías de precios y la dirección de la tendencia. En teoría, puede filtrar ciertas señales falsas. Sin embargo, la configuración de los parámetros sigue siendo más subjetiva y hay cierto espacio para la optimización. Además, en el mercado real específico, también se debe considerar el impacto de los costos de transacción, como las comisiones y los puntos de deslizamiento.
/*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")