
A estratégia utiliza 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 suave de 16 dias para construir o indicador MACD, complementado com o indicador RSI e a característica de volume de transação, definindo uma característica de linha K multidimensional, julgando que o mercado está excessivamente fechado e formando uma tendência de oscilação intermédia para inverter o lucro das entradas.
O código usa principalmente a 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 tratamento suave da linha de sinal de 16 dias, formando a estratégia MACD padrão. Ao mesmo tempo, a análise de volume de transação combinada de compra e venda, determina a característica de força.
Concretamente, observando a relação entre a linha MACD e a linha de sinal, a mudança de inclinação, a diminuição da força de câmbio, a busca de oportunidades de reversão. Ao mesmo tempo, a mudança no volume de transação também reflete a diminuição da força de câmbio. Combinando as mudanças do indicador RSI para julgar o fenômeno de supercompra e supervenda, a síntese desses indicadores permite determinar as características locais da situação e o momento em que a reversão pode ocorrer.
Esta estratégia tem três sinais de entrada:
Quando o volume de transação não tem vantagem sobre o volume de compra, o RSI está abaixo de 41 e está subindo, e o sinal MACD não está claramente desviado, faça mais;
Quando o volume de transação tem vantagem sobre o volume de compra, o RSI está na faixa 45-55 e sobe, o MACD e a linha de sinalização estão na mesma direção, fazendo mais;
Quando o MACD está acima do seu limite e está em alta, faça um vazio.
Todas as três situações refletem oscilações regionais de curto prazo e uma expansão excessiva em uma direção, e, portanto, são consideradas um bom momento para reverter a tendência e agir de forma contrária.
Exit é definido como um modo de stop loss e stop-loss, retorno de controle e recebimento de lucro.
A estratégia combina vários indicadores para determinar os intervalos de choque e os fenômenos de sobrecompra e sobrevenda, para que a ideia de lucro seja clara. A análise de volume de transação é mais profunda e aumenta a base de operação. A configuração de stop loss também é mais cautelosa, evitando a busca excessiva de queda.
O blogueiro também compartilhou algumas das vantagens:
O MACD é um indicador de teste de preço quantitativo, que determina a relação entre preço e volume de transação, evitando a subjetividade de uma única análise técnica.
A Força Aérea, para avaliar o estado da entrega, adicionou a confirmação de entradas.
O RSI julga que a tendência de sobrecompra e de sobrevenda está a ajudar a encontrar uma inversão.
O Stop Loss Brake previne perdas excessivas e bloqueia parte dos lucros.
Embora a aplicação de vários indicadores na estratégia possa aumentar as chances de vitória, qualquer estratégia inevitavelmente apresenta alguns riscos, principalmente:
A probabilidade de um indicador emitir um falso sinal, como uma reversão e continuar a funcionar na tendência original;
O Stop Loss Stop Limit está mal definido, há uma possibilidade de um retiro excessivo e de que os lucros não sejam bem bloqueados.
A configuração de parâmetros pode necessitar de mais otimização de testes, como combinação de parâmetros de linha média, ciclo RSI, parâmetros de stop loss, etc.
Todos esses riscos podem ser reduzidos com otimização adicional.
A estratégia ainda tem espaço para ser melhorada, com foco nas seguintes áreas:
Teste diferentes configurações de parâmetros de equilíbrio para encontrar a melhor combinação;
Testar a configuração de parâmetros do RSI para determinar um ciclo mais adequado para determinar o excesso de compra e venda;
Otimizar o multiplicador de stop loss para encontrar um equilíbrio entre a retirada máxima e o bloqueio de lucro;
A introdução de modelos de aprendizagem de máquina para treinar com dados maiores, reduzir a probabilidade de erro e aumentar a taxa de vitória.
Esses meios de otimização podem ser alcançados por meio de um feedback mais sistemático. Com a expansão dos testes de espaço de parâmetros e o aumento do volume de amostras, a taxa de sucesso e os indicadores de lucro da estratégia também aumentam.
Esta estratégia utiliza os três principais indicadores MACD, RSI e volume de transação para avaliar as características de oscilação entre as zonas de mercado, estabelecendo entradas no ponto de reversão para aproveitar o aumento de rebote como alvo. A estratégia é clara, contempla tendências e reversões e tem um bom espaço de lucro após a otimização. Através do ajuste de parâmetros e da introdução de modelos, espera-se que seja uma estratégia de quantificação eficiente e estável.
/*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)