Estratégia de negociação bidirecional de índice direcional


Data de criação: 2023-12-19 14:13:52 última modificação: 2023-12-19 14:13:52
cópia: 0 Cliques: 669
1
focar em
1621
Seguidores

Estratégia de negociação bidirecional de índice direcional

Visão geral

A estratégia permite a negociação bidirecional de mercadorias, calculado o índice de movimento do commodity ((DI) e combinado com o parâmetro de restrição. Faça mais quando o DI + é maior que o DI - um parâmetro de restrição e faça zero quando o DI - é maior que o DI + um parâmetro de restrição.

Princípio da estratégia

O indicador central da estratégia é o índice de tendência ((DI)). O DI é calculado pela seguinte fórmula:

DI+ = (DM+ / real range) * 100 DI- = (DM- / real range) * 100

O DM+ representa a movimentação de várias cabeças e o DM- representa a movimentação de cabeças vazias. A faixa real representa a amplitude de flutuação recente, calculada pelo valor máximo dos três máximos, mínimos e preços de fechamento de ontem.

De acordo com a definição de DI, quando DI+ > DI- indica que a força de cabeça vazia é maior do que a força de cabeça vazia, pertence ao mercado de cabeça vazia; quando DI- > DI+ indica que a força de cabeça vazia é maior do que a força de cabeça vazia, pertence ao mercado de cabeça vazia.

A estratégia usa essa característica para definir um parâmetro de limitação. Quando o DI+ é maior que o DI- um parâmetro de limitação, julgue que o mercado está lotado e faça mais; Quando o DI- é maior que o DI+ um parâmetro de limitação, julgue que o mercado está vazio e faça vazio.

Por exemplo, se o parâmetro de restrição for definido como 3, então as regras de negociação específicas são:

  1. Quando DI+ - DI- > 3, faça mais
  2. Quando DI- - DI+ > 3, faça um vazio

Uma das vantagens da estratégia é que, uma vez que há frequentemente uma menor variação de diferença entre o DI+ e o DI- , a configuração de parâmetros de restrição pode filtrar alguns sinais de negociação sem uma direção óbvia, reduzindo o número de transações desnecessárias.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O DI é muito orientado e confiável.

O DI julga diretamente a tendência do mercado por meio do cálculo da força dos dois lados do polinômio, sem algoritmos complexos, como o ajuste da curva, a teoria é simples e confiável.

  1. Configuração de parâmetros de restrição para filtrar os sinais de forma eficaz

Ao limitar os parâmetros de filtragem, sem flutuações de pequena dimensão de direção óbvia, escolha apenas segmentos de mercado com uma direção óbvia e forte para negociar, evitando ser encaixado.

  1. Realização de transações bidirecionais automáticas

A posição multi-vaga pode ser automaticamente trocada de acordo com o indicador DI, sem necessidade de julgamento manual, reduzindo a dificuldade de negociação.

  1. Período de negociação personalizável

A configuração de suporte para negociar somente dentro de um intervalo de data personalizado, liquidação automática após o término, flexibilidade e conveniência.

  1. Pode escolher fazer apenas mais ou apenas em branco, de acordo com a sua situação

Com um interruptor multi-espaço, você pode selecionar apenas um sinal unidirecional, para realizar apenas mais ou apenas espaço, para se adaptar a diferentes condições de mercado.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. Possibilidade de um DI emitir um sinal errado

Quando há uma forte volatilidade no mercado, o DI pode emitir sinais errados em curto prazo, resultando em falhas de negociação. É necessário combinar outros indicadores para verificar.

  1. Parâmetros de restrição mal definidos

A configuração de parâmetros de restrição muito grande ou muito pequeno pode levar a sinais de negociação insuficientes ou excessivos, e os parâmetros precisam ser ajustados de acordo com o mercado.

  1. Não sei qual é o fim da tendência.

O DI só pode determinar a direção da tendência atual, não pode determinar se a tendência terminou ou se reverteu, e precisa de uma combinação de outros indicadores.

As soluções para os riscos incluem:

  1. Indicadores de filtragem de sinais de DI combinados com médias móveis

  2. Ajustar os parâmetros de restrição de acordo com os resultados da ressonância

  3. A análise dos volumes, MACD, etc., para determinar se a tendência está a mudar

Direção de otimização

A estratégia pode ser melhorada em:

  1. Indicadores de tendências combinados com outros indicadores, como o gráfico de opinião pública.

Indicadores mais intuitivos, como o Diagrama de Opinião Pública, combinados com o DI, podem melhorar a precisão de julgamento.

  1. Aderir a uma estratégia de stop loss

Defina um stop loss móvel, um stop loss de tempo ou de taxa, para bloquear o lucro e reduzir os prejuízos.

  1. Ajustes de parâmetros para variedades específicas

Ajustar os parâmetros de limitação e o tempo de negociação de acordo com as características de negociação de diferentes variedades pode melhorar a eficácia da estratégia.

  1. Otimização dinâmica com aprendizado de máquina

Aplicação de técnicas como aprendizagem por reforço com base em parâmetros de otimização de sinais em disco rígido.

Resumir

A estratégia em geral é simples e prática. Utiliza o método de cálculo do DI para determinar a direção da tendência, limitando o sinal de filtragem de parâmetros; pode ser negociado em dois sentidos, ou apenas em ativos ou ativos; suporta o período de negociação de configuração. O principal benefício é a alta confiabilidade e o sinal de filtragem eficaz.

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

//@version=3
strategy("Noro's DI Strategy", overlay = false, 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, %")
len = input(title="Length", defval=14)
limit = input(3, title = "limit, %")
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")

//DI
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementMinus = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100

//Trend
trend = 0
trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1]

//Background
col = trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Lines
plot(DIPlus, color=lime, title="DI+", linewidth = 3)
plot(DIMinus, color=red, title="DI-", linewidth = 3)

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if trend == 1
    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 trend == -1
    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()