Estratégia de combinação de padrões de candelabro com vários modelos

Autora:ChaoZhang, Data: 2023-10-17 15:53:06
Tags:

img

Resumo

Esta estratégia combina vários modelos de padrão de velas para negociar ações.

Princípio

A lógica central desta estratégia é construir várias regras de reconhecimento de padrões de velas e, em seguida, gerar sinais de negociação combinando essas regras.

Em primeiro lugar, define algumas variáveis básicas para descrever as propriedades do candelabro, como o tamanho do corpo da vela, preço de abertura, preço de fechamento, etc.

Em seguida, com base na relação entre o preço de fechamento e o preço de abertura, define 3 tipos de barra de negociação: 1 para subir, -1 para cair e 0 para não mudar.

Nesta base, são construídas 3 regras de reconhecimento de padrões de candelabro:

  1. Padrão de Engulfing: a vela atual engole a anterior, gerando sinais de compra ou venda.

  2. Padrão Harami: a vela anterior engole a corrente, gerando sinais de compra ou venda.

  3. Padrão Harami Cross: combinação de Harami e Doji, gerando sinais de compra ou venda.

De acordo com esses padrões de velas, o momento da compra e venda pode ser determinado. Algumas condições adicionais são combinadas para filtrar sinais inválidos, como limite de intervalo de tempo de negociação.

A lógica de negociação verifica primeiro a posição existente. Se contradizer a direção do sinal, fechará primeiro a posição atual, e depois abrirá uma nova posição de acordo com o sinal.

Vantagens

  • A combinação aumenta a estabilidade, o padrão único é propenso a condições específicas do mercado e a combinação pode melhorar a confiabilidade.

  • A confirmação melhora a precisão, padrões diferentes verificam-se uns aos outros, sinais falsos podem ser evitados.

  • Flexibilidade: os utilizadores podem combinar livremente modelos e ajustar parâmetros para diferentes dinâmicas de mercado.

  • Controle de riscos: a lógica de stop loss e gestão de posições gerencia os riscos de forma eficaz.

Riscos

  • Complexidade: mais parâmetros significam mais complexidade, combinações inadequadas podem prejudicar o desempenho.

  • O ajuste de parâmetros requer experiência. Como definir parâmetros de padrão adequados requer experiência.

  • O risco de detenção unilateral. longo ou curto apenas limita o potencial de lucro. permitir tanto longo e curto pode ajudar.

  • Falta de pontos de reversão. Focar em padrões perde de vista os sinais de reversão da tendência. Adicionar outros indicadores pode ajudar a identificar pontos de reversão potenciais.

Reforço

  • Adicionar stop loss para reduzir o risco de detenção.

  • Incorporar outros indicadores técnicos para determinar a tendência geral, evitando a negociação contra a tendência principal.

  • Testar os parâmetros do modelo em diferentes produtos, estabelecer conjuntos de parâmetros ideais para cada produto.

  • Introduzir aprendizado de máquina para ajudar a otimizar parâmetros e reconhecimento de padrões usando IA.

Conclusão

Esta estratégia constrói um sistema de negociação relativamente estável a curto prazo, combinando vários padrões de velas. Mas o ajuste de parâmetros e o controle de riscos ainda precisam de melhoria para adaptar mercados mais complexos.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")

eng = input(true, defval = true, title = "Model Engulfing")
har = input(true, defval = true, title = "Model Harami")
harc = input(true, defval = true, title = "Model Harami Cross")

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
rev = input(false, defval = false, title = "Reversive trading")

//Body
body = abs(close - open)
abody = sma(body, 10)

//MinMax Bars
min = min(close, open)
max = max(close, open)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
doji = body < abody / 10
up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1]
dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1]
up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1]
dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1]
up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1]
dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1]
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mais.