Estratégia de inversão bidirecional

Autora:ChaoZhang, Data: 2023-11-02 16:47:08
Tags:

img

Resumo

A estratégia de reversão bidirecional é uma estratégia de negociação Bitcoin simples que define ordens de compra stop-loss com base no intervalo de negociação do dia anterior. A ideia central desta estratégia é que, se o preço de abertura no dia atual for maior que o preço de fechamento do dia anterior, defina uma compra stop-loss perto do máximo; se o preço de abertura for menor que o preço de fechamento do dia anterior, defina uma compra stop-loss perto do mínimo.

Estratégia lógica

A estratégia primeiro calcula o intervalo de negociação do dia anterior, que é o preço mais alto menos o preço mais baixo. Após a abertura do dia atual, ele julga se o preço é maior ou menor do que o preço de fechamento do dia anterior. Se maior, o preço de compra stop-loss é definido no preço de abertura mais 0,6 vezes o intervalo do dia anterior. Se menor, o preço de compra stop-loss é definido no preço de abertura mais 1,8 vezes o intervalo do dia anterior. A estratégia abrirá uma posição longa quando o stop loss for ativado e fechará a posição antes do final do dia atual.

Em especial, a estratégia contém duas regras de entrada:

  1. Se o preço de abertura do dia em curso for superior ao preço de fechamento do dia anterior (longCond1 satisfeito), e dentro da janela de tempo do backtest (janela() satisfeita, defina uma compra stop-loss ao preço de abertura mais 0,6 vezes o intervalo do dia anterior (stratégia.long1).

  2. Se o preço de abertura do dia em curso for inferior ao preço de encerramento do dia anterior (longCond2 satisfeito), e dentro da janela de backtest, defina uma compra stop-loss ao preço de abertura mais 1,8 vezes o intervalo do dia anterior (stratégia.long2).

A estratégia abrirá uma posição longa quando qualquer uma das perdas de parada acima for acionada e fechará a posição antes do final do dia usando a estratégia.close_all (().

Análise das vantagens

A estratégia de inversão bidirecional tem as seguintes vantagens:

  1. Captura movimentos de reversão sem viés direcional.

  2. Risco controlado com stop loss. O stop loss predeterminado limita efetivamente a perda máxima por negociação.

  3. Evitar o risco overnight fechando todas as posições diariamente.

  4. A maior frequência de negociação para a negociação a curto prazo.

  5. Lógica simples e clara, fácil de entender e implementar.

Análise de riscos

No entanto, há também alguns riscos a ter em conta para a estratégia:

  1. A distância de stop loss incorreta pode resultar em um stop loss atingido. Se o stop loss for muito apertado, ele pode ser parado prematuramente em condições de mercado extremas.

  2. A alta frequência de negociação pode implicar custos de transacção significativos.

  3. São propensos a serem interrompidos em mercados agitados, tendo tendência a ser desencadeados com mais frequência em condições de "whipsaw".

  4. A estratégia é mais adequada para reversões, incapaz de capturar lucros de continuações de tendências.

Oportunidades de melhoria

Algumas formas de melhorar a estratégia:

  1. Otimize a distância de stop loss. Teste diferentes níveis de stop para encontrar pontos de stop loss ideais. Também considere paradas dinâmicas baseadas na volatilidade do mercado.

  2. Adicione filtros de tendência. Verifique tendências de prazos maiores antes de entrar para evitar negociações contra-tendência.

  3. Melhorar as regras de entrada e considerar a adição de indicadores de volume ou de momento para aumentar a precisão de entrada.

  4. Introduzir gestão de posições, testar paradas ou tendências que se seguem a saídas para conduzir tendências lucrativas.

  5. A estratégia pode funcionar melhor com produtos de maior volatilidade.

  6. Utilize técnicas de aprendizagem de máquina. Optimize parâmetros como paradas e entradas usando algoritmos ML.

Conclusão

Em geral, a estratégia de reversão bidirecional é um conceito de estratégia de curto prazo muito simples e prático. Ela pode efetivamente capturar oportunidades de reversão em movimentos ascendentes e descendentes. No entanto, riscos como a distância de stop loss e as regras de entrada precisam ser otimizados para reduzir riscos e melhorar a robustez. Com refinamentos importantes, a estratégia pode se tornar uma ferramenta de negociação de curto prazo muito útil.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Simple strat", shorttitle="Simple Strat", overlay=true)

// X001TK R1 strategy
//
// 
// This strategy combines the special approach in previous daily range trading
//
// This strategy goes long on stop buy order which is calculated as previous day range
// multiplied by special number.
//
// This pure strategy does not have any
// stop loss or take profit money management logic.
//
// Exit rule is simple. We close the position on market close or next day open
//
// 
// 
//
// Input
length = input(10, minval=1)
stopLossPercent=input(1.1,"Stop Loss Percent")
profitPercent=input(9,"Profit Percent")


// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2000)
ToMonth   = input(defval = 3, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2029, title = "To Year", minval = 2017)
ses_cls = input(defval=true, title="End of Session Close Out?")


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


// === STRATEGY ===
// conditions
longCond1 = close>close[1]
longCond2 = close<close[1]


strategy.entry("long1", strategy.long, when=longCond1==true and window()==true, stop=close+(high - low)*0.6)
strategy.entry("long2", strategy.long, when=longCond2==true and window()==true, stop=close+(high - low)*1.8)
strategy.close_all(when=ses_cls)

// === /STRATEGY ===

Mais.