FRAMA e estratégia de negociação cruzada de média móvel baseada na média móvel dupla

Autora:ChaoZhang, Data: 22-12-2023 16:08:23
Tags:

img

Resumo

Esta estratégia calcula primeiro as médias móveis simples de 13 períodos e 26 períodos e, em seguida, calcula o indicador FRAMA.

Princípio da estratégia

A estratégia usa principalmente o cruzamento da média móvel para gerar sinais de negociação. Quando a média móvel de curto prazo quebra a média móvel de longo prazo de baixo para cima, indica que a tendência está mudando de queda para alta e vai longo. Quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo, indica uma reversão iminente e fecha a posição.

Enquanto isso, o indicador FRAMA é introduzido como um julgamento auxiliar. O indicador FRAMA é uma linha média móvel adaptativa melhorada com base na hipótese do mercado fractal. Ao calcular a taxa de mudança logarítmica da amplitude de flutuação de preços em diferentes períodos, estimou a dimensão fractal do mercado em tempo real para ajustar dinamicamente a suavidade da média móvel. Quando o indicador FRAMA cruza abaixo do preço de fechamento, ele indica um sinal de reversão de tendência. Combinado com o sinal de cruzamento da média móvel, melhora a precisão do julgamento.

Análise das vantagens

A estratégia combina crossover de média móvel dupla e indicador FRAMA, que pode efetivamente filtrar falsos sinais de ruptura e melhorar a qualidade dos sinais de negociação.

Em comparação com um único indicador e modelo, esta estratégia pode melhorar significativamente a qualidade do sinal e reduzir a probabilidade de erro de julgamento.

Análise de riscos

Os principais riscos desta estratégia consistem no facto de as médias móveis duplas poderem produzir mais sinais de ruptura falsos, e as definições dos parâmetros do indicador FRAMA também afetarão a eficácia.

Para controlar os riscos acima, parâmetros como os períodos médios móveis podem ser ajustados em conformidade, ou filtrados com outros indicadores.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste mais combinações e períodos de médias móveis para encontrar o par de parâmetros ideal.

  2. Adicionar estratégia de stop loss para controlar a perda única.

  3. Combinar indicadores de volume de negociação para evitar uma falha de ruptura em baixo volume.

  4. Adicionar modelos de machine learning para avaliar o estado do mercado em tempo real e ajustar dinamicamente os parâmetros.

  5. Combinar indicadores de sentimento, notícias e outros múltiplos fatores para melhorar a qualidade das decisões.

Conclusão

Esta estratégia preliminar combina a aplicação de crossover de média móvel dupla e indicador FRAMA. Com base em manter a simplicidade e a intuição, ele melhorou efetivamente a qualidade do sinal e vale a pena mais testes e otimização. Com otimizações como ajuste de parâmetros, introdução de novos indicadores, pode-se esperar que esta estratégia se torne uma estratégia de negociação estável e confiável.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Fractal Adaptive Moving Average",shorttitle="FRAMA",overlay=true)


ma_fast = sma(close,13)

ma_slow = sma(close,26)
plot(ma_fast,color = green)
plot(ma_slow, color = yellow)
price = input(hl2)
len = input(defval=16,minval=1)
FC = input(defval=1,minval=1)
SC = input(defval=198,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price
plot(out,title="FRAMA",color=purple,transp=0)
entry() => crossover(ma_fast, ma_slow) and (out < close)
exit() => crossover(ma_slow, ma_fast) or crossunder(out, close)

strategy.entry(id= "MA cross", long = true, when = entry())
strategy.close(id= "MA cross", when = exit())

Mais.