Basado en la estrategia de seguimiento de inversión de doble media móvil


Fecha de creación: 2024-02-20 17:08:43 Última modificación: 2024-02-20 17:08:43
Copiar: 1 Número de Visitas: 527
1
Seguir
1617
Seguidores

Basado en la estrategia de seguimiento de inversión de doble media móvil

Descripción general

La estrategia de seguimiento de inversiones de doble promedio es una estrategia de negociación cuantitativa que utiliza el cruce de promedios móviles como señal de negociación. La estrategia combina el diferencial de la media lenta y rápida del indicador MACD y su línea de señal, junto con la determinación de la proporción de la cantidad de transacciones, para formar una señal de negociación para capturar oportunidades de inversiones en el mercado.

Principio de estrategia

Esta estrategia determina principalmente la relación entre la línea rápida y la línea lenta, generando una señal de pluralidad cuando la línea rápida atraviesa la línea lenta y una señal de vacío cuando la línea lenta atraviesa la línea rápida. Además, se combina el estado de pluralidad de la diferencia MACD, la relación entre la diferencia y la línea de señal, la pluralidad de la cantidad de transacciones y otros para determinar el estado de pluralidad del mercado.

En concreto, la estrategia determina el tamaño y la dirección de la diferencia MACD, el cruce de la diferencia y la línea de señal, la coincidencia o la oposición de la diferencia y la dirección de la línea de señal, etc. Estas situaciones reflejan la característica de rebote de subida y bajada del mercado. Además, la distribución de la cantidad de transacciones en el aire puede servir como un indicador auxiliar de juicio.

Cuando se determina que el diferencial y la línea de señal muestran una señal de reversión del mercado, y el volumen de transacciones corresponde a la confirmación de la reversión del mercado, se genera una estrategia de negociación.

Ventajas estratégicas

  • La teoría de los reptiles se ha consolidado con el uso de la cruz de doble equilátero para determinar el punto de inflexión del mercado
  • La combinación de los juzgamientos de tráfico para evitar falsas brechas
  • Indicador MACD para juzgar la situación de la subsección y identificar las características de rebote
  • Parametros Flexibilidad en las políticas de control parcial

Riesgos y soluciones

  • El cruce de dos líneas equidistantes causa problemas de whipsaw

    • Ajuste el parámetro de la línea media y aumente Threshold
  • El volumen de transacciones no puede filtrar completamente las brechas falsas

    • Combinación de indicadores secundarios como OBV para determinar la verdadera tendencia en el volumen de transacciones
  • No se puede determinar la profundidad y la intensidad de los ajustes de subsección

    • Aumentar el stop loss y evaluar los soportes importantes

Dirección de optimización

  • Modelos de aprendizaje automático en lugar de juicio por reglas

    • Mejorar la robustez de las estrategias y reducir la sobreadaptación
  • Aumentar las habilidades para detener los daños

    • Bloquear parte de las ganancias y reducir el riesgo
  • La combinación de los indicadores de sentimiento y el análisis de la página de noticias

    • Mejorar la precisión de los modelos
  • Trasplantes a otras variedades y mercados

    • Prueba de la escalabilidad de la estrategia

Resumir

La estrategia de seguimiento de inversión de doble línea de equilibrio tiene en cuenta los indicadores de línea de equilibrio, los indicadores MACD y los indicadores de volumen de transacción, y se establece una posición de tensión mediante la captura de su señal de inversión y la selección de un punto de inflexión adecuado. El espacio para la optimización de la estrategia es grande, y se puede mejorar aún más la estabilidad y la rentabilidad de la estrategia mediante el aprendizaje automático y los métodos de control de ventos.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

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)

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(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, 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)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)

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