Estratégia de tendência adaptativa de combinação de vários indicadores

Autora:ChaoZhang, Data: 2023-12-19 11:01:05
Tags:

img

Resumo

Esta estratégia avalia com precisão a tendência, combinando o indicador de média móvel Hull dupla, o indicador de média móvel ponderada por volume, o indicador MACD e o indicador do índice de força real.

Princípio da estratégia

O indicador central desta estratégia é a média móvel de Hull dupla, que é controlada por dois parâmetros keh e teh. Estes dois parâmetros determinam o ciclo da linha rápida e linha lenta, respectivamente.

O indicador de julgamento auxiliar é a média móvel ponderada por volume meh1.

Outro indicador de julgamento auxiliar é o MACD. Ele é obtido subtraindo a média móvel rápida da média móvel lenta para obter o MACD e, em seguida, usando a média móvel do MACD para obter a linha de sinal.

O último indicador de julgamento auxiliar é o TSI, que é calculado pela dupla suavização da taxa de mudança de preço. Sua magnitude de valor absoluto representa o ímpeto da mudança de preço. Nas condições de compra e venda, a linha de sinal do TSI é julgada para controlar o tempo das entradas e saídas.

Ao combinar os sinais destes indicadores, a tendência pode ser julgada com precisão e os parâmetros podem ser ajustados automaticamente para sincronizar com o mercado.

Vantagens

  1. A utilização da média móvel de Hull dupla como principal indicador de julgamento, combinada com vários outros indicadores, pode melhorar a precisão do julgamento e reduzir os falsos sinais.

  2. A aplicação do indicador da ETI para determinar o momento da entrada e saída do mercado pode controlar os riscos.

  3. Vários parâmetros ajustáveis para uma forte adaptabilidade que se pode adaptar automaticamente às alterações do mercado.

  4. A ideia de combinação de indicadores e de auto-adaptação dos parâmetros torna a estratégia estável com uma forte rentabilidade contínua.

Análise de riscos

  1. Embora o indicador TSI seja usado para determinar o momento, os indicadores utilizados no algoritmo ainda são tipos de tendência.

  2. As configurações incorretas de parâmetros podem causar falhas na estratégia.

  3. A combinação de múltiplos indicadores aumenta o volume de cálculo, o que aumenta a possibilidade de erros em grandes conjuntos de dados e períodos de tempo.

  4. Necessidade de monitorizar o efeito de cálculo dos indicadores para evitar interferências de dados anormais.

Direcção de otimização

  1. Outros indicadores auxiliares, como o BOLL, podem ser testados para tornar o sinal mais preciso e confiável.

  2. Otimizar a lógica de entrada e saída, definir as condições de stop loss e take profit para controlar o lucro e a perda individuais.

  3. Treinar e otimizar parâmetros para diferentes variedades para melhor adaptá-los a diferentes variedades.

  4. Aumentar o módulo de autoadaptação de parâmetros para ajustar automaticamente os parâmetros da estratégia com base nos efeitos das transações recentes.

Resumo

Esta estratégia integra as vantagens de múltiplos indicadores e usa combinações de indicadores para julgar a direção da tendência. Ao mesmo tempo em que controla os riscos, melhora a precisão dos julgamentos. Através da otimização de parâmetros e otimização lógica, a estratégia pode ser melhor adaptada às mudanças do mercado, reduzindo as perdas consecutivas e ganhando maiores lucros. Esta estratégia é estável e pode ser usada para ações, criptomoedas e outras variedades a longo prazo.


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

//@version=2
//                                                    Quad-HullMA-cross & VWMA & MacD & TSI combination  <<<<< by SeaSide420 >>>>>>
strategy("MultiCross420", overlay=true, calc_on_order_fills= true, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
keh=input(title="Double HullMA 1",defval=7, minval=1)
teh=input(title="Double HullMA 2",defval=14, minval=1)
meh=input(title="VWMA",defval=1, minval=1)
meh1=vwma(close,round(meh))
n2ma=2*wma(close,round(keh/2))
nma=wma(close,keh)
diff=n2ma-nma,sqn=round(sqrt(keh))
n2ma1=2*wma(close[2],round(keh/2))
nma1=wma(close[2],keh)
diff1=n2ma1-nma1,sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
b=n1>n2?lime:red
c=n1>n2?green:red
n2ma3=2*wma(close,round(teh/2))
nma2=wma(close,teh)
diff2=n2ma3-nma2,sqn2=round(sqrt(teh))
n2ma4=2*wma(close[2],round(teh/2))
nma3=wma(close[2],teh)
diff3=n2ma4-nma3,sqn3=round(sqrt(teh))
n3=wma(diff2,sqn2)
n4=wma(diff3,sqn3)
fastLength = input(title="MacD fastLength", defval=7)
slowlength = input(title="MacD slowlength", defval=14)
MACDLength = input(title="MacD Length", defval=3)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
a1=plot(n1,color=c),a2=plot(n2,color=c)
plot(cross(n1, n2) ? n1 : na, style = cross, color=b, linewidth = 3)
a3=plot(n3,color=c),a4=plot(n4,color=c)
plot(cross(n3, n4) ? n1 : na, style = cross, color=b, linewidth = 3)
//a5=plot(meh1,color=c)
long = input(title="TSI Long Length",  defval=5)
short = input(title="TSI Short Length",  defval=3)
signal = input(title="TSI Signal Length",  defval=2)
linebuy = input(title="TSI Upper Line",  defval=4)
linesell = input(title="TSI Lower Line",  defval=-4)
price = close
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
closelong = n1<n2 and n3<n4 and n1>meh1
if (closelong)
    strategy.close("Long")
closeshort = n1>n2 and n3>n4 and n1<meh1
if (closeshort)
    strategy.close("Short") 
longCondition = strategy.opentrades<1 and n1>n2 and MACD>aMACD and n1<meh1 and n3>n4 and ema(tsi_value, signal)>linesell
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = strategy.opentrades<1  and n1<n2 and MACD<aMACD and n1>meh1 and n3<n4 and ema(tsi_value, signal)<linebuy
if (shortCondition)
    strategy.entry("Short",strategy.short)

Mais.