Discussão do artigo "Estruturas em MQL5 e formas de imprimir seus dados"

 

Novo artigo Estruturas em MQL5 e formas de imprimir seus dados foi publicado:

Neste artigo, examinaremos as estruturas MqlDateTime, MqlTick, MqlRates, MqlBookInfo e as maneiras de imprimir os dados dessas estruturas. Para imprimir todos os campos de uma estrutura, existe a função padrão ArrayPrint(), que exibe os dados contidos em um array com o tipo da estrutura processada em um formato de tabela conveniente.

As estruturas MqlParam e MqlTradeRequest são usadas para transmitir informações técnicas para a criação de indicadores e o envio de solicitações de negociação para o servidor. Preenchemos os campos necessários das estruturas de acordo com o resultado desejado ao enviar os dados na estrutura preenchida. Ou seja, essas estruturas não precisam necessariamente imprimir os dados preenchidos nela pelo programador.
Por outro lado, as outras estruturas retornam resultados de solicitações, e cada campo é preenchido pelo subsistema do terminal ou pelo servidor de negociação. Obter dados dessas estruturas, analisar os campos preenchidos programaticamente ou imprimir no log para análise manual são convenientes e essenciais tanto para a tomada de decisões programáticas quanto para a compreensão e busca de erros lógicos.


Para imprimir todos os campos de uma estrutura, existe a função padrão ArrayPrint(), que exibe os dados em formato de tabela contidos em um array com o tipo da estrutura processada. No entanto, às vezes é necessário imprimir os dados de uma estrutura em um formato diferente, que pode ser mais conveniente do que uma representação de tabela. Por exemplo, imprimir todos os campos de uma estrutura em uma única linha, com cabeçalhos e dados correspondentes. Isso pode ser mais conveniente para a análise de grandes conjuntos de dados. Ao mesmo tempo, às vezes é necessário ver uma representação mais detalhada, com descrições dos campos da estrutura e uma apresentação diferente dos dados correspondentes.

Autor: Artyom Trishkin

 
Já posso identificar esse autor pelo título do artigo :)))))
 

Se esses artigos se tornarem uma série, será ótimo!!!!

Como senti falta desses artigos há cerca de quatro anos, quando comecei a aprender a escrever código.

E agora ainda encontro neles coisas que eu ainda não sabia.

Especialmente o artigo anterior sobre StringFormat e PrintFormat é muito informativo, considerando que a ajuda sobre essas funções é muito ruim.

Agradeço ao autor pelos artigos interessantes e necessários!

StringFormat(). Обзор, готовые примеры использования
StringFormat(). Обзор, готовые примеры использования
  • www.mql5.com
Статья является продолжением обзора функции PrintFormat(). Рассмотрим вкратце форматирование строк при помощи StringFormat() и их дальнейшее использование в программе. Напишем шаблоны для вывода информации о символе в журнал терминала. Статья будет полезна как новичкам, так и уже опытным разработчикам.
 
Artigo muito bom. Onde está o arquivo mqh que podemos baixar?
 
Zhongquan Jiang # :
Artigo muito bom. Onde está o arquivo mqh para fazermos o download?

Os arquivos não estão anexados ao artigo, pois ele foi concebido como um tipo de informação de referência estendida. Você pode simplesmente usar os códigos de copiar e colar do artigo no editor de código do MetaEditor.

 
Artyom Trishkin #:

Os arquivos não são anexados ao artigo, pois ele foi concebido como um tipo de informação de referência estendida. Você pode simplesmente usar os códigos de copiar e colar do artigo no editor de código do MetaEditor.

 
A função MqlRatesPrint está faltando neste artigo
 
Fokus24 #:
A função MqlRatesPrint não está presente neste artigo

Acho que me esqueci dela. Obrigado.

//+------------------------------------------------------------------+
//| Registra a descrição de todos os campos da estrutura MqlRates.
//+------------------------------------------------------------------+
void MqlRatesPrint(const string symbol,const ENUM_TIMEFRAMES timeframe,const MqlRates &rates,
                   const bool short_entry=true,const uint header_width=0,const uint indent=0,int index=WRONG_VALUE)
  {
//--- Declare uma variável para armazenar o resultado
   string res="";
//--- Obter o número de casas decimais e o valor da cadeia de caracteres do período de tempo
   int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   string tf=StringSubstr(EnumToString(timeframe==PERIOD_CURRENT ? Period() : timeframe),7);
   string num=(index==WRONG_VALUE ? ":" : StringFormat("[%ld]:",index));
//--- Se for um registro curto - dados de barra de saída para o registro no formato Symbol TF[index]: Time, O, H, L, C, S, V/VR
   if(short_entry)
     {
      res=StringFormat("%s %s%s %s, O: %.*f, H: %.*f, L: %.*f, C: %.*f, S: %2ld, V: %5lld, RV: %lld",
                       symbol,tf,num,(string)rates.time,dg,rates.open,dg,rates.high,dg,rates.low,dg,rates.close,rates.spread,rates.tick_volume,rates.real_volume);
      Print(res);
     }
   /* Exemplo de saída:
 GBPUSD H1: 2023.07.21 08:00:00, O: 1.28794, H: 1.28848, L: 1.28772, C: 1.28772, S: 4, V: 448, RV: 0
 */
//--- Caso contrário.
   else
     {
      //--- criar uma string descrevendo todos os dados da estrutura com recuo e largura especificada do campo de cabeçalho
      res=StringFormat("%s %s%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",symbol,tf,num,
                       MqlRatesTime(rates,header_width,indent),
                       MqlRatesOpen(symbol,rates,header_width,indent),
                       MqlRatesHigh(symbol,rates,header_width,indent),
                       MqlRatesLow(symbol,rates,header_width,indent),
                       MqlRatesClose(symbol,rates,header_width,indent),
                       MqlRatesTickVolume(rates,header_width,indent),
                       MqlRatesSpread(rates,header_width,indent),
                       MqlRatesRealVolume(rates,header_width,indent)
                      );
      //--- Emite a string recebida para o livro de registros
      Print(res);
     }
   /* Exemplo de saída (se Last não for nulo):
 Time: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Last: 1.28947
 Volume: 33
 Time msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 Volume Real: 33.45
 
 Exemplo de saída (se Last for nulo):
 Time: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Time msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 */
  }
//+------------------------------------------------------------------+
 

Proponho completar a funcionalidade.


string GetPrintSource( const string Source );

Retorna a origem da função de impressão pela origem da estrutura.

 
fxsaber #:

Proponho adicionar a funcionalidade.


Retorna a origem da função de impressão pela origem da estrutura.

Você pode me dar um exemplo? Não estou entendendo.

 
Artyom Trishkin #:

Posso obter um exemplo? Não estou entendendo.

string GetPrintSource( const string Source )
{
  return("string ToString( const STRUCT &Data ) { return(\"i = \" + (string)Data.i); }");
}

void OnStart()
{
  Print(GetPrintSource("struct STRUCT { int i; };"));
}
Fiz algo semelhante aqui, mas com entradas.
CheckInputs - нахождение аварийных проходов при Оптимизации советника
CheckInputs - нахождение аварийных проходов при Оптимизации советника
  • www.mql5.com
Во время Оптимизации советника некоторые проходы могут завершаться аварийно. Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Новая версия платформы MetaTrader 5