Estrategia de reversión del perfil del cilillador basada en el cruce cero del MACD de varios plazos

El autor:¿ Qué pasa?, Fecha: 2024-02-18 15:27:21
Las etiquetas:

img

Resumen general

La estrategia de inversión del perfil del oscilador 3 10.0 identifica posibles inversiones de precios mediante el cálculo de indicadores MACD en diferentes plazos de tiempo.

Estrategia lógica

La estrategia calcula los promedios móviles SMA de 3 y 10 períodos para construir líneas rápidas y lentas y el indicador MACD y la línea de señal. Cuando la línea rápida y la línea de señal cruzan la línea cero hacia arriba o hacia abajo, indica que el precio ha alcanzado un punto crítico y que puede ocurrir una reversión. Además, también incorpora el juicio de presión de volumen, el índice RSI, etc. para identificar la confiabilidad de las señales de reversión.

Específicamente, la estrategia juzga las inversiones de precios a través de:

  1. El cruce de cero del MACD indica que el precio alcanza el punto crítico
  2. La presión de volumen determina el sentimiento alcista o bajista
  3. El índice RSI con cambio de pendiente MACD determina la fuerza de las señales de reversión
  4. La línea rápida y la línea de señal que cruzan en dirección inversa forman una señal de inversión

Cuando la fiabilidad de la señal de inversión es alta, la estrategia adopta un stop loss de tendencia para obtener mayores beneficios.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Los indicadores múltiples hacen más fiables las señales de reversión
  2. El cruce de cero del MACD localiza con precisión los puntos de inversión
  3. El RSI y el volumen ayudan al juicio para mejorar la confiabilidad
  4. El seguimiento de la tendencia a la suspensión de pérdidas mejora la eficiencia del capital

Análisis de riesgos

También hay algunos riesgos:

  1. Alta probabilidad de señales falsas del MACD y de quedar atrapado
  2. La probabilidad de que se produzca un stop loss durante las tendencias alternas es alta.
  3. La configuración incorrecta de los parámetros puede aumentar la frecuencia y el coste de las operaciones

Los riesgos pueden reducirse mediante:

  1. Permitir una pérdida de parada más amplia para evitar quedar atrapado
  2. Optimizar los parámetros para reducir la frecuencia de negociación
  3. Solo considere la entrada cerca de los niveles clave de soporte/resistencia

Direcciones de optimización

La estrategia se puede optimizar aún más mediante:

  1. Añadir algoritmos de aprendizaje automático para ayudar a la confiabilidad de la señal de inversión
  2. Añadir índices de sentimiento para determinar la mentalidad toro/oso
  3. Combinar los niveles clave de soporte/resistencia para mejorar la precisión de entrada
  4. Optimizar el stop loss para una mayor eficiencia de capital
  5. Prueba de combinaciones óptimas de parámetros para reducir la frecuencia de negociación

Conclusión

La estrategia de reversión de cruce cero del MACD de múltiples plazos considera de manera integral los indicadores de precio, volumen y volatilidad para determinar el momento de entrada a través de la evaluación de múltiples indicadores. Establece un stop loss oportuno sobre una rentabilidad suficiente. Puede lograr buenos rendimientos durante los mercados de reversión.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10.0)
takeProfit = input( title="Take Profit", defval=0.8)
stopLoss = input( title="Stop Loss", defval=0.75)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

Más.