A média móvel binomial (BMA) é um novo tipo de indicador de média móvel.
Esta estratégia combina BMA rápido e BMA lento para gerar sinais de negociação como o MACD, pertencente à estratégia de tendência.
Estratégia de tendência de média móvel binomial
Calcule a média móvel binomial (BMA). De acordo com o período definido pelo usuário, ele calcula os coeficientes binomiais e leva metade deles como pesos para preços médios. Por exemplo, com o período 5, ele calcula 9 coeficientes binomiais e leva sua metade para média ponderada. Isso dá mais peso às velas recentes e melhor suavidade.
Configure período BMA rápido e período BMA lento. O BMA rápido é mais sensível às mudanças de preço, enquanto o BMA lento é mais estável.
Quando o BMA rápido sobe acima do BMA lento, a posição longa é aberta. Quando o BMA rápido cai abaixo do BMA lento, a posição curta é aberta. Mantenha a posição até que apareça o sinal oposto.
A maior vantagem desta estratégia reside no cálculo inovador da BMA. Ela aumenta os pontos fortes das médias móveis com melhor suavidade e praticidade. Em comparação com a EMA e SMA, a BMA dá mais peso às velas recentes, mantendo mais informações históricas. Isso permite que ela capture melhor as tendências e gere menos falsos sinais.
Além disso, a combinação rápida e lenta do BMA faz pleno uso das vantagens das médias móveis. Ele filtra muito ruído e só produz sinais em pontos de virada da tendência. A própria estratégia é simples de entender e implementar, adequada para negociação de médio a longo prazo.
Os principais riscos desta estratégia incluem:
Como todas as estratégias de tendência, pode levar a perdas quando a tendência se inverte.
A configuração incorreta dos parâmetros da BMA também afeta o desempenho da estratégia. A BMA rápida excessivamente sensível pode gerar sinais falsos, enquanto a BMA lenta atrasada pode perder oportunidades de tendência. São necessários testes extensos para encontrar a combinação ideal de parâmetros.
A estratégia, por padrão, utiliza a posição total.
As principais direcções de otimização são o teste do próprio BMA e da combinação de parâmetros.
Configuração de período: teste diferentes períodos BMA rápidos e BMA lentos para encontrar a combinação ideal. Geralmente, o período rápido está entre 10-30, o período lento entre 20-60.
Peso BMA: Teste diferentes esquemas de ponderação, como distribuir completamente metade dos coeficientes binomiais ou colocar mais peso em velas recentes.
Podem ser adicionadas condições de filtragem, como quebras e aumento de volume, para evitar sinais irracionais.
O mecanismo de stop loss e o dimensionamento da posição também podem ser testados para melhor controlar os riscos.
Esta estratégia, em primeiro lugar, propõe o indicador Binomial Moving Average único. Ele melhora o cálculo da média móvel e melhora a utilidade e a estabilidade geral da estratégia. Os cruzamentos entre BMA rápido e lento geram sinais de negociação simples, mas eficazes.
/*backtest start: 2022-12-07 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HosseinDaftary //@version=4 strategy("Binomial Moving Average","BMA", overlay=true, margin_long=100, margin_short=100 ,max_bars_back=96) //Binomial Moving Average:This type of moving average that is made by myself and i did not see anywhere before uses the half of binomial cofficients for //averaging the prices for example if the period be 5 then we use the 9 degree binomial cofficients(that yields 10 cofficients) and use half of them. //we use 126/256 for last bar,84/256,36/256,9/256 and finally use 1/256 for 5th bar. Seemingly this MA works better than EMA. fa_ma=input(title='Fast MA',defval=10) sl_ma=input(title='Slow MA',defval=30) fac(n)=> fact=1 for i= 1 to n fact:=fact*i fact cof= array.new_float(sl_ma) hn_ma(price,length)=> sum=1.0 sum1=0.0 array.set(cof,length-1,1) for i=2 to length array.set(cof,length-i,fac(2*length-1)/(fac(i-1)*fac(2*length-i))) sum:=sum+array.get(cof,length-i) for i=0 to length-1 array.set(cof,i,array.get(cof,i)/sum) sum1:=sum1+array.get(cof,i)*price[i] sum1 hn1=plot(hn_ma(close,sl_ma) , color=#00ff00) hn2=plot(hn_ma(close,fa_ma) ,color=#ff0000) fill(hn1,hn2,color=hn_ma(close,fa_ma)>hn_ma(close,sl_ma)?color.green:color.red) longCondition = crossover(hn_ma(close, fa_ma), hn_ma(close, sl_ma)) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(hn_ma(close, fa_ma), hn_ma(close, sl_ma)) if (shortCondition) strategy.entry("Short", strategy.short)