
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.
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.
El cruce de dos líneas equidistantes causa problemas de whipsaw
El volumen de transacciones no puede filtrar completamente las brechas falsas
No se puede determinar la profundidad y la intensidad de los ajustes de subsección
Modelos de aprendizaje automático en lugar de juicio por reglas
Aumentar las habilidades para detener los daños
La combinación de los indicadores de sentimiento y el análisis de la página de noticias
Trasplantes a otras variedades y mercados
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.
/*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)