Estratégia de ruptura multi-tempo

Autora:ChaoZhang, Data: 29 de dezembro de 2023 16:17:56
Tags:

img

Resumo

A estratégia de breakout multiframe gera sinais de negociação mais confiáveis combinando sinais de breakout de preço de dois prazos diferentes. A estratégia calcula sinais de breakout de preço simultaneamente em prazos mais curtos, como 1 hora, 2 horas, 3 horas, etc. e prazos mais longos, como 4 horas, diariamente, etc. Só gerará sinais de compra ou venda quando os sinais dos dois prazos estiverem na mesma direção para a execução de negociações correspondentes.

Estratégia lógica

A lógica central desta estratégia é calcular sinais de ruptura de preço em dois prazos diferentes, respectivamente, e depois combiná-los para filtragem. Especificamente, a estratégia verificará se os preços quebram certos níveis em um período de tempo mais curto (por exemplo, 1 hora) e também se os preços quebram níveis correspondentes em um período de tempo mais longo (por exemplo, 4 horas). Somente quando os sinais de ruptura dos dois prazos estão na mesma direção, ou seja, os preços em ambos os prazos quebram para cima ou para baixo, a estratégia gerará sinais de negociação.

A condição para um sinal de compra é que os preços de fechamento ou preços baixos em ambos os prazos mais curtos e mais longos quebrem acima de seus níveis de preço. A condição para um sinal de venda é que os preços de fechamento ou preços altos em ambos os prazos quebrem abaixo de seus níveis. Ao combinar sinais em todos os prazos dessa maneira, a estratégia pode filtrar alguns sinais falsos e tornar os sinais mais confiáveis.

Análise das vantagens

A maior vantagem desta estratégia é a maior confiabilidade de seus sinais de negociação. Ao exigir que os preços se rompam em níveis em dois prazos, ele pode efetivamente filtrar algum ruído e evitar maus negócios. Além disso, os sinais de ruptura de diferentes prazos podem se validar, tornando as oportunidades de negociação mais eficientes. Além disso, a estratégia oferece alguma flexibilidade, permitindo que os usuários escolham prazos para combinar e fonte de dados etc. de acordo com suas próprias necessidades.

Análise de riscos

O principal risco desta estratégia é que durante o Zeitgeist do mercado calmo, os preços podem não quebrar em nenhum dos prazos. Nesse caso, a estratégia não gerará nenhum sinal de negociação e pode perder oportunidades. Além disso, há algum atraso de tempo entre os dois prazos, o que pode levar a sinais ineficientes. Além disso, a estratégia não inclui lógica de stop loss e tem riscos maiores.

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos: 1) Adicionar uma lógica de stop loss para controlar os riscos; 2) Otimizar combinações de prazos para melhorar a eficiência; 3) Adicionar mais prazos para combinação para tornar os sinais de negociação mais rigorosos; 4) Incorporar outros indicadores para filtragem para melhorar a qualidade do sinal; 5) Desenvolver mecanismos de saída para controlar melhor os lucros, etc.

Conclusão

A estratégia de breakout multi-frame melhora a qualidade do sinal comparando os breakouts de preços em diferentes prazos e é uma estratégia de tendência relativamente confiável, mas também tem algumas falhas.


/*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=3
strategy(title = "Noro's Levels Strategy v1.1", shorttitle = "Levels str 1.1", 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, %")
tf1 = input('W', title = "timeframe 1")
tf2 = input('D', title = "timeframe 2")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "use saw filter")
cf = input(true, defval = true, title = "гыу color filter")
showlines = input(true, defval = true, title = "Show lines")
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")

//Levels
level1 = request.security(syminfo.tickerid, tf1, src)
level2 = request.security(syminfo.tickerid, tf2, src)
col = showlines ? silver : na
p1 = plot(level1, linewidth = 3, color = col, title = "Level 1")
p2 = plot(level2, linewidth = 3, color = col, title = "Level 2")

//Signals
up1 = close > level1 and ap == false ? true : low > level1 ? true : false
dn1 = close < level1 and ap == false ? true : high < level1 ? true : false
up2 = close > level2 and ap == false ? true : low > level2 ? true : false
dn2 = close < level2 and ap == false ? true : high < level2 ? true : false

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

if up1 and up2 and (close < open or cf == false)
    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 and dn2 and (close > open or cf == false)
    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)
    strategy.close_all()

Mais.