Estrategia de reversión de cruce por cero de MACD de períodos múltiples


Fecha de creación: 2024-02-18 15:27:21 Última modificación: 2024-02-18 15:27:21
Copiar: 0 Número de Visitas: 548
1
Seguir
1617
Seguidores

Estrategia de reversión de cruce por cero de MACD de períodos múltiples

Descripción general

La estrategia de reversión cruzada de la MACD de cero eje en períodos múltiples, mediante el cálculo de los indicadores MACD de diferentes períodos, la identificación de señales de posible reversión de los precios, el uso de un método de seguimiento de la tendencia para detener los pérdidas y la búsqueda de una mayor eficiencia en la utilización de los fondos.

Principio de estrategia

La estrategia calcula simultáneamente el promedio móvil SMA de 3 y 10 períodos, construye una línea rápida y lenta, y calcula el indicador MACD y la línea de señal. Cuando la línea rápida y la línea de señal se cruzan hacia arriba o hacia abajo, el eje cero indica que el precio ha alcanzado un punto crítico y es posible que se produzca una reversión.

En concreto, la estrategia determina la reversión de los precios de la siguiente manera:

  1. El cruce del eje cero del MACD indica que el precio ha llegado a un punto crítico
  2. La presión de compra y venta de la cantidad de transacciones para juzgar la situación de vacío
  3. El indicador RSI muestra una tendencia bajista, combinada con cambios en la pendiente MACD, para determinar la intensidad de la señal de reversión
  4. Las líneas rápidas y las líneas de señal se cruzan en sentido inverso, formando una señal de giro

Cuando las señales de inversión son más confiables, la estrategia adopta la forma de seguimiento de tendencias para detener la entrada y buscar mayores ganancias.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Los resultados de los análisis de múltiples indicadores hacen que las señales de reversión sean más confiables.
  2. El punto de reversión se determina con una precisión superior mediante el cruce de eje cero MACD
  3. Indicadores de RSI y juzgamiento auxiliar de volumen de transacciones, alta fiabilidad
  4. Seguimiento de tendencias para detener pérdidas y buscar una mayor eficiencia en el uso de los fondos

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Los indicadores MACD son más propensos a emitir señales falsas y son más fáciles de atrapar
  2. La probabilidad de que el stop loss sea roto en el proceso de intercambio multiespacial es mayor.
  3. La configuración inadecuada de los parámetros puede conducir a operaciones demasiado frecuentes, aumentando los costos de las operaciones y la pérdida de puntos de deslizamiento.

El riesgo se puede reducir de la siguiente manera:

  1. Relajación adecuada del margen de pérdidas para evitar que se bloquee
  2. Optimización de parámetros, reducción de la frecuencia de las operaciones
  3. Considere la entrada solo cerca de los puntos de resistencia de soporte clave

Dirección de optimización

La estrategia también puede ser mejorada en otras áreas, como:

  1. Aumentar los algoritmos de aprendizaje automático para ayudar a determinar la fiabilidad de las señales de retorno
  2. Aumentar los indicadores emocionales para juzgar la superficie mental vacía
  3. Combinado con puntos de resistencia de soporte clave, mejora la precisión de entrada
  4. Optimización de los métodos de detención de pérdidas para mejorar aún más la eficiencia de la utilización de los fondos
  5. Prueba de la combinación óptima de parámetros para reducir la frecuencia de las transacciones

Resumir

La estrategia de reversión cruzada del eje cero de MACD de período múltiple, que considera integralmente la información de varias dimensiones, como el precio, el volumen de transacción y los indicadores de fluctuación, determina el momento de reversión mediante el juicio de varios indicadores, y el cierre oportuno después de que el beneficio sea suficiente para obtener mejores ganancias en el caso de reversión. Se espera que la estrategia se mejore aún más a través de aprendizaje automático y optimización de posiciones clave para reducir la frecuencia y el riesgo de las transacciones y aumentar el espacio para obtener ganancias.

Código Fuente de la Estrategia
/*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)