Estrategia de cruce de medias móviles

SMA MA
Fecha de creación: 2024-06-03 11:25:43 Última modificación: 2024-06-03 11:25:43
Copiar: 0 Número de Visitas: 643
1
Seguir
1617
Seguidores

Estrategia de cruce de medias móviles

Descripción general

Este artículo presenta una estrategia de comercio cuantitativa basada en el principio de cruce de las medias móviles. La estrategia determina la dirección del polvo al comparar la relación entre el precio y la media móvil, mientras se establece un punto de parada para controlar el riesgo. El código de la estrategia se escribe con Pine Script e integra la API de la plataforma de comercio Dhan, que permite la negociación automatizada de las señales de la estrategia.

Principio de estrategia

El núcleo de la estrategia es el promedio móvil, basado en el cálculo de un promedio móvil simple del precio de cierre en un determinado período como base para juzgar la tendencia. Cuando el precio cruza la línea media, se produce una señal de más y cuando el precio cruza la línea media, se produce una señal de menos. Al mismo tiempo, se utiliza la función extrem para filtrar la señal repetida y continua, mejorando la calidad de la señal. La estrategia establece un precio de parada y pérdida correspondiente en función de la dirección de la posición actual y la relación entre la posición del precio y la línea media, controlando el riesgo y la ganancia de cada operación.

Ventajas estratégicas

El cruce de medias móviles es un método de seguimiento de tendencias sencillo y fácil de usar que capta eficazmente las tendencias a medio y largo plazo del mercado. Mediante la configuración razonable de los parámetros, la estrategia puede obtener ganancias estables en situaciones de tendencia. La configuración de stop loss es favorable para controlar el retroceso y mejorar la proporción de riesgo-beneficio.

Riesgo estratégico

Los promedios móviles son, en esencia, un indicador de retraso, y cuando el mercado gira, la señal puede ser retrasada, lo que puede provocar la pérdida de la mejor hora de negociación o generar una señal falsa. La configuración inadecuada de los parámetros puede afectar el rendimiento de la estrategia y debe optimizarse según las diferentes características y períodos del mercado.

Dirección de optimización de la estrategia

  1. Se puede intentar usar varias combinaciones de líneas medias de diferentes períodos para mejorar la fiabilidad de la señal, como líneas medias dobles, líneas medias cruzadas de tres líneas, etc.
  2. La configuración del stop loss se puede optimizar aún más, como el ajuste dinámico de los indicadores de volatilidad como el ATR o la adopción de estrategias de seguimiento de stop loss.
  3. Se pueden agregar más condiciones de filtración, como la ruptura del precio de la resistencia de soporte importante, cambios en el volumen de transacción, etc., para mejorar la calidad de la señal.
  4. En aplicaciones físicas, se requiere una buena estrategia de verificación de retroalimentación y administración de fondos, control de riesgos de transacciones individuales y retiros generales.

Resumir

La estrategia de cruce de la media móvil es una estrategia de comercio cuantitativa simple y práctica, que puede beneficiarse de la tendencia mediante el seguimiento de la tendencia y el control de la parada de pérdidas. Sin embargo, la estrategia en sí tiene ciertas limitaciones, que requieren optimización y mejora según las características del mercado y las preferencias de riesgo. En la aplicación práctica, también se debe tener en cuenta la estricta aplicación de la disciplina y el control del riesgo.

Código Fuente de la Estrategia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg)