Múltiples ciclos de tiempo MACD estrategia de inversión cruzada de eje cero mediante el cálculo de indicadores MACD de diferentes ciclos, la identificación de señales de que el precio puede invertirse, la adopción de un método de seguimiento de la tendencia de stop-loss, en busca de una mayor eficiencia de uso de capital.
La estrategia calcula al mismo tiempo las medias móviles del SMA de 3 ciclos y 10 ciclos, construye una línea rápida y lenta, y luego calcula el indicador MACD y la línea de señal. Cuando la línea rápida y la línea de señal se cruzan en el eje cero hacia arriba o hacia abajo, indica que el precio alcanza un punto crítico y que puede haber un cambio. Además, la estrategia también combina el juicio de estado de espacio de la cantidad de transacciones, el indicador RSI, etc., para identificar la fiabilidad de la señal de cambio.
En concreto, la estrategia es invertir el precio mediante los siguientes métodos:
1. El cruce del eje cero del MACD, que indica que el precio ha alcanzado un punto crítico
2. Las presiones de compra y venta determinan la situación de la mayoría de los vacíos.
3. El indicador RSI observa la tendencia bajista, combinada con el cambio en la inclinación del MACD, para determinar la intensidad de la señal de inversión
4. La línea rápida y la línea de señal se cruzan en sentido contrario para formar una señal inversa.
Cuando la fiabilidad de la señal de reversión es alta, la estrategia es entrar en juego con un método de seguimiento de tendencias para buscar mayores ganancias.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Los riesgos pueden reducirse mediante:
1. Relajar adecuadamente la amplitud de los daños para evitar que se cubran
2. Optimizar los parámetros y reducir la frecuencia de las transacciones
3. Solo considere la entrada cerca de los puntos de resistencia de soporte críticos
La estrategia también puede ser optimizada para incluir:
La estrategia de inversión por eje cero MACD de múltiples ciclos de tiempo, que tiene en cuenta información de múltiples dimensiones como el precio, el volumen de transacción y los indicadores de volatilidad, determina el momento de entrada en el reverso a través de la determinación de múltiples indicadores, para obtener mejores ganancias en el mercado de reversión después de que la ganancia sea suficiente. Se espera que la estrategia se perfeccione aún más a través de métodos como el aprendizaje automático y la optimización de bits clave, para reducir la frecuencia y el riesgo de las transacciones y aumentar el margen de ganancia.
/*backtest start: 2023-02-11 00:00:00 end: 2024-02-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 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.0) takeProfit = input( title="Take Profit", defval=0.8) stopLoss = input( title="Stop Loss", defval=0.75) 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 rsi = ta.rsi(close, 14) rsiSlope = rsi - rsi[1] 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 ) // 393.60 Profit 52.26% 15m if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 ) strategy.entry("15C1", strategy.long, qty=10.0) strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 356.10 Profit 51,45% 15m if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0) strategy.entry("15C2", strategy.long, qty=10.0) strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 124 Profit 52% 15m if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0) strategy.entry("15P1", strategy.short, qty=10.0) strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss) // 455.40 Profit 49% 15m if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion) strategy.entry("15P2", strategy.short, qty=10.0) strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)