
Esta estrategia diseña un conjunto de estrategias de negociación de reversión de tendencia mediante el cálculo de las diferencias de presión de compra y venta de volúmenes de transacción en diferentes ventanas de tiempo, en combinación con las señales de mercado abierto del indicador MACD. La estrategia utiliza principalmente la oscilación de los volúmenes de transacción como señal para determinar la reversión de la tendencia y se verifica mediante la señal de mercado abierto del MACD, para capturar oportunidades de reversión.
La lógica central de esta estrategia se basa en los siguientes puntos:
Calcula el volumen de transacciones en diferentes ventanas de tiempo (ventas largas y cortas) comprando presiones y vendiendo presiones. Determina la dirección de la tendencia futura a través de la diferencia de presiones de compra y venta.
Utiliza el valor diferencial del MACD (la diferencia entre la línea MACD y la línea de señal) para determinar el estado de vacío. Combina la señal de presión de compra y venta de la cantidad de intercambio para verificar la reversión de la tendencia.
Cuando el volumen de transacción compra la inercia de presión se incrementa y la línea MACD se cruza, se cree que la tendencia de cambio de tendencia puede ser invertida.
Cuando el volumen de transacciones vende la inercia de la presión se amplifica, y la línea MACD se cruza, se cree que la situación puede presentar una inversión de la tendencia por el cambio de aire.
Después de entrar en la señal de inversión, utilice la estrategia de control de riesgo Stop Loss.
La estrategia tiene las siguientes ventajas:
El uso de la diferencia de espacio múltiple en el volumen de transacciones para determinar el punto de inflexión de la tendencia, para evitar que se ignore el papel de la transacción por depender simplemente de indicadores de determinación de tendencias como la línea de uniformidad.
La inversión de la verificación de la señal multivariable combinada con el indicador MACD puede mejorar la precisión del juicio.
El uso de ventanas de tiempo largo y corto para determinar la dirección de los movimientos de la carga hace que la señal de reversión sea más confiable.
La estrategia de contratransformación tiene una rentabilidad media más alta.
La estrategia también tiene los siguientes riesgos:
Tanto el volumen de transacción como la señal MACD pueden emitir señales erróneas, lo que lleva a un riesgo de error de juicio inverso.
El riesgo de que la situación se vuelva a ajustar después de emitir la señal de reversión es que no se pueda revertir directamente.
El riesgo de que los puntos de parada de pérdidas se ajusten incorrectamente puede aumentar las pérdidas.
La tasa de retiro es alta y no es adecuada para los inversores que buscan ingresos estables.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimizar el espacio entre ventanas de tiempo más largas y más cortas para que la inversión sea más precisa.
Optimización de los parámetros MACD para mejorar la precisión de la determinación de los espacios libres.
Optimización de los algoritmos de stop loss para reducir el riesgo de pérdidas.
El objetivo de este proyecto es aumentar el número de indicadores de juicio pasivo y aumentar la tasa de éxito de la reversión.
Añadir módulos de control de posiciones y administración de fondos.
En general, esta estrategia es una estrategia de negociación de algoritmos de inversión de tendencia típica. Se basa principalmente en la amplificación de la exotermia de la transacción y la verificación de la señal MACD para juzgar y capturar la oportunidad de revertir el precio desde el polinomio hacia el polinomio o desde el polinomio hacia el polinomio.
/*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)