Estrategia de toma de ganancias dinámica con media móvil


Fecha de creación: 2023-09-18 21:46:47 Última modificación: 2023-09-18 21:46:47
Copiar: 3 Número de Visitas: 606
1
Seguir
1617
Seguidores

Descripción general

La estrategia se basa en las medias móviles para determinar la dirección de la tendencia, con una proporción de ATR para detener y combinar con el ATR para ajustar dinámicamente la posición. El objetivo es seguir la tendencia para obtener ganancias, mientras se controla el riesgo.

El principio

La estrategia utiliza un promedio móvil simple de longitud N para determinar la dirección de la tendencia. Hacer más cuando se usa un SMA largo en un SMA corto; hacer un espacio cuando se usa un SMA largo en un SMA corto.

Después de la entrada, la estrategia toma un determinado múltiplo de ATR como punto de parada, si la posición larga se detiene en el precio de entrada + ATR * Factor. Cuando el precio supera el punto de parada, el punto de parada sale del juego.

Además, la estrategia ajusta las posiciones con la magnitud del ATR. El tamaño del ATR representa la volatilidad del mercado, y el tamaño de la posición es inversamente proporcional al ATR.

Las ventajas

  1. El uso de medias móviles para determinar la dirección de la tendencia tiene cierta capacidad de seguimiento de la tendencia.

  2. El método ATR de frenado es rentable y evita la inversión.

  3. La posición dinámica se ajusta para controlar el riesgo según la volatilidad del mercado.

  4. Los parámetros de paradas y posiciones se pueden personalizar.

  5. La combinación de stop loss puede limitar aún más el riesgo.

Riesgos y soluciones

  1. Las medias móviles están rezagadas, lo que puede causar retrasos en la admisión. Se pueden probar parámetros más sensibles.

  2. Los cambios en el tamaño del ATR pueden causar que el parón sea demasiado pequeño o demasiado grande. Se puede agregar la línea media del ATR para extraer su tendencia.

  3. Si la fluctuación es demasiado grande, la posición puede tener un impacto demasiado pequeño en los beneficios. Se puede establecer un límite inferior de la posición.

  4. El riesgo de que el stop loss no esté configurado conlleve un aumento de las pérdidas. Se puede agregar una estrategia de stop loss móvil.

  5. La estrategia puede no ser eficaz si se elige un indicador inadecuado, como un activo de baja volatilidad. Se debe elegir un indicador con mayor volatilidad.

Optimización de las ideas

  1. Prueba diferentes combinaciones de parámetros para encontrar el mejor.

  2. Optimización de la lógica de apertura de la posición, como la inclusión de filtros de otros indicadores.

  3. Investigar estrategias de detención y pérdida dinámica para que la detención y la pérdida sean más flexibles.

  4. La gestión de posiciones en combinación con el índice de volatilidad.

  5. El proceso de reingreso se extenderá hasta el 31 de diciembre.

Resumir

La estrategia utiliza una media móvil para juzgar la tendencia, detenerse en la proporción de ATR y ajustar dinámicamente la posición. La ventaja es que tiene cierta capacidad de seguimiento de tendencias y puede controlar el riesgo mediante el ajuste de parámetros.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
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/
// © dongyun

//@version=4
strategy("利润目标止损的移动平均线", overlay=true)

period = input(80,'')
ptper = input(252,'')
ptfactor = input(12,'')
sizeper = input(20, '')

trend = 0.0
signal = 0
size = 1.0
investment = 100000
atrange = 0.0
ptrange = 0.0
stoph = 0.0
stopl = 0.0


if sizeper != 0
	atrange := atr(sizeper)

if atrange == 0 or sizeper == 0 
	size := 1
else
	size := investment/atrange * 0.1

trend := sma(close,period)


if signal != 1 and nz(trend[1]) < nz(trend[2]) and trend > nz(trend[1])
	strategy.entry('long',strategy.long, comment='open_long')
	signal := 1
else
    signal := nz(signal[1])
    
if signal != -1 and nz(trend[1]) > nz(trend[2]) and trend < nz(trend[1])
	strategy.entry('short',strategy.short, comment='open_short')
	signal := -1
else
    if signal == 0
        signal := nz(signal[1])

ptrange := atr(ptper)

if strategy.position_size > 0
	strategy.exit("exit_long", "long", qty = strategy.position_size, limit = close + ptfactor*ptrange , comment='trail_long') 
else
	if strategy.position_size < 0
		strategy.exit("exit_short", "short", qty = abs(strategy.position_size), limit = close - ptfactor*ptrange, comment='trail_short')