Estratégia de rastreamento de tendência bidirecional com base na quebra de intervalo


Data de criação: 2024-02-01 14:22:26 última modificação: 2024-02-01 14:22:26
cópia: 2 Cliques: 307
1
focar em
1166
Seguidores

Estratégia de rastreamento de tendência bidirecional com base na quebra de intervalo

Visão geral

A estratégia gera um sinal de negociação através do cálculo do último preço de parada e do último preço de queda, combinado com o preço atual para determinar se o preço entrou em um determinado domínio. Faça mais quando o preço excede uma certa proporção do preço de parada anterior e faça zero quando o preço é inferior a uma certa proporção do preço de queda anterior.

Princípio da estratégia

A estratégia começa com o cálculo da última parada lastbull e da última parada lastbear. Em seguida, calcula-se o percentual de variação do preço atual close em relação a lastbull ddl, e o percentual de variação de lastbear dds.

Quando ddl é menor que o limite de sinal de conexão configurado signalallong, produz um sinal de conexão up, quando dds é maior que o limite de sinal de conexão configurado signalshort, produz um sinal de conexão dn。

Ao receber o sinal de fazer mais, se for necessário fazer mais parâmetros, o needlong abre mais posições para a verdade, e ao receber o sinal de fazer curto, se for necessário fazer curto, o needshort abre as posições para a verdade. O capital do fator de abertura é calculado pela conta de direitos e benefícios.

A condição de equilíbrio é que o aumento do preço após a abertura de mais posições significa mais equilíbrio, e a queda do preço após a abertura de posições significa equilíbrio.

Análise de vantagens

A estratégia combina tendências e discernimento de intervalos, tanto para capturar tendências quanto para gerar sinais de negociação usando brechas de intervalos, fazendo mais flexibilidade de troca de curto prazo. Em comparação com a simples estratégia de acompanhamento de tendências, ela pode capturar rapidamente a nova direção da tendência após a ruptura de intervalos.

Os parâmetros podem ser configurados de forma espaçosa, com flexibilidade para ajustar os parâmetros de vaga maior, adaptando-se a diferentes variedades. Pode ser configurado o período de tempo de vaga para evitar os pontos de tempo importantes.

Análise de Riscos

A estratégia não possui um mecanismo de stop loss e não pode controlar efetivamente os prejuízos individuais. Quando a variedade de negociação tem uma grande amplitude de flutuação, o cálculo da posição é vulnerável ao preço.

Pode-se definir um stop loss para limitar a perda individual. Pode-se definir uma posição de acordo com diferentes variedades de algoritmos de posição para tornar a posição mais estável.

Direção de otimização

  1. Aumentar o stop loss móvel para controlar o risco de perdas individuais
  2. Melhorias nos métodos de cálculo de posições, como o uso de ATR para um tamanho de posição mais estável
  3. Aumentar os filtros de abertura de posição, por exemplo, abrindo apenas quando o cruzamento do ouro é quebrado
  4. Combinação de transações de várias variedades, estabelecendo correlações e reduzindo o risco sistêmico

Resumir

A estratégia integra o discernimento de tendências e a geração de sinais de negociação de rupturas de intervalos, tanto para capturar novas direções de tendências quanto para aproveitar as características de oscilação de intervalos. A configuração de parâmetros é flexível e o espaço é ajustável para diferentes variedades. O espaço para otimização da estratégia é grande e pode ser melhorado de várias perspectivas para se adaptar a um ambiente de mercado mais complexo.

Código-fonte da estratégia
/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
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
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)