En la carga de los recursos... Cargando...

Estrategia de negociación cuantitativa de media móvil exponencial cruzada

El autor:¿ Qué pasa?, Fecha: 2024-03-29 10:59:57
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el cruce de dos promedios móviles exponenciales (EMA) como señales de compra y venta. Cuando la EMA de período más corto cruza por encima de la EMA de período más largo desde abajo, genera una señal de compra; por el contrario, cuando la EMA de período más corto cruza por debajo de la EMA de período más largo desde arriba, genera una señal de venta. Además, la estrategia determina si el punto de cruce es el precio más alto o más bajo dentro de los últimos 10 períodos de negociación para confirmar la fuerza de la tendencia. Si el punto de cruce es el precio más alto, el fondo estará coloreado de verde; si es el precio más bajo, estará coloreado de rojo. Además, la estrategia muestra el precio del punto de cruce en el gráfico.

Principios de estrategia

  1. Calcular dos EMA con períodos diferentes, con períodos de impago de 5 y 10.
  2. Determine si las dos EMA se cruzan. Si la EMA a corto plazo cruza por encima de la EMA a largo plazo desde abajo, genera una señal de compra; si la EMA a corto plazo cruza por debajo de la EMA a largo plazo desde arriba, genera una señal de venta.
  3. Cuando se produce una señal de cruce, determine si el punto de cruce actual es el precio más alto o más bajo dentro de los últimos 10 períodos de negociación.
  4. Si se genera una señal de compra y no hay posición actual, abrir una posición larga; si se genera una señal de venta y no hay posición actual, abrir una posición corta.
  5. Si se mantiene una posición larga y la EMA a corto plazo se cruza por debajo de la EMA a largo plazo desde arriba, cierre la posición larga; si se mantiene una posición corta y la EMA a corto plazo se cruza por encima de la EMA a largo plazo desde abajo, cierre la posición corta.

Ventajas estratégicas

  1. Las medias móviles exponenciales reaccionan más rápidamente a los cambios de precios en comparación con las medias móviles simples, generando así señales comerciales más oportunas.
  2. Al determinar si el punto de cruce es el precio más alto o más bajo reciente, puede filtrar oportunidades comerciales con una mayor fuerza de tendencia y mejorar la rentabilidad de la estrategia.
  3. Marcar el precio del punto de cruce en el gráfico proporciona a los operadores referencias comerciales más intuitivas.
  4. La lógica del código es clara y fácil de entender e implementar.

Riesgos estratégicos

  1. Las señales generadas por los cruces de la EMA pueden tener un retraso, lo que lleva a perder las mejores oportunidades de negociación.
  2. En un mercado fluctuante, los cruces de la EMA pueden ocurrir con frecuencia, lo que resulta en una frecuencia de negociación excesiva y en un aumento de los costes de negociación.
  3. La estrategia carece de medidas de suspensión de pérdidas, por lo que, si el juicio es erróneo, puede enfrentar un mayor riesgo de extracción.

Direcciones para la optimización de la estrategia

  1. Introducir más indicadores técnicos, como RSI, MACD, etc., para ayudar a juzgar la fuerza y dirección de la tendencia y mejorar la precisión de la señal.
  2. Establecer niveles razonables de stop-loss y take-profit para controlar el riesgo de una operación única.
  3. Optimizar los parámetros de negociación, como los períodos de EMA y las ventanas de confirmación de cruce, para mejorar la adaptabilidad de la estrategia.
  4. Combinar indicadores de sentimiento del mercado, como el VIX, para filtrar las señales comerciales y reducir las falsas señales.
  5. Considere la posibilidad de añadir módulos de gestión de posiciones y gestión de capital para ajustar dinámicamente el importe de los fondos para cada operación y mejorar la eficiencia de la utilización del capital.

Resumen de las actividades

Esta estrategia utiliza cruces de promedios móviles exponenciales como su lógica central, al tiempo que considera la posición relativa del precio del punto de cruce en el período reciente para determinar la fuerza de la tendencia. En general, la lógica de la estrategia es clara y las ventajas son obvias, pero también tiene ciertas limitaciones y riesgos. Al introducir más indicadores de juicio auxiliares, establecer medidas razonables de control de riesgos y optimizar los parámetros clave, la estabilidad y rentabilidad de esta estrategia pueden mejorarse aún más.


/*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")

Más.