A estratégia usa a média móvel rápida de 3 dias, a média móvel lenta de 10 dias e a média móvel límpida de 16 dias para construir o indicador MACD, complementado com indicadores RSI e características de volume de negociação, definindo características multidimensionais da linha K para determinar se o mercado está exagerado, formando uma tendência turbulenta no intervalo para reverter o ganho das entradas.
O código é usado principalmente para a linha média móvel rápida de 3 dias menos a média móvel lenta de 10 dias para formar o indicador MACD, o processamento do sinal de linha de 16 dias para formar a estratégia MACD padrão. Ao mesmo tempo, combina a análise de transações de compras e vendas para determinar as características de força. Também introduziu o indicador RSI para determinar o supercomprado.
Especificamente, observando a relação entre a linha MACD e a linha de sinal, as mudanças de gradiente, o julgamento do crescimento da força de espaço excessivo e a busca de oportunidades de reversão. Ao mesmo tempo, as mudanças no volume de compra e venda também refletem o crescimento da força de espaço excessivo. Combinando as mudanças do indicador RSI com o julgamento do fenômeno de supervenda, podemos determinar as características locais do mercado e o momento em que a reversão pode ocorrer.
A política tem três sinais de entrada:
Faça mais quando o volume de transações não tem vantagem de volume de compra, o RSI está abaixo de 41 e está em alta, quando o sinal MACD não tem um desvio aparente;
Quando o volume de transações tem uma vantagem de volume de compra, o RSI está na faixa de 45-55 e está subindo, o MACD e a linha de sinalização são mais altos;
Quando o MACD está acima do limite definido e está em alta, faça o zero.
Todas as três situações refletem os distúrbios regionais do mercado no curto prazo e a excesso de expansão unidirecional, por isso julgar um bom momento para reverter e tomar uma ação reversa.
O Exit é definido como o modo stop-loss e stop-gap, controle de retorno e captação de lucros.
A estratégia combina vários indicadores para determinar os intervalos de choque e o fenômeno de supervenda, tornando clara a ideia de lucro reversível. A análise de transações é mais profunda e aumenta a base operacional. A configuração de stop-loss e stop-loss também é mais cuidadosa, evitando a caça excessiva.
O que é o que você está fazendo?
O MACD, como um indicador de teste de preço quantitativo, determina a relação entre o preço e o volume de transações, evitando o subjetivismo de uma única análise técnica;
Determinação do estado do volume de transações, aumento da força de vazio, confirmação de entradas;
O RSI determina a sobrecompra e a sobrevenda, ajudando a encontrar a reversão.
A configuração stop-loss stop-loss previne perdas excessivas e bloqueia parte dos lucros.
Apesar de a estratégia incluir a utilização de vários indicadores para aumentar a probabilidade de vitória, qualquer estratégia inevitavelmente apresenta um certo risco.
A probabilidade de um indicador emitir sinais falsos, como continuar a funcionar na tendência original após uma reversão;
O bloqueio de prejuízos está configurado de forma inadequada, há a possibilidade de retiros excessivos e lucros não bem bloqueados;
A configuração dos parâmetros pode exigir uma otimização de testes adicionais, como combinações de parâmetros uniformes, ciclos do RSI, múltiplos de stop-loss e stop-loss.
Estes riscos podem ser reduzidos através de melhorias adicionais.
A estratégia ainda tem espaço para uma maior otimização, concentrando-se principalmente nos seguintes aspectos:
Testar diferentes configurações de parâmetros da linha uniforme para encontrar a melhor combinação;
Testar a configuração dos parâmetros do RSI para determinar um ciclo mais adequado para julgar os supercompras e supervendas;
Otimizar o coeficiente de stop-loss para encontrar um equilíbrio entre o máximo de retração e o bloqueio de lucro;
Introdução de modelos de aprendizagem de máquina para treinar com dados maiores, reduzindo a probabilidade de erros e aumentando as chances de vitória.
Esses métodos de otimização podem ser realizados através de retrospecção mais sistemática. Com a expansão dos testes de espaço de parâmetros e o crescimento do volume de amostras, as taxas de vitória e os indicadores de lucratividade da estratégia também melhoram constantemente.
A estratégia usa a combinação de três grandes tipos de indicadores, MACD, RSI e volume de negociação, para julgar as características de volatilidade entre os segmentos de mercado, estabelecendo entradas no ponto de reversão para focar o aumento do rebote. O pensamento estratégico é claro, atende às tendências e reversões e tem um bom espaço de lucro após a otimização.
/*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)