Estratégia de reversão da zona de choque triangular

Autora:ChaoZhang, Data: 2024-02-18 11:18:51
Tags:

三均线震荡区间反转策略

Resumo

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.

Princípios estratégicos

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:

  1. 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;

  2. 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;

  3. 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.

Análise de vantagens

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?

  1. 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;

  2. Determinação do estado do volume de transações, aumento da força de vazio, confirmação de entradas;

  3. O RSI determina a sobrecompra e a sobrevenda, ajudando a encontrar a reversão.

  4. A configuração stop-loss stop-loss previne perdas excessivas e bloqueia parte dos lucros.

Análise de riscos

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.

  1. A probabilidade de um indicador emitir sinais falsos, como continuar a funcionar na tendência original após uma reversão;

  2. O bloqueio de prejuízos está configurado de forma inadequada, há a possibilidade de retiros excessivos e lucros não bem bloqueados;

  3. 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.

Optimização

A estratégia ainda tem espaço para uma maior otimização, concentrando-se principalmente nos seguintes aspectos:

  1. Testar diferentes configurações de parâmetros da linha uniforme para encontrar a melhor combinação;

  2. Testar a configuração dos parâmetros do RSI para determinar um ciclo mais adequado para julgar os supercompras e supervendas;

  3. Otimizar o coeficiente de stop-loss para encontrar um equilíbrio entre o máximo de retração e o bloqueio de lucro;

  4. 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.

Resumo

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)


Mais informações