Estratégia de negociação de volatilidade específica entre períodos de reversão de tendência


Data de criação: 2024-02-26 17:15:54 última modificação: 2024-02-26 17:15:54
cópia: 0 Cliques: 669
1
focar em
1617
Seguidores

Estratégia de negociação de volatilidade específica entre períodos de reversão de tendência

Visão geral

Esta estratégia desenha um conjunto de estratégias de negociação de reversão de tendência, calculando a diferença de pressão de compra e venda de volume de transação em diferentes janelas de tempo, em combinação com os sinais de câmbio do indicador MACD. A estratégia utiliza principalmente a oscilação do volume de transação como sinal para determinar a reversão de tendência e é validada pelo sinal de câmbio do MACD, capturando assim oportunidades de reversão.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes pontos:

  1. Calcule o volume de transações dentro de diferentes janelas de tempo (janelas longas e curtas) comprando pressões e vendendo pressões. A diferença de pressões de compra e venda determina a direção da tendência futura.

  2. A diferença do MACD (distância entre a linha MACD e a linha de sinal) é usada para determinar o estado de vazio. A combinação de um sinal de pressão de compra e venda de volume de transação, para verificar a reversão da tendência.

  3. Quando o volume de transação é comprado, a pressão inercial aumenta e a linha MACD é atravessada, o que sugere que a tendência de inverter a tendência de zero para mais pode ocorrer.

  4. Quando o volume de transação aumenta, a pressão de venda aumenta e a linha MACD se atravessa, o que sugere que a tendência pode ser invertida por um aumento da volatilidade.

  5. Após o sinal de reversão, o risco deve ser controlado com uma estratégia de stop loss.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Utilize a diferença de volume de transação para determinar o ponto de reversão da tendência, evitando o papel da transação ignorado por meio de indicadores de determinação de tendência como a linha de equilíbrio.

  2. A inversão de verificação de sinal de múltiplos espaços combinada com o indicador MACD pode melhorar a precisão do julgamento.

  3. O uso de longas e curtas janelas de tempo para determinar a direção exótica do volume de tráfego torna o sinal de reversão mais confiável.

  4. As estratégias de contra-transformação têm uma taxa de lucro média mais alta.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. Tanto o volume de transação quanto o sinal MACD podem emitir sinais errados, o que leva ao risco de erro de julgamento inverso.

  2. O risco é que o mercado volte a se ajustar após o sinal de reversão e não possa reverter diretamente.

  3. O risco de expansão dos prejuízos pode ser causado pela configuração inadequada do ponto de parada.

  4. A taxa de retirada é alta e não é adequada para investidores que buscam um lucro estável.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Otimizar intervalos de janelas de tempo longas e curtas para um julgamento mais preciso.

  2. Otimizar os parâmetros MACD para melhorar a precisão do julgamento de vazio.

  3. Otimização de algoritmos de stop loss para reduzir o risco de perdas.

  4. Aumentar os indicadores de julgamento passivo e aumentar a taxa de sucesso da reversão.

  5. Adição de módulos de controle de posição e gestão de fundos.

Resumir

Esta estratégia, em geral, é uma estratégia de negociação típica de algoritmo de inversão de tendência. Ela depende principalmente da amplificação de exotismo do volume de transação com a validação do sinal MACD, para julgar e capturar a oportunidade de reversão do preço de um ponto a um ponto ou de um ponto a um ponto. A estratégia possui uma alta precisão de julgamento e uma melhor taxa de retorno, mas também possui certos riscos.

Código-fonte da estratégia
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 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)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

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

getLookBackSlope(lookBack) => signal - signal[lookBack]
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
    float s = 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 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0

bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 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 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long, qty=10)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)