Estratégia de acompanhamento da tendência bidirecional baseada na ruptura do intervalo

Autora:ChaoZhang, Data: 2024-02-01 14:22:26
Tags:

img

Resumo

Esta estratégia calcula o último preço mais alto (lastbull) e o último preço mais baixo (lastbear). Em seguida, compara o preço atual com o lastbull e o lastbear para determinar se o preço entrou em um determinado intervalo e, assim, gera sinais de negociação.

Estratégia lógica

A estratégia calcula primeiro o último preço mais elevado lastbull e o último preço mais baixo lastbear. em seguida, calcula a percentagem de mudança ddl do preço corrente próximo em relação ao lastbull, e a percentagem de mudança dds em relação ao lastbear.

Quando ddl é inferior ao sinal de limiar de sinal longo configurado, um sinal longo é gerado. Quando dds é superior ao sinal de limiar de sinal curto configurado, um sinal curto dn é gerado.

Após receber o sinal longo, ele abre uma posição longa se o parâmetro needlong for verdadeiro. Após receber o sinal curto, ele abre uma posição curta se o parâmetro needshort for verdadeiro. O tamanho da posição é calculado a partir do capital da conta.

Fecha uma posição longa quando o preço sobe após a abertura longa e fecha uma posição curta quando o preço cai após a abertura curta.

Análise das vantagens

Esta estratégia combina tendência e análise de intervalo. Ela pode capturar tendências e gerar sinais de negociação a partir de quebras de intervalo. Em comparação com estratégias simples de rastreamento de tendências, ela pode rapidamente capturar uma nova direção de tendência após a quebra de intervalo.

Os parâmetros são altamente configuráveis para diferentes produtos. O intervalo de tempo de negociação pode ser configurado para evitar eventos significativos.

Análise de riscos

Não há nenhum mecanismo de stop loss nesta estratégia para limitar a perda por negociação.

O algoritmo de dimensionamento de posição pode ser personalizado com base em produtos para estabilizar o tamanho da posição.

Orientações de otimização

  1. Adicionar stop loss móvel ao controlo por risco de perda de negociação
  2. Melhorar o algoritmo de dimensionamento da posição, por exemplo, utilizar o ATR, para estabilizar o tamanho da posição
  3. Adicionar filtragem para sinais de entrada, por exemplo, inserir apenas quando ocorre cruz de ouro
  4. Comércio de produtos múltiplos com correlação com risco sistémico mais baixo

Resumo

Esta estratégia combina análise de tendências e quebra de faixa para gerar sinais de negociação, que podem capturar novas tendências e tirar proveito das características de faixa.


/*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)

Mais.