Indicador de movimento direcional Estratégia de negociação bidirecional

Autora:ChaoZhang, Data: 2023-12-19 14:13:52
Tags:

img

Resumo

Esta estratégia calcula o Índice de Movimento Direcional (DI) de commodities e o combina com parâmetros de limite para implementar negociação de duas direções.

Princípio da estratégia

O indicador central desta estratégia é o Índice de Movimento Direccional (DI).

DI+ = (DM+ / Real Range) × 100 DI- = (DM- / Real Range) × 100

O Real Range representa a volatilidade recente através do cálculo do valor máximo do preço mais alto, o preço mais baixo e o preço de fechamento do dia anterior ao longo de três dias.

De acordo com a definição de DI, quando DI+ > DI-, significa que o momento do mercado atual é mais forte, pertencente a um mercado de alta; quando DI- > DI+, significa que o momento da baixa é mais forte do que o momento da alta, pertencente a um mercado de baixa.

Esta estratégia utiliza esta característica e define um parâmetro limite. Quando o DI + é maior que o DI- por um parâmetro limite, determina que o mercado atual é um mercado de alta e vai longo. Quando o DI- é maior que o DI + por um parâmetro limite, determina que o mercado atual é um mercado de baixa e vai curto.

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

  1. Quando o DI+ - DI- > 3, vá longo
  2. Quando o DI- - DI+ > 3, fazer curto

Uma vez que muitas vezes existem pequenas diferenças flutuantes entre DI+ e DI-, a fixação de um parâmetro limite pode filtrar algumas transacções sem direcionalidade significativa e reduzir transacções desnecessárias.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. A DI é fiável no julgamento da direccionalidade do mercado

    A DI julga diretamente as tendências do mercado calculando o poder dos touros e dos ursos.

  2. O parâmetro limite pode filtrar efetivamente os sinais

    O parâmetro de limite filtra pequenas flutuações sem direcionalidade significativa, selecionando apenas secções com direcionalidade significativa para o comércio, evitando ser preso.

  3. Realizar negociações automatizadas em duas direcções

    As posições longas e curtas podem ser automaticamente trocadas com base no indicador DI sem julgamento manual, reduzindo a dificuldade de negociação.

  4. Quadro de tempo de negociação personalizável

    Suporta a configuração para negociar apenas dentro de um intervalo de datas personalizável e fechar todas as posições automaticamente depois, flexível e conveniente.

  5. Apenas selecionável longo ou curto

    Através dos interruptores longos e curtos, apenas sinais unidirecionais podem ser selecionados para implementar estratégias longas ou curtas adequadas a diferentes ambientes de mercado.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Possibilidade de o DI dar sinais errados

    O DI pode dar sinais errados a curto prazo quando ocorrem flutuações drásticas do mercado, levando a operações fracassadas.

  2. Configuração incorreta dos parâmetros de limite

    A configuração inadequada dos parâmetros de limite alto ou baixo pode conduzir a sinais de negociação demasiado poucos ou demasiados.

  3. Incapacidade de determinar o ponto final da tendência

    O DI só pode determinar a direcção actual da tendência e não pode julgar se a tendência terminou ou se reverteu.

As soluções para os riscos incluem:

  1. Combinar média móvel e outros indicadores para filtrar sinais de DI

  2. Ajustar parâmetros-limite com base nos resultados dos backtests

  3. Combine Volume, MACD etc. para determinar se a inversão da tendência

Orientações de otimização

A estratégia pode ser ainda melhorada das seguintes maneiras:

  1. Combinar outros indicadores de avaliação da tendência, como o Perfil de Mercado

    A combinação de indicadores como o Perfil de Mercado, que também julga intuitivamente a potência longa e curta com a DI, pode melhorar a precisão do julgamento.

  2. Adicionar estratégias de stop-profit e stop-loss

    A definição de stop-profit, tempo ou percentual de stop-loss pode garantir lucros e reduzir perdas.

  3. Ajustar parâmetros para produtos específicos

    O ajustamento dos parâmetros de limite e dos tempos de negociação em função das diferentes características do produto pode melhorar o desempenho da estratégia.

  4. Optimização dinâmica utilizando aprendizagem de máquina

    Aplicar algoritmos de aprendizagem por reforço para otimizar dinamicamente as definições dos parâmetros com base em sinais em tempo real.

Resumo

Em resumo, esta estratégia é relativamente simples e prática. Utiliza o cálculo de DIs para determinar a direção do mercado; filtra sinais através de parâmetros de limite; suporta negociação de dupla direção ou apenas longo / curto; permite definir um prazo de negociação. As principais vantagens são alta confiabilidade e filtragem eficaz de sinal. Também tem problemas como sinais errados e configurações de parâmetros. Podemos melhorá-lo combinando outros indicadores, definindo stop-loss / lucro, ajustando parâmetros etc., ou otimizando-o dinamicamente com aprendizado de máquina.


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

Mais.