Estrategia de ruptura de precios de media móvil dual


Fecha de creación: 2023-11-21 15:33:52 Última modificación: 2023-11-21 15:33:52
Copiar: 1 Número de Visitas: 601
1
Seguir
1617
Seguidores

Estrategia de ruptura de precios de media móvil dual

Descripción general

Esta estrategia utiliza dos medias móviles para determinar la tendencia y la ruptura de los precios. Haga vacío cuando el precio sube a la trayectoria, y haga más cuando el precio baja a la trayectoria, y establezca un stop loss exit para controlar el riesgo.

Principio de estrategia

  1. Utiliza la función sma() para calcular dos promedios móviles a corto y largo plazo, respectivamente, como trayectoria ascendente y descendente de la estrategia de negociación.
  2. Calcula el precio de compra y el precio de venta: el precio de compra es el precio de baja por un factor menor a 1 y el precio de venta es el precio de alta por un factor mayor a 1
  3. Cuando el precio sube a la vía, abre una posición vacía al precio de mercado; cuando el precio baja a la vía, abre una posición adicional al precio de límite.
  4. Establezca un rango de año, mes y fecha para controlar el ciclo de operaciones de la estrategia.
  5. Cuando el retorno finalice o se salga del rango de fechas, se liquidarán todas las posiciones.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de un sistema de doble vía para filtrar el ruido del mercado y identificar tendencias.
  2. El uso de breakouts de precios para determinar el momento de entrada puede reducir las señales falsas.
  3. El uso de un listado de precios límite reduce el costo de los impactos en el mercado.
  4. La estrategia permite ajustar fácilmente el ciclo de negociación y controlar el riesgo.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Las rupturas de doble vía pueden generar pérdidas continuas. Se puede configurar un Exit de pérdidas para controlar las pérdidas.
  2. Cuando el índice de negociación entra en liquidación, es fácil generar el riesgo de demasiadas transacciones. Se puede relajar adecuadamente el espacio entre las vías ascendentes y descendentes.
  3. El precio limitado puede hacer que se pierda parte de la oportunidad de comprar. Se puede considerar cambiar al precio de mercado.

Dirección de optimización

Esta estrategia puede ser optimizada en los siguientes aspectos:

  1. Prueba combinaciones de promedios móviles de diferentes longitudes para encontrar el mejor parámetro.
  2. Aumentar el índice de Volumes para juzgar la brecha en el volumen de transacciones.
  3. Aumentar el mecanismo de suspensión de pérdidas adaptativo y ajustar el precio de suspensión en tiempo real.
  4. Añadir modelos de aprendizaje automático para determinar la dirección de las tendencias.

Resumir

La idea general de esta estrategia es clara y fácil de entender, a través de un sistema de dos vías para identificar tendencias, determinar el momento de entrada de los precios, filtrar el ruido para obtener ganancias estables, y también hay espacio para mejorar y optimizar. En general, es una estrategia de comercio cuantitativa reproducible con valor de batalla real.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()