La inversión de tendencia con la estrategia de negociación de volatilidad intrabarro

El autor:¿ Qué pasa?, Fecha: 2024-02-26 17:15:54
Las etiquetas:

img

Resumen general

Esta estrategia calcula las diferencias de presión de compra y venta en el volumen de transacciones en diferentes ventanas de tiempo, combinadas con las señales MACD, para diseñar una estrategia de inversión de tendencia.

Principios de estrategia

La lógica central de esta estrategia se basa en los siguientes puntos:

  1. Calcular la presión de compra y la presión de venta del volumen de transacciones en diferentes ventanas de tiempo (ventanas cortas y largas).

  2. Utilice el valor de diferencia del MACD (la diferencia entre la línea MACD y la línea de señal) para determinar el estado largo y corto. Combine con las señales de presión de compra y venta en el volumen de transacciones para verificar las reversiones de tendencia.

  3. Cuando la anomalía de presión de compra del volumen de transacciones se amplifica y la línea MACD se cruza, se determina que el mercado puede tener una inversión de tendencia de vender a comprar.

  4. Cuando la anomalía de presión de venta del volumen de transacciones se amplifica y la línea MACD se cruza, se determina que el mercado puede tener una inversión de tendencia de compra a venta.

  5. Después de ingresar la señal de inversión, utilice estrategias de toma de ganancias y stop loss para controlar los riesgos.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El uso de las diferencias largas/cortas en el volumen de transacciones para determinar los puntos de inversión de tendencia evita depender únicamente de indicadores de determinación de tendencia como las medias móviles, mientras se descuida el papel del volumen de transacciones.

  2. La combinación de señales MACD para verificar las reversiones puede mejorar la precisión del juicio.

  3. El uso de ventanas de tiempo largas y cortas para determinar anomalías en el volumen de transacciones hace que las señales de reversión sean más confiables.

  4. Las estrategias de reversión tienden a tener tasas de ganancia promedio más altas.

Análisis de riesgos

Los riesgos de esta estrategia incluyen:

  1. El volumen de transacciones y las señales MACD pueden dar señales falsas, lo que conduce a juicios erróneos sobre las reversiones.

  2. Después de que se activen las señales de reversión, el mercado puede ajustarse nuevamente y no revertir directamente inmediatamente.

  3. La configuración incorrecta de las operaciones de toma de ganancias y parada de pérdidas puede dar lugar a pérdidas mayores.

  4. Los retiros más elevados no son adecuados para los inversores que buscan rendimientos estables.

Direcciones de optimización

Las optimizaciones para esta estrategia incluyen:

  1. Optimizar las ventanas de tiempo largas y cortas para hacer más precisos los juicios de inversión.

  2. Optimizar los parámetros del MACD para mejorar la precisión de largo/corto.

  3. Optimizar los algoritmos de toma de ganancias y stop loss para reducir los riesgos de pérdida.

  4. Añadir más indicadores de juicio de anomalías para mejorar la tasa de éxito de reversión.

  5. Añadir módulos de tamaño de posición y gestión de dinero.

Conclusión

En resumen, esta es una estrategia de trading algorítmica típica de inversión de tendencia. Se basa principalmente en amplificaciones en anomalías de volumen de transacciones y verificaciones de señales MACD para determinar y capturar inversiones de precios de posiciones largas a cortas o viceversa. La estrategia tiene las ventajas de alta precisión y buenos rendimientos, pero también tiene ciertos riesgos.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 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)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

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

getLookBackSlope(lookBack) => signal - signal[lookBack]
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
    float s = 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 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

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

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

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

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

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 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 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long, qty=10)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

Más.