Estratégia de inversão de candelabro consecutiva

Autora:ChaoZhang, Data: 2023-10-08 13:56:39
Tags:

Resumo

Esta estratégia é baseada em uma idéia de negociação de curto prazo clássica - indo curto após velas de alta consecutivas e indo longo após velas de baixa consecutivas. Especificamente, esta estratégia detecta a altura do corpo e a cor das velas para determinar a ocorrência de velas consecutivas com a mesma cor, e então usa o indicador RVI para determinar se uma reversão deve ocorrer.

Estratégia lógica

A lógica central desta estratégia inclui:

  1. Verifique se a altura do corpo do candelabro excede o limiar mínimo para filtrar movimentos de alta/baixa insignificantes.

  2. Determine se os dois candelabros anteriores têm a mesma cor, o que pode indicar uma potencial reversão a curto prazo.

  3. Se o candelabro atual tiver uma cor diferente dos dois anteriores, um sinal de negociação é gerado. Ou seja, vá longo após dois candelabros de baixa e um de alta, vá curto após dois candelabros de alta e um de baixa.

  4. Após a entrada em uma negociação, os cruzamento da linha RVI e da linha de sinal são usados para determinar as posições de saída.

  5. Em resumo, esta estratégia combina padrões de velas e o indicador RVI para criar um sistema de reversão média de curto prazo, capturando reversões lucrativas de comportamentos anormais de preços de curto prazo.

Análise das vantagens

As principais vantagens desta estratégia incluem:

  1. Candeeiros consecutivos da mesma cor indicam frequentemente anomalias prontas para inversões.

  2. O indicador RVI auxilia na determinação de reversão, complementando os padrões de velas para sinais mais estáveis.

  3. Frequência de negociação relativamente elevada para negociação a curto prazo.

  4. Riscos controláveis decorrentes do tamanho fixo das transações e da suspensão de perdas/recuperação de lucros.

  5. Uma lógica simples e clara que seja fácil de entender e implementar para negociação ao vivo.

Análise de riscos

Alguns riscos a ter em conta:

  1. As reversões a curto prazo não são garantidas durante tendências fortes quando os sinais podem falhar.

  2. O RVI pode gerar sinais incorretos em condições especiais de mercado.

  3. A configuração inadequada de stop loss pode levar a grandes perdas.

  4. Considere a otimização para a porcentagem necessária de velas da mesma cor dentro de N períodos.

  5. O tamanho fixo da transacção não pode controlar os riscos globais da posição.

Orientações de otimização

Algumas formas de otimizar ainda mais a estratégia:

  1. Otimizar a lógica de velas consecutivas usando estatísticas em vez de períodos fixos.

  2. Otimize os parâmetros do RVI para encontrar as melhores combinações.

  3. Adicionar stop loss de atraso com base na volatilidade do mercado.

  4. Adicionar dimensionamento de posição com base no uso da conta.

  5. Adicionar mais filtros como canais, tendências para melhorar a estabilidade do sistema.

  6. Ajuste de parâmetros para diferentes produtos.

  7. Aprendizagem de máquina em dados históricos para otimizar dinamicamente parâmetros.

Resumo

Em resumo, esta é uma estratégia típica de reversão média de curto prazo baseada em padrões de velas e RVI. Ela tem vantagens, mas também riscos. Outras otimizações em parâmetros e robustez podem melhorar sua estabilidade e lucratividade. No entanto, nenhuma estratégia elimina as perdas completamente. Os comerciantes devem permanecer disciplinados na gestão de riscos.


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

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()





Mais.