Discussão do artigo "Como chamar indicadores no MQL5"

 

Novo artigo Como chamar indicadores no MQL5 foi publicado:

Com a nova versão da linguagem de programação MQL disponível, não apenas a abordagem para lidar com indicadores mudou, mas também, existem novas formas de como criar indicadores. Além disso, você tem a flexibilidade adicional trabalhando com os buffers do indicador - agora você pode especificar a direção desejada de indexação e obter exatamente quantos valores de indicadores você quiser. Este artigo explica os métodos básicos de chamada de indicadores e recuperar dados dos buffers do indicador.

No MQL5 existem diversas formar para chamar indicadores e a maioria destas formas é realizada usando as funções IndicatorCreate() e iCustom(). Além disso, estas funções apenas retornam o handle indicador e o trabalho adicional nos indicadores é feito por ele. Então o que é handle? Como lidar com as funções IndicatorCreate() e iCustom()? E como seu expert irá obter os dados do indicador? Todas estas questões são cobertas no artigo.

Autor: KlimMalgin

 
Artigo útil. Muito obrigado.
 

Bom ++

Obrigado.

 

Por favor, explique.

Em "Obtenção do identificador do indicador usando IndicatorCreate()"

Crie uma matriz

MqlParam params[];      // Matriz para armazenar parâmetros do indicador

sem especificar o tipo e, em seguida, altere o tipo de matriz conforme necessário.

Como isso funciona? Isso pode ser usado para qualquer estrutura ou somente para esta? É possível apenas alterar o tipo de uma matriz existente?

 
A matriz de parâmetros do tipo MqlParam é necessária para a função IndicatorCreate() somente ao criar um identificador. Se você quiser alterar algo, precisará "matar" o identificador atual usando IndicatorRelease e criar um novo. O indicador "engine change" em movimento não é fornecido.
 

Mas no artigo, no texto.

   ***
   // Definir o período do slow MA
   params[0].type         =TYPE_INT;
   params[0].integer_value=21;
   ***

e depois dele.

   ***
   ArrayResize(params,2);
   // Etapa
   params[0].type         =TYPE_DOUBLE;
   params[0].double_value = 0.02;
   ***
nada é excluído, o tipo é alterado.....
 
Vamos considerar isso em um nível de serviço de bufê. Um garçom coloca os pratos em uma bandeja e leva o seu pedido até você. Em seguida, ele coloca a comida de outro cliente na mesma bandeja e leva seu pedido até ele. Isso significa que você terá a mesma refeição que o outro cliente?
 

Portanto, jantares diferentes só podem estar na bandeja do garçom. Certo, vou fazer um experimento.

Há algum plano para matrizes de tipos mistos, como [int][double]?

 
Silent:

Portanto, jantares diferentes só podem estar na bandeja do garçom. Certo, vou fazer um experimento.

Não há planos para matrizes de tipos mistos, como [int][double]?

Use estruturas, veja o exemplo na ajuda - https://www.mql5.com/ru/docs/basis/types/casting#casting_structure:

Outro exemplo mostra como você pode organizar sua própria função para obter a representação de cores RGB (Red, Green, Blue) a partir do tipo de cor. Para fazer isso, criamos duas estruturas que têm o mesmo tamanho, mas composição interna diferente. Por conveniência, vamos adicionar à estrutura uma função que retorna a cor na representação RGB como uma cadeia de caracteres.

#property script_show_inputs
input color          testColor=clrBlue;// definir a cor para teste
//--- estrutura para representação de cores RGB
struct RGB
  {
   uchar             blue;          // componente de cor azul
   uchar             green;         // componente de cor verde
   uchar             red;           // componente de cor vermelha
   uchar             empty;         // esse byte não é usado
   string            toString();    // função para receber como uma string
  };
//--- função para gerar a cor como uma string
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }
//--- estrutura para armazenar a cor do tipo incorporado 
struct builtColor
  {
   color             c;
  };
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//--- variável para armazenar em RGB
   RGB colorRGB;
//--- variável para armazenar o tipo de cor
   builtColor test;
   test.c=testColor;
//--- conversão de duas estruturas copiando seus conteúdos
   colorRGB=test;
   Print("color ",test.c," = ",colorRGB.toString());
//---
  }

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Rosh:

Use estruturas, veja o exemplo na ajuda - https://www.mql5.com/ru/docs/basis/types/casting#casting_structure:

Eu entendo mais ou menos de estruturas, mas estou interessado em matrizes.

Obrigado.

 
Silent:

Estou mais ou menos familiarizado com estruturas, mas estou interessado em matrizes.

Obrigado.

Crie uma estrutura e digite uma matriz desse tipo.