Estrategia de trading cuantitativo de cruce de medias móviles exponenciales


Fecha de creación: 2024-03-29 10:59:57 Última modificación: 2024-03-29 10:59:57
Copiar: 1 Número de Visitas: 517
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo de cruce de medias móviles exponenciales

Descripción general

La estrategia utiliza el cruce de dos medias móviles de índices (EMA) como una señal de compra y venta. Cuando el EMA de período más corto cruza el EMA de período más largo de abajo hacia arriba, produce una señal de compra; y, a la inversa, cuando el EMA de período más corto cruza el EMA de período más largo de arriba hacia abajo, produce una señal de venta. La estrategia también determina si el punto de cruce es el precio más alto o más bajo en los últimos 10 ciclos de negociación, para así confirmar la fuerza de la tendencia.

Principio de estrategia

  1. Calcula el EMA de dos períodos diferentes, los períodos predeterminados son 5 y 10 respectivamente.
  2. Para determinar si los dos EMA se cruzan, si el EMA corto cruza el EMA largo de abajo hacia arriba, se genera una señal de compra; si el EMA corto cruza el EMA largo de arriba hacia abajo, se genera una señal de venta.
  3. Al generar una señal de cruce, determine si el punto de cruce actual es el precio más alto o el precio más bajo de los últimos 10 ciclos de negociación. Si es el precio más alto, se considera una fuerte tendencia alcista; si es el precio más bajo, se considera una fuerte tendencia descendente.
  4. Si se produce una señal de compra y no se tiene una posición en ese momento, se abre una orden adicional; si se produce una señal de venta y no se tiene una posición en ese momento, se abre una orden en blanco.
  5. Si ya hay varias posiciones en la bolsa y el EMA a corto plazo atraviesa el EMA a largo plazo de arriba hacia abajo, se borrarán varias; si ya hay una posición en la bolsa vacía y el EMA a corto plazo atraviesa el EMA a largo plazo de abajo hacia arriba, se borrarán las.

Ventajas estratégicas

  1. Las medias móviles indicativas pueden reaccionar más rápidamente a los cambios de precios que las medias móviles simples, lo que permite generar señales de negociación más oportunas.
  2. Al juzgar si la intersección es el precio más alto o más bajo reciente, se pueden seleccionar las oportunidades de negociación con mayor intensidad de tendencia para mejorar los beneficios de la estrategia.
  3. El precio de los puntos cruzados se indica en la tabla, lo que proporciona a los comerciantes una referencia de negociación más intuitiva.
  4. La lógica del código es clara, fácil de entender e implementar.

Riesgo estratégico

  1. Las señales generadas por EMA cruzados pueden tener un retraso, lo que lleva a perder el mejor momento de negociación.
  2. En un mercado convulso, los cruces EMA pueden ocurrir con frecuencia, lo que provoca un exceso de transacciones y aumenta los costos de transacción.
  3. La estrategia carece de medidas de suspensión de pérdidas y puede tener un mayor riesgo de retirada si se hace un error de juicio.

Dirección de optimización de la estrategia

  1. La introducción de más indicadores técnicos, como el RSI, el MACD, etc., para ayudar a determinar la intensidad y la dirección de la tendencia, mejora la precisión de la señal.
  2. Establezca un punto de parada y de parada razonables para controlar el riesgo de una sola transacción.
  3. Optimización de los parámetros de negociación, como el ciclo EMA, la ventana de tiempo de confirmación cruzada, etc., para mejorar la adaptabilidad de la estrategia.
  4. En combinación con indicadores de sentimiento del mercado, como el VIX, se filtran las señales de negociación para reducir las señales erróneas.
  5. Considere agregar módulos de administración de posiciones y administración de fondos para ajustar dinámicamente la cantidad de fondos en cada transacción y mejorar la eficiencia de la utilización de fondos.

Resumir

En general, la lógica de la estrategia es clara, las ventajas son evidentes, pero también existen ciertas limitaciones y riesgos. Al introducir más indicadores de juicio auxiliares, establecer medidas de control de riesgo razonables y optimizar los parámetros clave, se puede mejorar aún más la estabilidad y la rentabilidad de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
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/
// © ZenAndTheArtOfTrading
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")