
La estrategia utiliza un promedio móvil rápido de 3 días, un promedio móvil lento de 10 días y un promedio móvil suave de 16 días para construir el indicador MACD, complementado con el indicador RSI y la característica de volumen de transacción, para establecer una característica de línea K multidimensional, para juzgar que la situación está excesivamente cerrada y forma una tendencia de oscilación intermedia para invertir las entradas en beneficio.
El código utiliza principalmente el promedio móvil rápido de 3 días menos el promedio móvil lento de 10 días para formar el indicador MACD, el tratamiento suave de la línea de señal de 16 días para formar la estrategia MACD estándar. Al mismo tiempo, combina el análisis de la transacción de compra y venta para determinar el valor de compra y venta. También introduce el indicador RSI para determinar la sobrecompra y la sobreventa.
En concreto, observando la relación entre la línea MACD y la línea de señal, los cambios en la inclinación, para juzgar la disminución de la fuerza de la carencia y buscar oportunidades de reversión. Al mismo tiempo, los cambios en el volumen de transacciones también reflejan la disminución de la fuerza de la carencia. Combinando los cambios en el indicador RSI para juzgar el fenómeno de sobreventa y sobreventa, combinando estos indicadores, podemos juzgar las características locales de la situación y el momento en que puede ocurrir una reversión.
La estrategia tiene tres señales de entrada:
Hacer más cuando el volumen de transacción no tiene una ventaja de volumen de compra, el RSI está por debajo de 41 y sube, y la señal MACD no se desvía claramente;
Cuando el volumen de transacción tiene ventaja sobre el volumen de compra, el RSI está entre 45-55 y sube, y el MACD y la línea de señales están al mismo nivel;
Cuando el MACD está por encima del umbral establecido y en alza, deje de lado.
Estas tres situaciones reflejan la agitación regional y la expansión excesiva en una sola dirección en el corto plazo, por lo que se consideran buenos momentos para revertir y tomar medidas de reversión.
Exit se configura como un modo de parada y parada de pérdidas, para retirar el control y obtener ganancias.
La estrategia combina una variedad de indicadores para determinar el intervalo de oscilación y el fenómeno de sobreventa y sobreventa, para invertir la idea de obtener ganancias con claridad. El análisis de volumen de negocios es más profundo y aumenta la base de operaciones. La configuración del stop loss también es más cuidadosa para evitar la persecución excesiva de las caídas.
En concreto, las ventajas son:
El MACD como un indicador de prueba de precios cuantitativos para determinar la relación entre precios y volúmenes de transacción, evitando el subjetivo de un solo análisis técnico;
En la actualidad, el aeropuerto de la ciudad de Nueva York es el principal aeropuerto de la ciudad de Nueva York, y el principal aeropuerto de la ciudad de Nueva York.
El RSI juzga sobrecompra y sobreventa, ayudando a buscar una reversión.
La configuración del Stop Loss Parking evita pérdidas excesivas y bloquea parte de las ganancias.
A pesar de que el uso de múltiples indicadores en conjunto aumenta la probabilidad de ganar, cualquier estrategia inevitablemente tiene ciertos riesgos, y los principales son:
La probabilidad de que el indicador emita una señal falsa, como una reversión y continuación de la tendencia original;
La suspensión de pérdidas se establece incorrectamente, y existe la posibilidad de que el retiro sea demasiado grande y que las ganancias no se bloqueen bien.
La configuración de los parámetros puede requerir una optimización de prueba adicional, como combinación de parámetros de la línea media, ciclo RSI, multiplicador de stop loss.
Estos riesgos pueden ser reducidos con una mayor optimización. Los métodos específicos se describirán en la siguiente sección.
La estrategia aún tiene margen de mejora y se centra en los siguientes aspectos:
Prueba de diferentes configuraciones de parámetros de medianería para encontrar la combinación óptima.
Prueba de la configuración de los parámetros del RSI para determinar un ciclo más adecuado para determinar el exceso de compra y venta;
Optimizar el multiplicador de stop loss para encontrar el equilibrio entre el máximo retiro y el bloqueo de ganancias;
Introducir modelos de aprendizaje automático para entrenar con mayor cantidad de datos, reducir la probabilidad de error y mejorar la tasa de éxito.
Estos métodos de optimización se pueden implementar a través de una retroalimentación más sistemática. A medida que se amplían las pruebas de espacio de parámetros y crece el volumen de muestras, la tasa de éxito y los indicadores de rentabilidad de las estrategias también aumentan.
La estrategia utiliza los tres indicadores MACD, RSI y volumen de transacción para evaluar las características de la oscilación entre las zonas de mercado, y establece entradas en los puntos de inflexión para aprovechar el aumento de la rebote como objetivo. La estrategia tiene una idea clara, contempla la tendencia y la reversión, y tiene un buen margen de ganancias después de la optimización.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)
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")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")
getRSISlopeChange(lookBack) =>
j = 0
for i = 0 to lookBack
if ( rsi[i] - rsi[ i + 1 ] ) > -5
j += 1
j
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.0
float s = 0.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.0 - signalBiasValue )
j += 1
j
getSignalNoBias(lookBack) =>
j = 0
for i = 1 to lookBack
if signal[i] < signalBiasValue and signal[i] > ( 0.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.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0
bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0
bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0
bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )
bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0
bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.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 )
// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)