Basado en la estrategia de impulso relativo


Fecha de creación: 2024-01-29 08:38:04 Última modificación: 2024-01-29 08:38:04
Copiar: 0 Número de Visitas: 722
1
Seguir
1617
Seguidores

Basado en la estrategia de impulso relativo

Descripción general

La estrategia de dinámica relativa, que compara la dinámica de las acciones con la del índice para determinar la fortaleza de las acciones con respecto al mercado mayor, compra cuando la dinámica de las acciones es superior a la del mercado mayor y vende cuando la dinámica de las acciones es inferior a la del mercado mayor para capturar los picos de crecimiento de las acciones.

Principio de estrategia

La estrategia se basa en la comprobación de la fuerza y debilidad de las acciones en relación con el mercado mayor, y la lógica es:

  1. Cálculo de la rentabilidad de una acción en un período de tiempo como el impulso de una acción
  2. Calcula el índice de rentabilidad en el mismo período de tiempo como la dinámica del índice
  3. Calcular el movimiento de una acción y el movimiento del índice
  4. Cuando se usa una media móvil de movimiento del índice en el promedio móvil de movimiento de la cantidad de acciones, se considera que la cantidad de acciones individuales es más fuerte que el índice en su conjunto y se convierte en una señal de compra
  5. Cuando el promedio móvil de movimiento de una acción se cruza por debajo del promedio móvil de movimiento del índice, se considera que la acción individual es más débil que el índice en su conjunto y se convierte en una señal de venta.

Con esta lógica, podemos comprar una acción en un período de crecimiento y venderla cuando el crecimiento se desvanece, para asegurar los beneficios excedentes de su período de crecimiento.

Análisis de las ventajas

La estrategia de dinámica relativa tiene las siguientes ventajas:

  1. Se puede capturar el crecimiento de las acciones de forma dinámica, sin preocuparse por la situación específica, siempre y cuando las acciones crezcan más rápido que el mercado mayor.
  2. Filtra la interferencia de las fluctuaciones a corto plazo mediante el procesamiento de medias móviles, lo que mejora la fiabilidad de la señal
  3. Condiciones de compra y venta simples y directas, fáciles de entender
  4. Parámetros de tiempo de cálculo de la dinámica relativa que se pueden configurar libremente, estrategias de optimización

Análisis de riesgos

La estrategia de dinámica relativa también tiene sus riesgos:

  1. El riesgo de una falta de contención es un posible retroceso tras el pico de crecimiento individual.
  2. El indicador de dinámica relativa puede generar una señal errónea, identificando picos de crecimiento que no son verdaderos picos
  3. Se debe establecer un stop loss para controlar las pérdidas máximas

Estos riesgos pueden ser controlados por métodos como el stop loss razonable y el ajuste adecuado de los parámetros.

Dirección de optimización

Las estrategias de dinámica relativa se pueden optimizar en los siguientes aspectos:

  1. Prueba diferentes parámetros de tiempo de cálculo de la potencia para encontrar el mejor parámetro
  2. Prueba diferentes tipos y longitudes de promedios móviles para encontrar el parámetro óptimo
  3. Se añade un filtro para el indicador de volumen de transacciones para evitar falsos avances de baja capacidad
  4. Tiempo de confirmación de compra en combinación con otros indicadores técnicos

Resumir

La estrategia de dinámica relativa puede obtener beneficios adicionales mediante la captura de los picos de crecimiento de las acciones individuales. La estrategia tiene la ventaja de una lógica de compra y venta simple y clara, fácil de operar, y puede obtener mejores resultados mediante la optimización de parámetros y el control de riesgos.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)