Estratégia de abertura e de encerramento do canal de preços de impulso

Autora:ChaoZhang, Data: 2023-12-06 16:44:32
Tags:

img

Resumo

Esta estratégia é baseada no indicador de canal de preços. Ao definir um parâmetro de impulso, ele calcula o valor médio dos preços mais altos e mais baixos em diferentes ciclos para formar a linha mediana do canal de preços, e define linhas longas e curtas com base nisso. Quando o preço atravessa a linha longa, ele vai longo; quando o preço atravessa a linha curta, ele vai curto. A condição final é que o preço regredir para a linha média do canal.

Princípio da estratégia

Esta estratégia usa o indicador de canal de preços para calcular o valor médio dos preços mais altos e mais baixos em diferentes ciclos para formar a linha média do canal. Com base na linha média, linhas longas e curtas são definidas através do parâmetro de mudança. Especificamente, a fórmula de cálculo da linha longa é: linha média + (parâmetro da linha média × linha longa %); a fórmula de cálculo da linha curta é: linha média + (parâmetro da linha média × linha curta%).

Quando o preço for inferior à linha longa, abra posições longas com ordens de limite; quando o preço for superior à linha curta, abra posições curtas com ordens de limite.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A utilização do indicador de canal de preços permite captar eficazmente as tendências dos preços e os principais níveis de suporte/resistência.
  2. A abertura de posições em breakouts pode reduzir as perdas de falsos breakouts.
  3. O método stop loss toma diretamente a linha média do canal de preços como padrão para evitar perdas excessivas de paradas de perseguição.

Análise de riscos

A estratégia apresenta também alguns riscos:

  1. As configurações incorretas dos parâmetros do canal de preços podem deixar de observar tendências activas ou gerar demasiadas falhas de ruptura.
  2. Os métodos de abertura de ruptura incorrem num certo grau de custos de deslizamento.
  3. Incapaz de parar a perda a tempo durante as rápidas retrações de preços.

Os riscos acima podem ser mitigados através da otimização de parâmetros, da definição de ordens de stop loss ou da combinação de outros indicadores para julgamento.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros do canal de preços para encontrar a melhor combinação.
  2. Tente diferentes métodos de abertura, como padrões de candelabro e sinais de indicador.
  3. Adicionar configurações de ordem stop loss para evitar perdas de quedas rápidas de preço.
  4. Combinar o volume de negociação, a volatilidade e outros indicadores para evitar falhas no mercado de ações.

Conclusão

A ideia de design desta estratégia baseada no indicador de canal de preço é clara. Usando breakout para abrir posições pode controlar eficazmente os riscos. Mas também há grandes espaços de otimização de parâmetros e mecanismos de stop loss que precisam ser melhorados.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
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(high, per)
l = lowest(low, per)
c = (h + l) / 2
ll = c + ((c / 100) * longlevel)
sl = c + ((c / 100) * shortlevel)

//Lines
shortcolor = needshort ? red : na
longcolor = needlong ? lime : na
plot(sl, linewidth = 2, color = shortcolor, title = "Short line")
plot(c, linewidth = 2, color = blue, title = "SMA line")
plot(ll, linewidth = 2, color = longcolor, title = "Long line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mais.