Tendência de ímpeto na sequência da estratégia de oscilação

Autora:ChaoZhang, Data: 2023-11-16 16:46:51
Tags:

img

Resumo

Esta estratégia combina indicadores de média móvel, volume de preços e oscilação para formar filtros triplos, visando captar tendências a médio prazo e obter bons retornos durante tendências nos mercados.

Princípios

A estratégia consiste em três componentes principais:

  1. Indicadores da média móvel

Use a EMA de 20 dias e a EMA de 60 dias para construir um filtro de tendência. Um sinal de compra é gerado quando o MA de curto prazo cruza acima do MA de longo prazo. Um sinal de venda é gerado quando o MA de curto prazo cruza abaixo do MA de longo prazo.

  1. Indicador de volume-preço

Usar volume sobre volume de negócios para calcular o indicador VP, julgando as direções do fluxo de capital. VP crescente sugere entrada líquida enquanto VP decrescente sugere saída líquida.

  1. Bandeiras de Bollinger

Use a largura do canal de Donchian de 20 dias para calcular o parâmetro de bandas de Bollinger, formando bandas superiores e inferiores.

A combinação dos três componentes constrói uma estratégia de tendência. Gerar sinais de compra quando o MA curto cruza acima do MA longo, o VP está em tendência de alta e o preço acabou de sair da faixa superior.

Vantagens

A estratégia apresenta as seguintes vantagens:

  1. Os filtros de indicadores triplos ajudam a evitar falhas.

  2. Considerando a tendência, o fluxo de capital e a sobrecompra/supervenda melhora a fiabilidade do sinal.

  3. Parâmetros otimizados adequados a diferentes períodos e produtos.

  4. Retiradas controladas e rendimentos constantes.

  5. Lógica clara e ajuste flexível de parâmetros.

Riscos

Há também alguns riscos:

  1. Riscos de reversão da tendência.

  2. VP atrasa as alterações de preços e pode perder pontos de entrada ou saída.

  3. A regulação dos parâmetros é difícil, os parâmetros precisam de ser ajustados para diferentes produtos e prazos.

  4. O controlo de redução precisa de melhorias, para otimizar com paradas dinâmicas ou dimensionamento de posição.

Orientações para a melhoria

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar métodos de stop loss, como trailing stop, para controlar os drawdowns.

  2. Adicionar um módulo de dimensionamento de posições para ajustar dinamicamente as dimensões com base na volatilidade.

  3. Otimizar parâmetros para encontrar os melhores conjuntos para diferentes produtos e períodos.

  4. Aumentar os modelos de aprendizagem de máquina para melhorar a precisão do sinal.

  5. Incorporar sentimentos e análises de notícias para julgar eventos repentinos.

Conclusão

A estratégia combina os indicadores MA, VP e Bollinger Band para ter um bom desempenho na captura de tendências de médio prazo.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Secon strategy
// The Average Directional Movement Index Rating (ADXR) measures the strength 
// of the Average Directional Movement Index (ADX). It's calculated by taking 
// the average of the current ADX and the ADX from one time period before 
// (time periods can vary, but the most typical period used is 14 days).
// Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening 
// and weakening trends. However, because it represents an average of ADX, values 
// don't fluctuate as dramatically and some analysts believe the indicator helps 
// better display trends in volatile markets.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

ADXR(LengthADX, LengthADXR, Signal1, Signal2) =>
    xADX = fADX(LengthADX)
    xADXR = (xADX + xADX[LengthADXR]) / 2
    pos = 0.0
    pos := iff(xADXR < Signal1, 1,
           iff(xADXR > Signal2, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Average Directional Movement Index Rating", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthADX = input(title="Length ADX", defval=14)
LengthADXR = input(title="Length ADXR", defval=14)
Signal1 = input(13, step=0.01)
Signal2 = input(45, step=0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posADXR = ADXR(LengthADX, LengthADXR, Signal1, Signal2 )
pos = iff(posReversal123 == 1 and posADXR == 1 , 1,
	   iff(posReversal123 == -1 and posADXR == -1, -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)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 

Mais.