Estratégia de ruptura do canal de preços ZZ-4

Autora:ChaoZhang, Data: 21 de setembro de 2023
Tags:

Resumo

Esta estratégia opera com base no canal de preços do indicador ZZ, tomando posições longas/cortas quando o preço ultrapassa/desce as faixas do canal.

Estratégia lógica

  1. Calcular as faixas superior/inferior do canal de preços
  2. Vai longo quando o preço ultrapassa a faixa superior
  3. Faça curto quando o preço cair abaixo da faixa inferior
  4. Intervalo de tempo de negociação definido
  5. Posições limpas antes do fechamento diário

Especificamente, ele usa o indicador ZZ para calcular as faixas do canal de preços. Quando o preço sai para cima da faixa inferior, vá longo. Quando o preço cai da faixa superior, vá curto. As ordens de stop loss são usadas com as faixas do canal como níveis de stop loss.

Análise das vantagens

  1. O canal de preços identifica eventuais rupturas da tendência
  2. Sinais de negociação simples e claros
  3. Período de canal personalizável adequado a diferentes produtos e ciclos
  4. Horários de negociação e gestão de riscos de saída diária
  5. Limites de stop loss para perdas de transações individuais

Análise de riscos

  1. Whipsaws dentro do canal pode bater repetidamente stop loss
  2. Requer ajuste oportuno dos parâmetros, caso contrário a gama de canais pode ser imprecisa
  3. As fugas podem ser falsas, o risco de ficarmos presos.
  4. O potencial de lucro é limitado pela gama de canais
  5. Não capitalizar plenamente os movimentos da tendência

Os riscos podem ser reduzidos através do alargamento da gama de canais, da otimização do stop loss, da medição da força da tendência, etc.

Orientações de otimização

  1. Teste diferentes combinações de parâmetros para melhor configuração
  2. Ampliar o canal de preços para capturar movimentos maiores
  3. Adicionar indicador de tendência para evitar falhas
  4. Otimizar o stop loss para evitar ficar preso
  5. Aumentar o tamanho da posição para maximizar os lucros de ruptura
  6. Avaliação da rentabilidade em diferentes intervalos de datas

Resumo

Esta estratégia troca breakouts de canal de preços para identificar surtos de tendência. Os prós são sinais simples e claros e operação fácil; os contras são whipssaws e falha em montar tendências. A otimização de parâmetros e a combinação de estratégia podem superar os contras enquanto mantêm os prós. Ajuda os comerciantes a dominar a aplicação de técnicas de canal de preços.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's ZZ-4 Strategy", shorttitle = "Noro's ZZ-4 Strategy", 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(7, minval = 1, title = "Length")
showll = input(true, defval = true, title = "Show Levels")
showbg = input(false, defval = false, title = "Show Background")
showpc = input(false, defval = false, title = "Show Price Channel")
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")

//Price channel
h = highest(ohlc4, len)
l = lowest(ohlc4, len)
pccol = showpc ? color.blue : na
plot(h, color = pccol, transp = 0)
plot(l, color = pccol, transp = 0)

//Levels
ml = 0
ml := l > l[1] ? 1 : l < l[1] ? -1 : ml[1]
ll = 0.0
ll := ml == 1 and ml[1] == -1 ? l[1] : ll[1]
mh = 0
mh := h > h[1] ? 1 : h < h[1] ? -1 : mh[1]
hl = 0.0
hl := mh == -1 and mh[1] == 1 ? h[1] : hl[1]

//Lines
colorh = showll and hl == hl[1] ? color.lime : na
colorl = showll and ll == ll[1] ? color.red : na
plot(hl, color = colorh, linewidth = 2, transp = 0, title = "Long")
plot(ll, color = colorl, linewidth = 2, transp = 0, title = "Short")

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= hl ? 1 : low <= ll ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if ll > 0 and hl > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = hl, when=(truetime))
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = ll, when=(truetime))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mais.