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.
La lógica central de esta estrategia se basa en los siguientes puntos:
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).
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.
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.
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.
Después de ingresar la señal de inversión, utilice estrategias de toma de ganancias y stop loss para controlar los riesgos.
Las ventajas de esta estrategia incluyen:
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.
La combinación de señales MACD para verificar las reversiones puede mejorar la precisión del juicio.
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.
Las estrategias de reversión tienden a tener tasas de ganancia promedio más altas.
Los riesgos de esta estrategia incluyen:
El volumen de transacciones y las señales MACD pueden dar señales falsas, lo que conduce a juicios erróneos sobre las reversiones.
Después de que se activen las señales de reversión, el mercado puede ajustarse nuevamente y no revertir directamente inmediatamente.
La configuración incorrecta de las operaciones de toma de ganancias y parada de pérdidas puede dar lugar a pérdidas mayores.
Los retiros más elevados no son adecuados para los inversores que buscan rendimientos estables.
Las optimizaciones para esta estrategia incluyen:
Optimizar las ventanas de tiempo largas y cortas para hacer más precisos los juicios de inversión.
Optimizar los parámetros del MACD para mejorar la precisión de largo/corto.
Optimizar los algoritmos de toma de ganancias y stop loss para reducir los riesgos de pérdida.
Añadir más indicadores de juicio de anomalías para mejorar la tasa de éxito de reversión.
Añadir módulos de tamaño de posición y gestión de dinero.
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)