N Bars estratégia de fuga

Autora:ChaoZhang, Data: 2024-04-12 16:57:15
Tags:

img

Resumo

A estratégia de breakout N Bars é uma estratégia quantitativa de negociação baseada em breakouts de preços. A ideia principal desta estratégia é abrir uma posição longa quando o preço de fechamento ultrapassa o máximo máximo das N barras passadas e fechar a posição longa quando o preço de fechamento ultrapassa o mínimo mínimo das N barras passadas. Comparando o preço atual com os preços mais altos e mais baixos das N barras passadas, esta estratégia visa capturar fortes movimentos de breakout e alcançar o efeito de seguir a tendência.

Princípio da estratégia

  1. Calcular o mais alto (mais alto) e o mais baixo (mais baixo) dos últimos N bares.
  2. Se o preço de fechamento atual for superior ao mais elevado, abrir uma posição longa (long).
  3. Se o preço de fechamento atual for inferior ao mais baixo, fechar a posição longa (curta).
  4. O preço de fechamento (fechamento) ou o preço alto/baixo (alto/baixo) podem ser utilizados como fonte de sinal.
  5. Dependendo da fonte de sinal, utilizar ta.highest e ta.lowest para calcular os preços mais altos e mais baixos.
  6. Usar ta.crossover e ta.crossunder para determinar a variação dos preços.

Vantagens da estratégia

  1. Lógica simples e clara, fácil de implementar e otimizar.
  2. Pode capturar efetivamente fortes movimentos de ruptura, com forte capacidade de seguir tendências.
  3. Grande espaço para otimização de parâmetros, pode ser otimizado para diferentes instrumentos e prazos.
  4. Ampla aplicabilidade, desempenha-se bem para a maioria dos instrumentos e prazos.
  5. Escolha flexível da fonte de sinal, melhorando a adaptabilidade da estratégia.

Riscos estratégicos

  1. Desempenha-se mal em mercados agitados e de pequenas flutuações, com abertura e encerramento frequentes de posições que levam a elevados custos de transacção.
  2. A selecção inadequada dos parâmetros pode conduzir a um risco de sobreajuste.
  3. Pode sofrer grandes retrações durante inversões de tendência.
  4. Uma única fonte de sinal pode correr o risco de distorção do sinal.

Orientações para a otimização da estratégia

  1. Adicionar condições de filtragem da tendência, tais como direção da tendência MA, ADX, etc., para reduzir a negociação em mercados agitados.
  2. Otimizar a seleção de parâmetros, como o valor N, a fonte de sinal, etc., para melhorar a estabilidade e a rentabilidade da estratégia.
  3. Adicionar a lógica de stop-loss e de stop-loss para controlar o risco de negociação única.
  4. Combinar múltiplas fontes de sinal para melhorar a fiabilidade do sinal, como considerar tanto o preço de fechamento como as rupturas de preço alto/baixo.
  5. Otimizar os parâmetros e a lógica separadamente para diferentes instrumentos e prazos.

Resumo

A estratégia de ruptura de N Bars é uma estratégia quantitativa simples e prática de negociação que alcança bons efeitos de tendência através da captura de rupturas de preço. A estratégia tem lógica clara, grande espaço de otimização e ampla aplicabilidade, tornando-a uma estratégia quantitativa que vale a pena mais pesquisa e otimização. Através de otimização razoável de parâmetros e melhoria da lógica, a estabilidade e rentabilidade desta estratégia podem ser melhoradas para se adaptar melhor a diferentes ambientes de mercado.


/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Breakout", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(5, "N Bars", minval=1)
src_input = input.string("Close", "Source", ["Close", "High/Low"])

bull_src = switch src_input
	"Close" => close
	"High/Low" => high
	=>
		runtime.error("Invalid source input")
		na

bear_src = switch src_input
	"Close" => close
	"High/Low" => low
	=>
		runtime.error("Invalid source input")
		na

highest = ta.highest(bull_src[1], n)
lowest = ta.lowest(bear_src[1], n)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

bool long = ta.crossover(bull_src, highest)
bool short = ta.crossunder(bear_src, lowest)

//Plots
lowest_plot  = plot(lowest,  color=color.red, title="Lowest")
highest_plot  = plot(highest,  color=color.green, title="Highest")
bull_src_plot = plot(bull_src, color=color.blue, title="Bull")
bear_src_plot = plot(bear_src, color=color.orange, title="Bear")

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)

Mais.