Estratégia de ímpeto entre ciclos contidos

Autora:ChaoZhang, Data: 2023-09-20 14:59:37
Tags:

Resumo

A idéia central desta estratégia é determinar a direção da tendência usando o padrão de vela contido entre ciclos e usá-lo como sinal de entrada. Quando um padrão contido entre ciclos aparece que contém o veículo anterior, podemos inferir que este é um ponto em que a tendência está se revertendo, momento em que podemos ir longo em uma quebra acima da alta anterior ou ir curto em uma quebra abaixo da baixa anterior, com a configuração adequada de stop loss e take profit.

Estratégia lógica

  1. Verifique se o padrão contido entre os ciclos ocorre. A lógica específica é: o alto da vela atual é menor do que o alto da vela anterior, e o baixo da vela atual é maior do que o baixo da vela anterior.

  2. Determine se a vela anterior foi alta ou baixa. Se o fechamento foi maior do que o aberto, foi alta. Se o fechamento foi menor do que o aberto, foi baixa.

  3. Se a vela anterior foi de alta e o padrão contido ocorre, coloque uma ordem de compra stop no alto da vela anterior mais 10% de seu intervalo.

  4. Se a vela anterior foi de baixa e o padrão contido ocorrer, coloque uma ordem de stop de venda no mínimo da vela anterior menos 10% do seu intervalo.

  5. Uma vez que a ordem de parada é acionada e a posição é aberta, defina o stop loss e tire lucro.

  6. Se se formar outro padrão de barra interna, feche primeiro as posições existentes e coloque depois novas ordens pendentes.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Ele utiliza a lógica inerente dos candelabros e fornece um tempo de entrada preciso.

  2. As regras são simples e fáceis de seguir para negociação real.

  3. O stop loss e o take profit baseados no intervalo anterior das velas ajudam a controlar o risco.

  4. Novas ordens pendentes são colocadas sempre que um padrão qualificado aparece, permitindo-nos seguir a nova tendência.

Análise de riscos

Há também alguns riscos:

  1. O padrão contido nem sempre resulta em inversão de tendência ou aceleração.

  2. A distância de stop loss pode ser demasiado pequena para suportar grandes flutuações no mercado.

  3. A meta de lucro pode ser muito ampla, impedindo lucros oportunos.

  4. A estratégia baseia-se mais nas tendências dos mercados. O potencial de lucro é limitado durante a consolidação.

  5. A elevada frequência das transacções leva a elevados custos de transacção.

Soluções:

  1. Adicionar outros indicadores para confirmar os sinais e reduzir os falsos sinais.

  2. Ampliar ligeiramente o stop loss, mas não mais de 50% do intervalo anterior das velas.

  3. Redução do objectivo de lucro a cerca de 50% da faixa anterior.

  4. Otimizar a gestão de capitais, reduzir o tamanho das posições individuais para diversos mercados.

  5. Afrouxar os critérios de entrada para reduzir a frequência das negociações.

Orientações de otimização

Algumas maneiras de otimizar a estratégia:

  1. Adicione um indicador de tendência como o MACD para determinar a direção da tendência, evitando falhas durante a consolidação.

  2. Utilizar técnicas mais avançadas de stop loss, como trailing stop ou profit protection stop loss.

  3. Teste diferentes índices de stop loss e take profit para encontrar os parâmetros ideais.

  4. Adicione a lógica de reentrada para capturar a tendência novamente após a parada de perda.

  5. Otimizar o dimensionamento das posições com base na volatilidade do mercado.

  6. Otimizar a gestão do capital, como o dimensionamento das posições fracionárias fixas.

  7. Teste a estratégia em diferentes produtos e prazos.

Conclusão

Em resumo, esta é uma estratégia que usa o padrão contido entre ciclos para determinar pontos de virada da tendência e colocar ordens pendentes para capturar inversões de tendência. Ele tem as vantagens de sinais de entrada claros, regras simples e riscos controláveis, mas também tem alguns riscos de sinal falso e espaço para otimização. Podemos melhorar ainda mais sua estabilidade e lucratividade combinando filtros de tendência, otimizando paradas, ajustando tamanhos de posição, etc. É mais adequado para mercados de tendência e precisa ser otimizado e testado para diferentes condições de mercado antes do uso real para maximizar sua eficácia.


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

//@version=3

// Inside Bar Momentum Strategy
// As defined on Babypips.com
// https://www.babypips.com/trading/forex-inside-bar-20170113

// strategy("Babypips: Inside Bar Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)

From_Year  = input(defval = 2018, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window
Window = true

Stop_Buy_Perc  = input(10, "Stop Buy Order Percentage From Previous Candle's Range")/100
Stop_Loss_Perc = input(20, "Stop Loss Distance from High/Low of Previous Candle")/100
Take_Prof_Perc = input(80, "Take Profit Distance from High/Low of Previous Candle")/100

Risk = input(2, "Percentage Of EQUITY to risk per trade", step=0.1, minval=0, maxval=100)/100

Inside_Bar = high[1] > high[0] and low[1] < low[0]
Prev_Range = high[1] - low[1]
Bullish = open[1] < close[1]
Bearish = open[1] > close[1]

// Get Key Levels 
Long_Stop_Buy_Level   = high[1] + (Prev_Range * Stop_Buy_Perc)
Short_Stop_Buy_Level  = low[1]  - (Prev_Range * Stop_Buy_Perc)
Long_Stop_Loss_Level  = high[1] - (Prev_Range * Stop_Loss_Perc)
Short_Stop_Loss_Level = low[1]  + (Prev_Range * Stop_Loss_Perc)
Long_Take_Prof_Level  = high[1] + (Prev_Range * Take_Prof_Perc)
Short_Take_Prof_Level = low[1]  - (Prev_Range * Take_Prof_Perc)

// Position Sizing
long_qty = floor((strategy.equity * Risk) / (Long_Stop_Buy_Level - Long_Stop_Loss_Level))
short_qty = floor((strategy.equity * Risk) / (Short_Stop_Loss_Level - Short_Stop_Buy_Level))

// -------------------------- LONG CONDITIONS --------------------------------//
// The first candlestick must be bullish (green or white) and if the second 
// candlestick is completely contained by the first, set a buy stop order at 
// the first candle’s high plus 10% of its range (high minus low).

// Place the stop loss at the first candle’s high minus 20% of its range 
// and set the target at the first candle’s high plus 80% of its range

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Long_Condition = Window and Inside_Bar and Bullish
if (Long_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bullish IB", strategy.long, stop=Long_Stop_Buy_Level)
    strategy.exit("Bullish Exit","Bullish IB", stop=Long_Stop_Loss_Level, limit=Long_Take_Prof_Level)
    
// -------------------------- SHORT CONDITIONS -------------------------------//
// The first candlestick must be bearish (red or black) and if the second 
// candlestick is completely contained by the first, set a sell stop order at 
// the first candle’s low minus 10% of its range (high minus low).

// Place the stop loss at the first candle’s low plus 20% of its range and 
// set the target at the first candle’s low minus 80% of its range.

// If another inside bar pattern forms, the current position should be closed 
// or the pending buy/sell order must be canceled and entry orders must be 
// updated to the latest candles.

Short_Condition = Window and Inside_Bar and Bearish
if (Short_Condition)
    // Incase we still have a buy stop order in the market
    strategy.cancel_all()
    // Close any existing positions according to the rules
    strategy.close_all()
    strategy.entry("Bearish IB", strategy.short, stop=Short_Stop_Buy_Level)
    strategy.exit("Bearish Exit","Bearish IB", stop=Short_Stop_Loss_Level, limit=Short_Take_Prof_Level)
    
// ----------------------------- PLOTTING ------------------------------------//
plotshape(Inside_Bar, style=shape.arrowdown, location=location.abovebar, color=purple)


Mais.