En la carga de los recursos... Cargando...

El autor:¿ Qué pasa?, Fecha: 2024-01-23 11:22:02
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación automatizada basada en el doble cruce de la media móvil del indicador técnico MACD. Utiliza el cruce de la línea de señal del MACD para determinar la dirección de la tendencia para seguir la tendencia.

Estrategia lógica

La estrategia utiliza esta lógica para ir largo en cruces de oro y posición cerrada en cruces de muerte; o ir corto en cruces de muerte y posición cerrada en cruces de oro para seguir automáticamente la tendencia.

Ventajas de la estrategia

  • Utiliza el cruce de la media móvil doble para determinar la dirección de la tendencia con precisión y capturar la inversión de la tendencia
  • El indicador técnico MACD reduce las señales falsas y mejora la calidad de las señales
  • Flexibilidad para ir largo o corto o sólo largo/corto
  • Los parámetros ajustables se adaptan a los diferentes entornos del mercado

Riesgos de la estrategia

  • El cruce de la media móvil doble tiene un efecto de retraso, puede perder ganancias parciales al comienzo de las reversiones
  • Indicador MACD propenso a señales falsas durante la consolidación del mercado
  • Los parámetros deben ajustarse adecuadamente para evitar ser demasiado sensibles o inertes

Mitigación de riesgos:

  • Combinar con otros indicadores para filtrar las señales
  • Ajuste de los parámetros a una frecuencia de negociación más baja
  • Sólo adoptar la estrategia cuando la tendencia es evidente

Áreas de mejora

La estrategia puede mejorarse en los siguientes aspectos:

  1. Incorporar otros indicadores como KDJ, bandas de Bollinger, etc. para confirmar las señales y filtrar las señales falsas

  2. Mejorar el mecanismo de entrada, por ejemplo, añadir un filtro de escape para evitar entradas prematuras o tardías

  3. Optimizar la configuración de parámetros, ajustar los períodos de línea rápida y lenta en función de diferentes plazos y regímenes de mercado

  4. Añadir stop loss para controlar la pérdida de una sola operación

Resumen de las actividades


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Más.