O recurso está a ser carregado... Carregamento...

Indicador de Impulso Estratégia curta longa

Autora:ChaoZhang, Data: 2023-11-02 16:34:48
Tags:

img

Resumo

Esta estratégia utiliza indicadores de impulso, incluindo o índice direcional médio (ADX), o índice de movimento direcional (DMI) e o índice de canal de commodities (CCI) para determinar a direção da tendência e seguir as tendências.

Estratégia lógica

  1. Calcular os indicadores ADX, DMI e CCI.

    • Um ADX elevado indica uma tendência forte.
    • DMI inclui DI + e DI-. DI + mostra a força da tendência de alta, enquanto DI- mostra a força da tendência de baixa.
    • O CCI avalia os níveis de sobrecompra/supervenda: abaixo de -100 é supervenda e acima de 100 é supercompra.
  2. Determine a direcção da tendência.

    • Quando o DI+ cruza acima do DI-, é identificada uma tendência de alta.
    • Quando o DI- cruza abaixo do DI+, é identificada uma tendência descendente.
  3. Entrem em posição.

    • Quando se forma uma tendência de alta, o ADX é elevado e o CCI < -100, é longo.
    • Quando se forma uma tendência de baixa, o ADX é elevado e o CCI > 100, é corto.
  4. Posições de saída com stop loss.

    • Quando longo, sair quando o DI- cruzar abaixo do DI+.
    • Se for curto, saia quando o DI+ cruzar acima do DI-.

Análise das vantagens

  1. O ADX filtra a negociação durante tendências fracas.

  2. O DMI reduz os erros na identificação de tendências.

  3. A entrada em vigor de uma prorrogação excessiva da CCI melhora o calendário e reduz o risco.

  4. A combinação de indicadores de impulso melhora a precisão.

  5. Limites de perdas de parada por transação.

Riscos e coberturas

  1. Aumentar o limiar do ADX para garantir uma tendência suficientemente forte.

  2. DMI está atrasado na fase inicial da tendência.

  3. Alta frequência de negociação CCI, alargue a gama CCI para filtrar ruído.

  4. Considerar uma estratégia de neutralidade de mercado quando longo e curto, para cobrir o risco geral da posição.

Orientações de otimização

  1. Otimizar os parâmetros do ADX para equilibrar a filtragem do ruído e a tendência de captura.

  2. Otimizar os parâmetros do DMI para equilibrar o atraso e a sensibilidade.

  3. Otimizar os parâmetros do CCI para equilibrar a frequência de negociação e capturar reversões.

  4. Teste adição ou modificação de indicadores para melhores combinações, por exemplo MACD, KDJ.

  5. Teste em diferentes produtos para encontrar o melhor ajuste.

  6. Otimizar o dimensionamento das posições para controlar o risco, mantendo o acompanhamento da tendência.

Conclusão

A estratégia usa logicamente ADX para tendência, DMI para direção e CCI para reversões. Mas os parâmetros precisam de otimização e dimensionamento de posição para controle de risco.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true)
adxlen = input(9, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_Entry = input(25, title="ADX Entry")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)
cci_length = input(20, minval=1, title="CCI Length")
cci_ma = sma(close, cci_length)
cci = (close - cci_ma) / (0.015 * dev(close, cci_length))

stop_loss = syminfo.mintick * 100


open_longs = strategy.position_size > 0
open_shorts = strategy.position_size < 0

possible_bull = false
possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false
possible_bear = false
possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false



bool bull_entry = crossover(up,down)

if(bull_entry and up < ADX_Entry and cci < 0)
	possible_bull := true
	bull_entry := false

if(possible_bull and up > ADX_Entry and cci > -100)
	bull_entry := true

bool bear_entry = crossover(down,up)

if(bear_entry and down < ADX_Entry and cci > 0)
	possible_bear := true
	bear_entry := false

if(possible_bear and down >= ADX_Entry and cci < 100)
	bear_entry := true

strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry)
strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry )	

strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))


Mais.