
Esta estrategia utiliza técnicas simples de medias móviles cruzadas y paradas dobles para controlar el riesgo y aumentar la probabilidad de obtener ganancias. La estrategia es adecuada para operaciones a corto y medio plazo y puede capturar oportunidades cuando la tendencia cambia.
La estrategia se basa en el cruce de EMA y WMA para determinar el movimiento del mercado. Cuando la EMA está por encima de la WMA, haga más; cuando la EMA está por debajo de la WMA, haga menos.
Cada vez que se abre una posición, la estrategia establece dos niveles de parada. El primer nivel de parada se fija en el precio de apertura de la posición + 20 puntos, el segundo nivel de parada se fija en el precio de apertura de la posición + 40 puntos.
Cuando el precio toque el primer nivel de parada, se cancela la mitad de la posición. La posición restante se mantiene, se busca el segundo nivel de parada o se cancela.
Así, cada transacción tiene tres resultados:
El precio desencadena el stop loss, una pérdida directa del 2%.
El precio se activa primero en el primer stop, a la mitad de la posición, para bloquear el 1% de ganancias, y luego continúa funcionando hasta que se detiene, y finalmente se liquida equilibrado, con cero ganancias.
El precio continúa después de la primera parada, luego la segunda parada, y finalmente obtiene un beneficio de 1% + 2% = 3%.
La mayor ventaja de esta estrategia de doble parada de pérdidas es que se puede controlar el riesgo y evitar grandes pérdidas en una sola vez. Cuando el mercado es desfavorable, el stop loss puede controlar la pérdida dentro del 2%. Cuando el mercado es soleado, dos niveles de parada pueden obtener más ganancias.
En comparación con una única estrategia de stop loss, la estrategia tiene tres resultados: pérdidas, ganancias y no pérdidas, lo que reduce la probabilidad de un stop loss. Incluso con un stop loss, la pérdida máxima se controla en un 2%. En comparación con la estrategia de stop loss tradicional, esta estrategia de stop loss doble reduce significativamente el DD y mejora la tasa de ganancias.
Otra ventaja es la simplicidad de uso. EMA y WMA son indicadores conocidos y fáciles de entender. La lógica de stop loss es muy clara y fácil de monitorear. Esto hace que las estrategias sean fácilmente aceptadas e implementadas por los principiantes en el comercio cuantitativo.
A pesar de las ventajas de esta estrategia, existen algunos riesgos a tener en cuenta.
En primer lugar, los EMA y WMA, como indicadores de la media, tienen una capacidad de reconocimiento de la situación de la oscilación más débil. Cuando la tendencia no es clara, puede generar más señales erróneas, lo que lleva a un comercio demasiado frecuente.
En segundo lugar, el punto de parada fijo puede no coincidir con la fluctuación del mercado. Cuando la fluctuación es grande, el stop loss puede ser superado y no servir de protección.
Finalmente, la estrategia no puede responder a eventos inesperados y existe el riesgo de ser arbitraje. Cuando ocurren eventos de noticias importantes, el mercado puede saltar fuertemente y atravesar directamente la línea de parada de suspensión, causando grandes pérdidas.
Se puede optimizar aún más la estrategia en los siguientes aspectos:
Mejorar la señal de entrada. Se puede probar un indicador de línea media o un indicador de tendencia mejor que EMA y WMA para mejorar la calidad de la señal.
Ajuste dinámico de la parada de pérdidas. Se puede ajustar la parada de pérdidas en tiempo real según el ATR, el stop loss móvil, etc., para que pueda seguir dinámicamente el mercado.
Añadir condiciones de filtrado. Se puede agregar el volumen de transacciones o la confirmación de los subíndices antes de la horca de oro, para evitar la estafa. También se puede elegir si se negocia o no según el calendario de eventos importantes.
Optimización de la gestión de la posición. Se puede optimizar el tamaño de la posición específica de cada transacción de acuerdo con los principios de gestión de fondos.
En general, esta estrategia es una estrategia de seguimiento de tendencias sencilla y práctica. Utiliza EMA y WMA para formar señales de negociación y controla el riesgo con técnicas de doble parada. En comparación con las estrategias tradicionales, tiene una mayor probabilidad de ganancias y un menor riesgo.
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("FS ATR & PS (MA)", overlay=true)
// Strategy
Buy = input(true)
Sell = input(true)
// Time Period
start_year = input(title='Start year' ,defval=2019)
start_month = input(title='Start month' ,defval=1)
start_day = input(title='Start day' ,defval=1)
start_hour = input(title='Start hour ' ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time = input(title='set end time?',defval=false)
end_year = input(title='end year' ,defval=2019)
end_month = input(title='end month' ,defval=12)
end_day = input(title='end day' ,defval=31)
end_hour = input(title='end hour' ,defval=23)
end_minute = input(title='end minute' ,defval=59)
// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)
// Entry Condition
longCondition =
crossover(ema,wma) and Buy and
nz(strategy.position_size) == 0 and
time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
(end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
shortCondition =
crossunder(ema,wma) and Sell and
nz(strategy.position_size) == 0 and
time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
(end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick
long_stop_level = float(na)
long_profit_level1 = float(na)
long_profit_level2 = float(na)
long_even_level = float(na)
short_stop_level = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level = float(na)
long_stop_level := longCondition ? close - c : long_stop_level [1]
long_profit_level1 := longCondition ? close + c : long_profit_level1 [1]
long_profit_level2 := longCondition ? close + d : long_profit_level2 [1]
long_even_level := longCondition ? close + 0 : long_even_level [1]
short_stop_level := shortCondition ? close + c : short_stop_level [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level := shortCondition ? close + 0 : short_even_level [1]
// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size = 1
// Strategy
if longCondition
strategy.entry("Buy" , strategy.long, qty=size)
strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
if shortCondition
strategy.entry("Sell" , strategy.short, qty=size)
strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)