Estrategia de cruce de líneas medias


Fecha de creación: 2023-10-10 10:44:25 Última modificación: 2023-10-10 10:44:25
Copiar: 0 Número de Visitas: 751
1
Seguir
1617
Seguidores

Descripción general

La estrategia de cruce de línea es una estrategia de negociación común basada en la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de movimiento de la línea de

Principio de estrategia

La lógica central de esta estrategia se basa en la teoría de la línea media. La línea media móvil es capaz de suavizar eficazmente las fluctuaciones de los precios y reflejar la tendencia de los precios. La línea media rápida es más sensible a los cambios en los precios y puede capturar los puntos de inflexión de la tendencia.

En concreto, la estrategia primero define la media de 50 días y la media de 200 días. Luego, se establece una media lenta sobre la media rápida para las condiciones de entrada múltiple y una media lenta por debajo de la media rápida para las condiciones de entrada en blanco. Para evitar la superposición de operaciones, la estrategia utiliza los indicadores isEntry y isExit para el control.

Además, la estrategia también establece un punto de parada y pérdida. El usuario puede establecer la distancia de parada y pérdida mediante la introducción de porcentajes. Los precios de parada y pérdida se calculan según el cambio porcentual en el precio de entrada.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. La operación es sencilla y fácil de realizar. Se puede operar con solo un cruce equilátero, lo que es ideal para los principiantes que no tienen experiencia en operaciones.

  2. La retirada es controlada y tiene un mecanismo de gestión de riesgos. La línea de media móvil puede filtrar eficazmente las fluctuaciones de precios a corto plazo y evitar el arbitraje.

  3. Parámetros personalizables y de gran adaptabilidad. El usuario puede configurar los parámetros de la línea media y los parámetros de los parámetros de stop loss para optimizar la estrategia.

  4. La estrategia es la que traza directamente en el gráfico las líneas medias clave, los puntos de entrada, los puntos de parada y los puntos de pérdida, a simple vista.

  5. Escalable: el marco de la estrategia está completo y solo se necesita modificar las señales comerciales clave, agregar indicadores, etc. para mejorar la estrategia.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Las sorpresas en el mercado provocan una gran cantidad de movimientos que no se pueden detener. La línea media rápida es más sensible a los cambios de precios y no puede responder eficazmente a las sorpresas.

  2. En situaciones convulsivas, es fácil ser engañado. Si las condiciones son convulsivas durante mucho tiempo, se repiten las pérdidas.

  3. No se tienen en cuenta los costos de transacción. Las comisiones y pérdidas de puntos de deslizamiento en las transacciones reales afectan gravemente a las ganancias.

  4. El riesgo de la adecuación de los datos de la retroalimentación. La situación en el campo es compleja y cambiante, y los resultados de la retroalimentación no representan el rendimiento de la guerra real.

Resolución de las mismas:

  1. Se puede configurar un estándar de pérdidas más flexible, y también se puede agregar un límite de pérdidas adicional.

  2. Se puede ampliar la distancia media de la línea, reducir la frecuencia de las transacciones o filtrar la señal con otros indicadores.

  3. Se debe tener en cuenta el costo real de la transacción y establecer un margen de retención más amplio.

  4. Se debe tener en cuenta el cambio en el entorno del mercado, optimizar los parámetros y reducir gradualmente la adecuación.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Prueba diferentes combinaciones de parámetros para encontrar el mejor. Prueba el número de días de la línea media lenta, combinaciones de parámetros, etc.

  2. Se filtrarán otros indicadores para evitar errores de transacción en situaciones de crisis, como MACD, KD, etc.

  3. Optimización de las estrategias de stop loss para lograr una gestión de riesgos más eficiente. Por ejemplo, seguimiento de los stops, suspensión de los stops, etc.

  4. Aumentar el tamaño de las posiciones, aprovechar el apalancamiento para aumentar el margen de ganancias. Pero debe controlar el riesgo.

  5. Tenga en cuenta los costos de las transacciones en el disco duro, ajuste y optimice los parámetros de retroalimentación para que los parámetros de la estrategia sean más adecuados para la guerra real.

  6. La combinación de métodos estadísticos para evaluar la estabilidad de los parámetros reduce el riesgo de coincidencia de datos y mejora la estabilidad.

Resumir

En resumen, la estrategia general de la estrategia de cruce de línea uniforme es clara, simple de implementar y adecuada para ser una estrategia de entrada para el comercio cuantitativo. Sin embargo, la estrategia también tiene ciertos riesgos y deficiencias, que requieren una optimización minuciosa de los parámetros y filtros, y la atención al control del riesgo de negociación en disco duro para obtener ganancias estables.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-09 00:00:00
period: 3m
basePeriod: 1m
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/
// © gjfsdrtytru

//@version=4
strategy("Backtest Engine", "Backtest", overlay=true, commission_type=strategy.commission.percent, commission_value=0.07, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)


// Start code here...
fastMA = sma(close,50)
slowMA = sma(close,200)

plot(fastMA, "Fast MA",  color.blue)
plot(slowMA, "Slow MA",  color.red)

// Long Enrty/Exit
longCondition = crossover(fastMA,slowMA)
closeLong = crossover(slowMA,fastMA)

// Short Enrty/Exit
shortCondition = crossover(slowMA,fastMA)
closeShort = crossover(fastMA,slowMA)


// Bot web-link alert - {{strategy.order.comment}}
botLONG = "ENTRY LONG ALERT"
botCLOSELONG = "CLOSE LONG ALERT"
botSHORT = "ENTRY SHORT ALERT"
botCLOSESHORT = "CLOSE SHORT ALERT"

//////////////////////////////////////////////////////////////////
//////////////////////// BACKTEST ENGINE \\\\\\\\\\\\\\\\\\\\\\\\\
/////////////////// [NO USER INPUT REQUIRED] /////////////////////
//////////////////////////////////////////////////////////////////

// Time period
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(5, "Backtest Start Month")
testStartDay = input(11, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

periodLength = input(3650, "Backtest Period (days)", minval=0,tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStop = testPeriodStart + periodLength

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

// Convert Take profit and Stop loss to percentage
longTP = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
longSL = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortTP = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortSL = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options

// 0% TP/SL = OFF (a value of 0 turns off TP/SL feature)
longProfitPerc = longTP == 0 ? 1000 : longTP
longStopPerc = longSL == 0 ? 1 : longSL
shortProfitPerc = shortTP == 0 ? 1 : shortTP
shortStopPerc = shortSL == 0 ? 1000 : shortSL

// Determine TP/SL price based on percentage given
longProfitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortProfitPrice  = strategy.position_avg_price * (1 - shortProfitPerc)
shortStopPrice  = strategy.position_avg_price * (1 + shortStopPerc)

// Anti-overlap
isEntry_Long = false
isEntry_Long := nz(isEntry_Long[1], false)
isExit_Long = false
isExit_Long := nz(isExit_Long[1], false)
isEntry_Short = false
isEntry_Short := nz(isEntry_Short[1], false)
isExit_Short = false
isExit_Short := nz(isExit_Short[1], false)

entryLong = not isEntry_Long and longCondition
exitLong = not isExit_Long and closeLong
entryShort = not isEntry_Short and  shortCondition
exitShort = not isExit_Short and closeShort

if (entryLong)
    isEntry_Long := true
    isExit_Long := false
if (exitLong)
    isEntry_Long := false
    isExit_Long := true
if (entryShort)
    isEntry_Short := true
    isExit_Short := false
if (exitShort)
    isEntry_Short := false
    isExit_Short := true

// Order Execution
if testPeriod() 
    if entryLong
        strategy.entry(id="Long", long=true, when = entryLong, comment=botLONG) // {{strategy.order.comment}}
    if entryShort
        strategy.entry(id="Short", long=false, when = entryShort, comment=botSHORT) // {{strategy.order.comment}}


// TP/SL Execution
if (strategy.position_size > 0)
    strategy.exit(id="Long SL/TP", from_entry="Long", limit=longProfitPrice, stop=longStopPrice)
    strategy.close(id="Long", when=exitLong, comment=botCLOSELONG) // {{strategy.order.comment}}

if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", from_entry="Short", limit=shortProfitPrice, stop=shortStopPrice)
    strategy.close(id="Short", when=exitShort, comment=botCLOSESHORT) // {{strategy.order.comment}}
    
// Draw Entry, TP and SL Levels for Long Positions
plot(strategy.position_size > 0 ? longTP == 0 ? na : longProfitPrice : na, style=plot.style_linebr, color=color.green, title="Long TP")
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Long Entry")
plot(strategy.position_size > 0 ? longSL == 0 ? na : longStopPrice : na, style=plot.style_linebr, color=color.red, title="Long SL")
// Draw Entry, TP and SL Levels for Short Positions
plot(strategy.position_size < 0 ? shortTP == 0 ? na : shortProfitPrice : na, style=plot.style_linebr, color=color.green, title="Short TP")
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Short Entry")
plot(strategy.position_size < 0 ? shortSL == 0 ? na : shortStopPrice : na, style=plot.style_linebr, color=color.red, title="Short SL")