Estrategia de trading cuantitativo basada en medias móviles


Fecha de creación: 2024-01-26 16:29:23 Última modificación: 2024-01-26 16:29:23
Copiar: 0 Número de Visitas: 555
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo basada en medias móviles

Descripción general

La estrategia de cruce de medias móviles es una estrategia de negociación cuantitativa basada en medias móviles. La estrategia genera ganancias al calcular el precio promedio de los valores durante un período de tiempo y aprovechar las cruces de medias móviles de los precios para generar señales de negociación.

Principio de estrategia

La estrategia utiliza principalmente el cruce de las medias móviles rápidas y las medias móviles lentas para determinar la tendencia de los precios y generar señales de negociación. En concreto, se utiliza una media móvil de dos longitudes de período diferentes, como la línea de 10 días y la línea de 20 días.

Cuando el promedio móvil rápido rompe el promedio móvil lento desde la dirección inferior, se considera que el movimiento se ha convertido de baja a baja, produciendo una señal de compra. Cuando el promedio móvil rápido cae desde la dirección superior y rompe el promedio móvil lento, se considera que el movimiento se ha convertido de baja a baja, produciendo una señal de venta.

Al capturar los puntos de inflexión de las tendencias de los precios, la estrategia permite comprar cuando las cosas van bien y vender cuando las cosas van mal, para obtener ganancias.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El concepto es simple, fácil de entender y de implementar.
  2. Parámetros de gran personalización, como la posibilidad de ajustar el ciclo de las medias móviles
  3. El efecto de retroalimentación es mejor, especialmente para situaciones de tendencia
  4. Se puede integrar en la lógica de stop loss para controlar el riesgo

Análisis de riesgos

La estrategia también tiene los siguientes riesgos:

  1. Es fácil generar señales erróneas y exceso de transacciones en el balance.
  2. Los parámetros deben ser desactivados, y las combinaciones de parámetros pueden variar mucho en la respuesta.
  3. Sin tener en cuenta los costos de transacción y los puntos de deslizamiento, la efectividad del disco duro podría ser menor que la de la medición.
  4. El retraso en el tiempo podría perder la oportunidad de una rápida reversión de los precios.

Estos riesgos se pueden mitigar mediante la optimización adecuada.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. En combinación con otras señales de filtro de indicadores, como indicadores de energía, indicadores de vibración, etc., para evitar operaciones erróneas en la consolidación
  2. Adición de promedios móviles adaptativos para permitir cambios dinámicos en los parámetros periódicos y un mejor seguimiento de los precios
  3. Optimización de los parámetros periódicos de las medias móviles para encontrar la mejor combinación de parámetros
  4. Establecer condiciones de reingreso para evitar el comercio frecuente
  5. Tener en cuenta los costos reales de transacción y los puntos de deslizamiento, y ajustar el punto de parada

Con estas optimizaciones, se puede mejorar considerablemente la efectividad de la estrategia en el disco.

Resumir

La estrategia de cruce de media móvil es una estrategia de comercio cuantitativa que es fácil de dominar e implementar en general. Utiliza el principio de cruce de la media de precios para juzgar de manera simple e intuitiva el movimiento del mercado y generar señales de comercio.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1)
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)
    
if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)