Obrigado pelo bom artigo. Mas não posso deixar de criticá-lo. Estou com esse humor hoje.
O artigo dá atenção especial não tanto à codificação quanto às fórmulas e à otimização dos cálculos. Mas acho que ele será mais útil para programadores iniciantes e para aqueles que começaram recentemente a prestar atenção à possibilidade de usar diferentes operadores de loop. Espero que os próximos artigos reflitam isso. Afinal, existem pelo menos 3 operadores de loop na MQL5. E qualquer um deles pode ser usado para criar um indicador.
informações úteis, tudo de uma vez em um só lugar,
e, finalmente, o loop i++
Um bom artigo para iniciantes que mostra o código por trás das 4 médias MQ padrão.
Você também deve discutir a importância da otimização simples e seu impacto, já que 99% dos ticks ocorrem entre as mudanças de barra. Minimizar os cálculos entre cada mudança de barra proporcionará uma eficiência muito maior ao custo de um pouco de complexidade. Assim, calcular os valores de base uma vez na mudança de barra e salvar os valores produzirá reduções significativas no tempo de cálculo. Por exemplo, com um SAM, o cálculo padrão para N períodos é:
Considere
double sm=0;
for(int bar=0;bar<N;bar++) sum+=Close[CurrentBar-bar];
SMA=sum/N;
versus
static double partialsum;
double sum=0;
Na mudança de barra{
partialsum=0;
for(int bar=0;bar<N-1;bar++) partialsum+=Close[CurrentBar-bar];
partialsum/=(N-1);
}
SMA =partialsum +Close[CurrentBar]/N;
Se houver 1.000 ticks em um período de barra e N=10, essa otimização economizará cerca de 90.000 cálculos de sum+=Close[EndingBar-bar] para cada barra. Se o seu gráfico contiver 1.000 barras, a economia será de mais de 90 milhões de cálculos desnecessários. Com as CPUs modernas, essa economia gerada por esse exemplo é trivial e provavelmente não é perceptível.
A importância da otimização manual é que você está desenvolvendo melhores técnicas de programação que se tornarão uma segunda natureza para você em projetos futuros.
Obrigado por seu artigo, mas não está claro por que, depois de usar a função OnCalculate(), não posso mais usar a função de transação OrderSend(). Não sei como o autor resolveu esse problema, mas não tenho outra opção a não ser usar os indicadores na biblioteca padrão da seguinte maneira:
#property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <Indicators\Trend.mqh> CiMA ma; //+------------------------------------------------------------------+ //| Função de início do programa de script   Função de início do programa de script //+------------------------------------------------------------------+ int OnInit(){ ma.DeleteFromChart(ChartID(), 0); ma.Create(_Symbol, PERIOD_CURRENT, 14, 0, MODE_SMA, PRICE_CLOSE); ma.AddToChart(PERIOD_CURRENT, 0); return INIT_SUCCEEDED; } void OnTick(){ ma.Refresh(); double curMA = ma.Main(0); //Print("Current MA value:", maValue); }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Média Móvel em MQL5 do zero: Simples e acessível foi publicado:
Exploramos os princípios de cálculo dos principais tipos de médias móveis disponíveis nas configurações do indicador padrão Moving Average no terminal cliente. Os cálculos apresentados neste artigo podem ser usados tanto em indicadores com otimização de cálculos (como também demonstrado no artigo) quanto como códigos independentes para calcular médias de conjuntos sequenciais de dados em seus próprios programas.
Na imagem acima, foi mostrada a diferença entre médias móveis com o mesmo período de cálculo (10), mas de tipos diferentes:
Vermelha - SMA, verde - EMA, dourada - SMMA, azul - LWMA.
É possível ver que a média móvel suavizada é a menos afetada por pequenas flutuações de preço e mostra de maneira mais clara a tendência geral do movimento dos preços.
As médias móveis exponencial e linearmente ponderada reagem de maneira mais intensa às oscilações do mercado, pois em seus cálculos o maior peso é atribuído aos dados mais recentes.
Autor: Artyom Trishkin