Estrategia de predicción de la trayectoria futura de MacD

El autor:¿ Qué pasa?, Fecha: 2023-12-13 17:21:44
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es predecir las tendencias de precios mediante el análisis de la tendencia futura del indicador MacD. La estrategia aprovecha al máximo las señales comerciales generadas por los cruces de los promedios móviles rápidos y lentos que componen el indicador MacD.

Principio de la estrategia

  1. Calcular la diferencia (valor histórico) del indicador MacD para determinar el aumento y la disminución de la línea MacD y la línea de señal.
  2. Utilice el valor futuro del indicador MacD en un plazo de 4 horas estableciendo opciones de compra para juzgar la tendencia futura del indicador MacD y predecir las tendencias de precios.
  3. Ir largo cuando la diferencia del indicador MacD sea mayor de 0 (que representa un mercado alcista) y se espera que continúe subiendo; ir corto cuando la diferencia del indicador MacD sea menor de 0 (que representa un mercado bajista) y se espera que continúe bajando.
  4. La estrategia combina los estilos de negociación de seguimiento de tendencia e inversión de tendencia, capturando tendencias y también aprovechando los puntos de inversión de tendencia.

Análisis de ventajas

  1. La ventaja de utilizar el indicador MacD para juzgar las tendencias del mercado es que puede filtrar eficazmente las consolidaciones y capturar las tendencias a largo plazo.
  2. Con la ayuda de las predicciones de las tendencias futuras del indicador MacD, los puntos de inflexión en los precios pueden identificarse con anticipación para mejorar la capacidad prospectiva de la estrategia.
  3. La integración de los estilos de negociación de seguimiento de tendencias y inversión de tendencias permite la inversión oportuna de la posición durante el seguimiento de tendencias para obtener mayores rendimientos.
  4. Los parámetros de estrategia ajustables permiten a los usuarios optimizar en función de diferentes plazos y entornos de mercado para mejorar la estabilidad de la estrategia.

Análisis de riesgos

  1. El hecho de confiar en las predicciones de la tendencia futura del indicador MacD puede llevar a operaciones fallidas si las predicciones son inexactas.
  2. La configuración incorrecta del intervalo de pérdida de parada también afectará el rendimiento de la estrategia.
  3. El retraso del indicador MacD puede hacer que se pierdan oportunidades para una rápida reversión de los precios.
  4. El impacto de los costes de transacción debe ser monitoreado.

Direcciones de optimización

  1. Incorporar otros indicadores para la predicción para reducir la dependencia de un único indicador MacD y mejorar la precisión de la predicción, como el examen de los cambios en el volumen de operaciones.
  2. Añadir algoritmos de aprendizaje automático, entrenar modelos para predecir las tendencias futuras del indicador MacD.
  3. Optimice la configuración de parámetros para encontrar las mejores combinaciones de parámetros.
  4. Diferentes entornos de mercado se adaptan a diferentes configuraciones de parámetros, se puede agregar un sistema adaptativo para optimizar automáticamente los parámetros.

Conclusión

Al tiempo que da pleno juego a la ventaja del indicador MacD de determinar tendencias, esta estrategia también incorpora predicciones de las tendencias futuras del indicador. Basándose en la captura de tendencias, también aprovecha los puntos críticos de inflexión. En comparación con simplemente perseguir tendencias, esta estrategia tiene una mayor previsión y potencial de ganancia. Por supuesto, también hay ciertos riesgos que necesitan mayor optimización y mejora. En general, la estrategia merece una investigación y aplicación en profundidad.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Más.