Para finalizar a série de artigos sobre a codificação de indicadores no MT5, resolvi compartilhar mais um vídeo explicando as razões que nos levaram modificar o código para abertura de posição simulado pelo indicador.
Quanto maior o número de comparações dos preços do candlestick, menos preciso o algoritmo se mostrava em relação ao “histórico” (quando prev_calculated é igual a 0) e o “testador de estratégia” (a cada negócio) – por incrível que pareça, em um segundo, a estimativa de volume ou a diferença do preço máximo pelo fechamento pode mudar algum critério de decisão.
A única forma de coincidir as comparações históricas com o processamento online (no testador de estratégia ou durante o trade real), é validando os critérios para abertura de posição assim que a nova barra for desenhada e comparar os valores da barra anterior.
A última versão do projeto está disponível no link:
http://aprendizfinanceiro.com.br/APF-Color-Base.zip
“Outro indicador que foi adicionado ao código foi o StdDev (desvio padrão). O objetivo é capturar a volatilidade do mercado – o valor do indicador aumenta na medida em que os preços se distanciam da média apurada (período).”
A variável “i” é o índice que representa cada barra processada. Para que possamos “identificar a barra atual (i)” e “comparar a anterior (i-1)“, podemos incluir outro índice (“k“) que será igual a “i-1” apenas quando a operação não estiver aberta – quando trade_open for igual a 0.
    for (int i=start; i < rates_total; i++) {
        HighBuf[i]=high[i];
        CloseBuf[i]=close[i];
        OpenBuf[i]=open[i];
        LowBuf[i]=low[i];
...
             int k=i;
             if (!trade_open) k=i-1;
...
             // Identificação da barra
             bool CANDLE_0          = (open[k]-close[k] == 0);
             bool CANDLE_UP       = (close[k]>open[k] && close[k]-open[k]>=1);
             bool CANDLE_DOWN  = (close[k]=1);
...
 
O ajuste anterior resolve a questão da comparação da barra anterior, mas precisamos alterar o momento em que as comparações serão liberadas. Este controle é feito pela função isNewBar.
bool isNewBar(const datetime lastbar_time, const int op_type, const int prev_calc)
  {
//--- memorize the time of opening of the last bar in the static variable
   static datetime last_time=0;
   static datetime init_time=0;
   
   datetime init_auxtime=TimeCurrent();
   int limit_time=0;
   long time_match=0;
   
   limit_time=300;
   time_match=(limit_time-(init_auxtime-init_time));
   if (time_match<0) time_match=0;
   
   string label_name1="Seconds", label_text="Seconds... "+(string) (long)time_match;
   ObjectDelete(0, label_name1);
   ObjectCreate(0, label_name1, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0,label_name1,OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0)-100);
   ObjectSetInteger(0,label_name1,OBJPROP_YDISTANCE,30);
   ObjectSetInteger(0,label_name1,OBJPROP_COLOR,YellowGreen);
   ObjectSetString(0,label_name1,OBJPROP_TEXT,label_text);
   
   if (last_time==0 || init_time==0 || last_time!=lastbar_time) {
      last_time=lastbar_time;
      init_time=init_auxtime;
      if (last_time==0) return(false);
      if (prev_calc==0 || op_type==1) return(true);
      return(false);
   }
   if (op_type==2 && time_match<=2) return(true);
   
   return(false);
  }
Todas as atualizações do projeto serão disponibilizadas no github:
https://github.com/betolj/Trade-MT5
Para quem ainda não estiver muito confortável com a codificação em MQL5, recomendo dedicar tempinho para acessar o canal do Vilela One (bastante didático):
https://www.youtube.com/watch?v=lRWTQTllYQU&list=PLpAIvw0R8TvOBB3FVRZgmw_khMtr45oEL
Em breve, começaremos abordar a codificação do Expert Advisor!
Boa Noite,
Muito Boa sua aula, entretanto ainda estou bem no começo, o link que mencionou ser didático não esta mais no ar, tem alguma outra sugestão?
https://www.youtube.com/channel/UCMEarUKP3ALctWTDxccj4Yg
Bom dia,
Obrigado por avisar, acho que ele mudou o nome do canal – deu trabalho para achar novamente (rsrsrsrs).
Não sei porque esse pessoal faz isto… seria melhor criar um canal novo e, no antigo, avisar que apenas mudou.
O link correto agora é este (Vilela One):
https://www.youtube.com/watch?v=lRWTQTllYQU&list=PLpAIvw0R8TvOBB3FVRZgmw_khMtr45oEL
Muito bom.