Estrategia de ruptura de precios de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-11-21 15:33:52
Las etiquetas:

img

Resumen general

Esta estrategia utiliza dos promedios móviles para determinar las tendencias de los precios y los avances. Ir corto cuando el precio rompe el rieles superior y ir largo cuando el precio rompe el rieles inferior. Establecer salidas de stop loss para controlar los riesgos.

Principios

  1. Utilice la función sma() para calcular dos promedios móviles a corto y largo plazo como los rieles superior e inferior de la estrategia de negociación.
  2. Calcular el precio de compra y el precio de venta: el precio de compra es el carril inferior multiplicado por un coeficiente menor que 1, y el precio de venta es el carril superior multiplicado por un coeficiente mayor que 1.
  3. Cuando el precio rompa el rieles superior, abra una posición corta con una orden de mercado; cuando el precio rompe el rieles inferior, abra una posición larga con una orden de límite.
  4. Establecer el rango de año, mes y fecha para controlar el ciclo de negociación de la estrategia.
  5. Cierre todas las posiciones cuando finalice la prueba de retroceso o exceda el intervalo de fechas.

Ventajas

Esta estrategia tiene las siguientes ventajas:

  1. El uso de un sistema de doble carril puede filtrar el ruido del mercado e identificar tendencias.
  2. Usar el avance del precio para determinar el momento de entrada puede reducir las señales falsas.
  3. El uso de órdenes límite reduce los costos de impacto en el mercado.
  4. El ciclo de negociación se puede ajustar fácilmente para controlar los riesgos de la estrategia.

Los riesgos

Esta estrategia también tiene algunos riesgos:

  1. Los avances en el doble carril pueden llevar fácilmente a riesgos de pérdida continua.
  2. Cuando el objetivo de negociación entra en consolidación, existe el riesgo de demasiadas transacciones.
  3. Las órdenes de límite pueden perder algunas oportunidades de compra.

Optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Prueba diferentes combinaciones de medias móviles para encontrar los mejores parámetros.
  2. Aumentar el indicador de volúmenes para determinar los avances en el volumen de transacciones.
  3. Mecanismo de stop loss adaptativo para ajustar el precio de stop loss en tiempo real.
  4. Aumentar los modelos de aprendizaje automático para determinar la dirección de la tendencia.

Resumen de las actividades

La idea general de esta estrategia es clara y fácil de entender. Al usar el sistema de doble carril para identificar tendencias y usar avances de precios para determinar el momento de entrada, puede filtrar el ruido y lograr ganancias estables. También hay margen de mejora y optimización. En general, es una estrategia comercial cuantitativa reproducible con valor práctico.


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

Más.