Análise do teste de retorno da estratégia de arbitragem de impulso

Autora:ChaoZhang, Data: 2023-10-25 11:10:59
Tags:

img

I. Nome da estratégia

Com base nas principais características desta estratégia, dou-lhe o nome de Momentum Arbitrage Strategy.

II. Visão geral da estratégia

Esta estratégia gera sinais de negociação através do cálculo do Oscilador de Momento Chande e do estabelecimento de limiares superiores e inferiores, formando oportunidades de arbitragem para lucros.

III. Lógica estratégica

O código define primeiro os parâmetros comprimento, TopBand e LowBand, onde o comprimento representa o número de dias para o cálculo do momento, e TopBand e LowBand representam os limiares superior e inferior.

Em seguida, calcula o ímpeto absoluto xMom nos últimos dias de comprimento, e a média móvel simples de xMom nos dias de comprimento, xSMA_mom.

Depois disso, ele calcula o momento acumulado ao longo de dias de comprimento, xMomLength.

Em seguida, ele calcula o oscilador de momento nRes, que é igual a xMomLength dividido por xSMA_mom, em seguida, multiplicado por comprimento, amplificado por 100.

Com base na comparação entre o nRes e os limiares, determina a direcção longa ou curta e armazena-a em pos.

Por fim, ajusta o posicionamento com base em se a negociação reversa está habilitada, gera o posicionamento do sinal de negociação e cria entradas longas / curtas.

IV. Forças da estratégia

  1. Identificar potenciais pontos de virada da tendência utilizando um indicador de ímpeto, beneficiando a captura da tendência.

  2. Formar sinais longos/cortos claros combinados com filtragem de limiar, evitando trocas erradas.

  3. Aplicar a lógica de negociação reversa para obter oportunidades de reversão.

  4. Grande espaço de parâmetros ajustáveis, pode ser otimizado para diferentes produtos e prazos.

  5. Os parâmetros visualizados são intuitivos, fáceis de compreender a lógica de negociação.

V. Riscos estratégicos

  1. Considerando apenas a dinâmica, pode perder oportunidades formadas por outros indicadores técnicos.

  2. A ruptura do momentum não representa necessariamente uma inversão da tendência, existe o risco de erro de julgamento.

  3. Embora o reverse trading tenha potencial de lucro, também pode amplificar as perdas.

  4. A otimização inadequada dos parâmetros pode conduzir a um excesso de negociação ou à falta dos melhores pontos de entrada.

  5. Precisamos de filtrar distorções de momento a curto prazo causadas por eventos repentinos.

Os riscos podem ser controlados combinando outros indicadores, como tendência e volatilidade, para confirmar a confiabilidade do sinal, ajustando os parâmetros para reduzir a frequência de negociação, relaxando adequadamente o stop loss, etc.

VI. Orientações para a otimização da estratégia

  1. Adicionar outros filtros de indicadores técnicos para melhorar a precisão do sinal.

Confirme que o preço de fechamento está acima do sistema de média móvel, ou que a volatilidade está dentro da faixa normal, antes de desencadear sinais de impulso.

  1. Otimizar os parâmetros de acordo com as características do produto.

Para produtos mais voláteis, relaxar o intervalo normal de limiar para uma frequência de negociação mais baixa.

  1. Optimização de vários prazos com base em diferentes períodos de tempo.

Utilize um período menor de comprimento para negociação intradiária de prazo ultra curto Ajustar parâmetros com base em gráficos semanais ou mensais para tendências de médio e longo prazo.

  1. Configure a condição de divergência inferior.

Para sinais de compra, exigir que o preço esteja acima do mínimo anterior para evitar falsos sinais de reversão.

VII. Conclusão

A estratégia identifica principalmente reversões de tendência de curto prazo através do indicador de momento, com filtragem de parâmetros para gerar sinais comerciais, acompanhamento de tendência de equilíbrio e captura de reversão.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/02/2017
//    This indicator plots Chande Momentum Oscillator. This indicator was 
//    developed by Tushar Chande. A scientist, an inventor, and a respected 
//    trading system developer, Mr. Chande developed the CMO to capture what 
//    he calls "pure momentum". For more definitive information on the CMO and 
//    other indicators we recommend the book The New Technical Trader by Tushar 
//    Chande and Stanley Kroll.
//    The CMO is closely related to, yet unique from, other momentum oriented 
//    indicators such as Relative Strength Index, Stochastic, Rate-of-Change, 
//    etc. It is most closely related to Welles Wilder`s RSI, yet it differs 
//    in several ways:
//        - It uses data for both up days and down days in the numerator, thereby 
//          directly measuring momentum;
//        - The calculations are applied on unsmoothed data. Therefore, short-term 
//          extreme movements in price are not hidden. Once calculated, smoothing 
//          can be applied to the CMO, if desired;
//        - The scale is bounded between +100 and -100, thereby allowing you to 
//          clearly see changes in net momentum using the 0 level. The bounded scale 
//          also allows you to conveniently compare values across different securities.
////////////////////////////////////////////////////////////
strategy(title="CMO (Chande Momentum Oscillator)", shorttitle="CMO")
Length = input(9, minval=1)
TopBand = input(70, minval=1)
LowBand = input(-70, maxval=-1)
reverse = input(false, title="Trade reverse")
// hline(0, color=gray, linestyle=dashed)
// hline(TopBand, color=red, linestyle=line)
// hline(LowBand, color=green, linestyle=line)
xMom = abs(close - close[1])
xSMA_mom = sma(xMom, Length)
xMomLength = close - close[Length]
nRes = 100 * (xMomLength / (xSMA_mom * Length))
pos = iff(nRes > TopBand, 1,
	   iff(nRes <= LowBand, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
         iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue)
plot(nRes, color=blue, title="CMO")

Mais.