Estratégia das zonas transitórias

Autora:ChaoZhang, Data: 2023-12-29 17:03:27
Tags:

img

Resumo

A estratégia de zonas transitórias é uma estratégia de negociação de curto prazo baseada em zonas de flutuação de preços.

Estratégia lógica

A estratégia calcula os preços mais altos e mais baixos dos últimos N velas para construir uma zona de flutuação de preços.

Especificamente, a estratégia acompanha continuamente os preços mais altos e mais baixos dos últimos N candelabros (parâmetro ajustável N), onde:

  • Preço mais baixo = ponto mais baixo nos últimos N candelabros
  • Preço mais elevado = ponto mais elevado nos N candelabros anteriores

Isto constitui a zona de flutuação dos preços.

Quando o preço de fechamento do último candelabro é superior ao preço mais alto da zona, ele sinaliza que a zona foi penetrada, gerando um sinal longo; quando o preço de fechamento é inferior ao preço mais baixo da zona, ele sinaliza que a zona foi penetrada, gerando um sinal curto.

Além disso, a estratégia também incorpora filtros de cor e corpo. O filtro de cor filtra sinais com base na cor do castiçal; o filtro do corpo filtra sinais com base no tamanho do corpo do castiçal. Isso ajuda a filtrar alguns sinais falsos.

Vantagens

A estratégia apresenta as seguintes vantagens:

  1. Captura zonas de preços e determina pontos de reversão da tendência para entradas longas/cortas precisas
  2. Filtros de cor e corpo ajudam a filtrar sinais falsos
  3. Lógica de estratégia simples e clara, fácil de entender e ajustar parâmetros
  4. Muitos parâmetros ajustáveis permitem otimizar a estratégia

Riscos

A estratégia apresenta também alguns riscos:

  1. Configurações inadequadas de parâmetros podem causar excesso de negociação e taxas elevadas
  2. Configurações incorretas do intervalo de zona podem gerar muitos sinais falsos de ruptura
  3. Pouco poder de previsão da zona de preços durante oscilações violentas do mercado
  4. Incapacidade de lidar com as diferenças de preços

Estes riscos podem ser reduzidos ajustando os parâmetros da zona, otimizando os filtros de sinal, etc.

Orientações de otimização

A estratégia pode ser otimizada em várias direcções:

  1. Ajustar dinamicamente a faixa de zona de preços em vez de N candelabros fixos
  2. Incorporar uma lógica de stop loss para limitar as perdas
  3. Otimizar os parâmetros do filtro para melhorar a qualidade do sinal
  4. Adicionar lógica para lidar com diferenças de preço
  5. Combine vários prazos para avaliar sinais e evitar armadilhas

Conclusão

A estratégia de zonas transitórias é uma estratégia de negociação de curto prazo fácil de usar em geral. Determina pontos de reversão de tendência através de zonas de preços e pode capitalizar rapidamente as oportunidades de mercado.


/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")

usecol = input(true, defval = true, title = "Use Color-Filter")
usebod = input(true, defval = true, title = "Use Body-Filter")

h_left = input(title = "H left", defval = 10)
h_right = -1
sample_period = input(title = "Sample bars for % TZ",  defval = 5000)
show_ptz = input(title = "Show PTZ", type = bool, defval = true)
show_channel = input(title = "Show channel", type = bool, defval = true)

fromyear = input(2018, defval = 2018, 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")

//By Jurij w/ TZ percent occurrence by SPYderCrusher

//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red)
plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green)
channel_high = plot(show_channel ? h_left_low : 0, color=silver)
channel_low = plot (show_channel ? h_left_high : 0, color=silver)

//check true TZ back in history
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1)
plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1)

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false)
dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

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

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

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, 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.