Indicadores: ID Lite Info MA

 

ID Lite Info MA:

Os indicador mostra os valores das médias móveis (MA), a diferença entre os valores e a diferença entre as MA.

Linhas indicadoras, marcas e diferenças de pontos entre os preços máximo e mínimos, arredondados para dois dígitos decimais, em um gráfico de 3 dígitos

Autor: Dina Paches

 

Se esse indicador não funcionar para você. E o MetaEditor de seu terminal de negociação mostrar essas mensagens de erro ao compilar um arquivo com esse indicador (pode ser, por exemplo, ao compilá-lo para a 1150ª versão do MetaTrader5):



Para compilar e executar esse indicador:

1. Copie essa função e adicione-a ao final do código do indicador:

//+------------------------------------------------------------------+
//| Exclusão de objetos por prefixo comum em nomes de objetos
//||(e tipo de objeto, se necessário):|
//| 2014 (última modificação: 14.07.2015), Dina Paches |
//| https://login.mql5.com/ru/users/dipach |
//+------------------------------------------------------------------+
//| string prefix_obj = prefixo comum em nomes de objetos
//| long chart_ID = identificador do gráfico 
//| int sub_window=-1 = índice da janela|
//| int type=-1 = tipo de objeto (ou em vez de int - tipo de objeto por |
//| enumeração ENUM_OBJECT)|
//| int start_pos=-1 = posição inicial da substring do prefixo comum em |
//| o nome dos objetos|
//+------------------------------------------------------------------+
void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1,
               int type=-1,int start_pos=0)
  {
   int quantObj=ObjectsTotal(chart_ID,sub_window,type);
   if(quantObj>0)
     {
      int count=0;
      int prefixLen=StringLen(prefix_obj);
      string name[];
      ArrayResize(name,quantObj,quantObj+1);
      ArraySetAsSeries(name,true);

      for(int i=quantObj;i>=0;i--)
        {
         string objNameX=ObjectName(chart_ID,i,sub_window,type);
         string findValue=StringSubstr(objNameX,start_pos,prefixLen);

         if(StringCompare(findValue,prefix_obj,true)==0)
           {
            count=count+1;
            name[count-1]=objNameX;
           }
        }
      if(count>0)
        {
         ArrayResize(name,count,count+1);
         for(int i=count-1;i>=0; i--)
           {
            ObjectDelete(chart_ID,name[i]);
           }
        }
     }
     else return;
  }
//+------------------------------------------------------------------+


2. Coloque uma barra dupla "//" logo antes dessa linha nas seções OnDeinit() e OnChartEvent() do código:

 ObjectsDeleteAll(0,prefixObj,0,-1);


3. Copie e coloque essa linha no código do indicador (coloque-a sob a linha acima e, como a linha acima ocorre duas vezes no código, você deve colocar essa linha em dois lugares):

ObDeleteN(prefixObj,0,0);


4. Como resultado, as seções de código com a variante de função que não funciona, por exemplo, na compilação 1150, terão a seguinte aparência no código:


   //ObjectsDeleteAll(0,prefixObj,0,-1);
   ObDeleteN(prefixObj,0,0);


5. Depois disso, compile o código. As mensagens de erro desaparecerão e o indicador estará pronto para funcionar nos gráficos do build 1150 do MetaTrader5.


P./S.: Se tiver alguma dúvida, escreva aqui na discussão ou em uma mensagem privada.

 
P./S: Substituí a função de exclusão de objetos na postagem acima por uma opção um pouco mais versátil e que economiza um pouco mais de trabalho.
 

Ugh... é como se uma pedra tivesse caído de minha alma. "Aquele que procura sempre encontra" (c) funcionou, felizmente, desta vez.

Afinal, encontrei os protótipos da variante de função acima.

E agora posso dizer muito obrigado pelo esquema detalhado a Kovalyov, o autor do livro-texto, Artyom e o desconhecido para mim pelo nome 7777877.


P./S.: Ao mesmo tempo, enquanto analisava os protótipos dessa função para mim mesmo, entendendo seu significado e conduzindo experimentos, consegui não salvar (não de propósito!) suas fontes do MQL4, com base nas quais foi eventualmente compilado e usado em diferentes formas para meus códigos em MQL4 e MQL5. Eu não publiquei o código dessa função (ou de suas outras variantes) publicamente ou abertamente antes.

Lembro-me de que, por infelizes coincidências, me deparei com trabalhos no site/pesquisa que não funcionavam (ou que eu pesquisava, como agora percebo, incorretamente), quando minha consciência me lembrou de encontrar fontes. Em particular, lembrando que vi informações sobre o esquema no fórum, não me lembrei do livro didático. Por isso, deixei para "depois".

Portanto, tratando com respeito o trabalho dos outros, tento, se possível, copiar imediatamente as informações, de onde / de quem tirei o quê.

Portanto, estou sinceramente feliz pelo fato de que, sem nenhuma dica ou lembrete externo, encontrei as fontes primárias-protótipos dessa função para mim mesmo.

 
Por favor, publique o código do indicador com as alterações feitas, pois é uma floresta escura para mim, mas preciso muito dele! Não consigo obtê-lo sozinho. Se não for difícil, o arquivo compilado para o mt5!!!!
 
Siarhei Pekar:
Por favor, publique o código do indicador com as alterações feitas, pois é uma floresta escura para mim, mas preciso muito dele! Não consigo obtê-lo sozinho. Se não for difícil, o arquivo compilado para o mt5!!!!

A versão do indicador no Kodobase foi alterada para a versão 1.01, com as alterações já feitas, e agora está disponível para download diretamente na página desse indicador.

 
Siarhei Pekar:

Enquanto pensava em substituir o código, consegui excluir minha explicação sobre isso:

A função ObjectsDeleteAll(), que foi substituída por outra na versão 1.01, para excluir objetos pelo prefixo do nome, funciona mais rápido, o que contribui para um desempenho mais rápido do código.

Portanto, após a transição oficial da versão 1150 (que foi lançada no momento em que a capacidade da função ObjectsDeleteAll() de excluir objetos pelo prefixo do nome ainda não havia sido corrigida na documentação) para outra versão, será melhor alterar a versão do código do indicador para aquela com o uso de ObjectsDeleteAll():


 

Atualizei o código desse indicador. Inclusive, depois de detectar e corrigir erros na ativação/desativação da exibição das linhas do indicador no gráfico (havia um problema quando a ativação da exibição das linhas após a desativação não funcionava).

Versão atual: 1.39

 

Descobri que no código desse indicador para o MT5 (versão 1.39), não adicionei um recálculo adicional de valores em prev_calculated=0, semelhante ao que está no código desse indicador para o MT4. Ou seja, ao trabalhar com a versão 1.39, existe a possibilidade de situações em que valores zero podem aparecer na tabela do indicador em prev_calculated=0.

Desculpe-me.

Agora enviei uma nova versão(1.42) para publicação

Como os moderadores do CodeBase são pessoas ocupadas e a atualização pode não ser publicada em breve, anexarei a versão corrigida aqui por enquanto.

 

Muito obrigado ao moderador do CodeBase.

Código atualizado esta tarde para a versão 1.42

P./S.: Excluí o arquivo anexado acima.

 

Ontem foi lançada a atualização para a versão 1.45 (acabei de fazer o login agora)

O principal: substituí a função de remoção de um indicador do gráfico - corrigi o valor de um de seus parâmetros de entrada.