Estratégia de rompimento baseada em canal de preço


Data de criação: 2024-01-16 14:22:57 última modificação: 2024-01-16 14:22:57
cópia: 0 Cliques: 664
1
focar em
1617
Seguidores

Estratégia de rompimento baseada em canal de preço

Visão geral

A estratégia é chamada de estratégia de ruptura baseada em canais de preço, e sua principal ideia é usar o canal de preço para julgar a tendência e a direção do mercado e estabelecer uma posição quando o preço quebra o canal. Primeiro, ele traça o alcance do canal de preços e, em seguida, determina se a linha K aparece duas linhas K vermelhas ou verdes consecutivas, gerando um sinal de compra ou venda se a última linha K atravessar mais da metade do canal e fechar fora do canal.

Princípio da estratégia

A estratégia calcula os preços mais altos e mais baixos nos últimos períodos de um determinado período através das funções highest (..) e lowest (..) para determinar a trajetória ascendente e descendente do canal de preços. A linha central do canal é definida como o valor médio da trajetória ascendente e descendente. Em seguida, calcula o tamanho das entidades da linha K e, através do suavização do SMA, determina se a última entidade da linha K é maior que a metade da entidade média.

Análise de vantagens

Esta é uma estratégia de ruptura que utiliza o canal de preços para determinar a tendência. Tem as seguintes vantagens:

  1. O uso de canais de preços para determinar a direção da tendência geral pode filtrar o ruído do mercado.

  2. Duas linhas K consecutivas de passagem para a entrada de ruptura, indicando um forte impulso e uma maior taxa de sucesso na ruptura.

  3. Julgar que a entidade de linha K é superior a metade da entidade média, pode evitar ser enganado por uma falsa ruptura.

  4. A lógica da estratégia é simples, fácil de entender e de implementar.

  5. Parâmetros personalizáveis, como o ciclo do canal, o tipo de transação, o tempo de transação, etc., são altamente adaptáveis.

Análise de Riscos

A estratégia também apresenta alguns riscos potenciais:

  1. A probabilidade de fracasso da invasão continua a existir, podendo causar prejuízos.

  2. A decisão de passagem pode falhar em situações de forte volatilidade.

  3. A falta de um mecanismo de prevenção de perdas não permite um controlo eficaz das perdas.

  4. As regras de negociação são simples e há risco de sobre-conformidade.

  5. Não conseguem adaptar-se a um mercado mais complexo.

A solução é a seguinte:

  1. Optimizar os parâmetros e aumentar a taxa de sucesso da brecha.

  2. A partir de agora, os indicadores de volatilidade devem ser incluídos para evitar oscilações.

  3. Adição de configuração de stop loss móvel.

  4. Fazer testes de complexidade e verificar a adequação.

  5. Aumentar os algoritmos de aprendizagem de máquina e melhorar a adaptabilidade das estratégias.

Direção de otimização

A estratégia foi desenvolvida em torno de:

  1. Aumentar o mecanismo de stop loss para melhor controlar o risco. Pode-se definir um stop loss de retorno de preço, ou pode-se usar indicadores como o ATR para definir um stop loss móvel.

  2. Os parâmetros de otimização, como o ciclo de passagem, o parâmetro de amplitude de ruptura, etc. Os parâmetros ótimos podem ser encontrados por meio de algoritmos genéticos, pesquisa de grade e outros métodos.

  3. Aumentar as condições de filtragem, aumentando a certeza de uma ruptura. Por exemplo, pode ser combinado com o volume de transações para confirmar a ruptura.

  4. A adição de modelos de aprendizagem de máquina, que utilizam mais dados para aumentar a capacidade de previsão e adaptabilidade das estratégias. O aprendizado profundo, como o LSTM, pode capturar padrões mais complexos.

  5. Otimização de combinações, combinação de diferentes tipos de estratégias de ruptura, ortodoxia e redução da similaridade.

Resumir

A estratégia, como um todo, é uma estratégia quantitativa baseada em tendências de julgamento de canais de preço e detecção de sinais de ruptura. Ela tem tendências de julgamento e confirmação de vantagens de ruptura, mas também existe um certo risco de falsa ruptura. Podemos melhorar a estratégia e reduzir o risco por meio de métodos como otimização de parâmetros, configuração de stop loss e adição de filtros de condições.

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

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.0", shorttitle = "Price Channel str 1.0", 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")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel")
showcl = input(true, defval = true, title = "Show center-line")
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")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
col = showcl ? blue : na
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if exit
    strategy.close_all()