Discusión sobre el artículo "Estructuras en MQL5 y métodos para imprimir sus datos"

 

Artículo publicado Estructuras en MQL5 y métodos para imprimir sus datos:

En este artículo veremos las estructuras MqlDateTime, MqlTick, MqlRates, MqlBookInfo y los métodos para imprimir datos desde estas estructuras. Para imprimir todos los campos de una estructura, existe la función estándar ArrayPrint(), que muestra en un cómodo formato tabular los datos contenidos en un array con el tipo de estructura que se está procesando.

Las estructuras MqlParam y MqlTradeRequest se utilizan para transmitir información técnica para crear indicadores y enviar solicitudes comerciales al servidor. Nosotros mismos completaremos los campos obligatorios de las estructuras según el resultado requerido del envío de datos en la estructura rellenada. Es decir, estas estructuras no necesitan especialmente imprimir los datos con los que el programador ha rellanado los campos de dichas estructuras de forma independiente.
Sin embargo, las estructuras restantes retornarán el resultado de las consultas, mientras que el subsistema del terminal o el servidor comercial completará cada campo. Obtener los datos de estas estructuras, analizar los campos de las estructuras completados de forma programática o imprimirlos en un registro para su posterior análisis manual resulta muy cómodo y necesario tanto para tomar decisiones de forma programática como para comprender y encontrar la ubicación de un error lógico.


Para imprimir todos los campos de una estructura, existe la función estándar ArrayPrint(), que muestra en un cómodo formato tabular los datos contenidos en un array con el tipo de estructura procesada. Pero a veces necesitamos imprimir los datos de la estructura en otro formato, lo cual puede resultar más cómodo que una representación tabular. Por ejemplo, mostrar todos los campos de la estructura en una línea, con los encabezados y datos correspondientes. Esto puede resultar más cómodo al analizar grandes cantidades de datos. Al mismo tiempo, a veces necesitamos tener una representación más detallada, con una descripción de los campos de la estructura y una representación diferente de los datos correspondientes.

Autor: Artyom Trishkin

 
Ya puedo identificar a este autor por el título del artículo :)))))
 

¡¡¡¡Si estos artículos se convierten en una serie, será simplemente genial!!!!

Cuánto echaba de menos este tipo de artículos hace unos cuatro años, cuando empecé a aprender a escribir código.

Y ahora sigo encontrando cosas en ellos que aún no sabía.

Especialmente el anterior sobre StringFormat y PrintFormat es muy informativo, teniendo en cuenta que la ayuda sobre estas funciones es muy pobre.

¡Gracias al autor por artículos tan interesantes y necesarios!

StringFormat(). Обзор, готовые примеры использования
StringFormat(). Обзор, готовые примеры использования
  • www.mql5.com
Статья является продолжением обзора функции PrintFormat(). Рассмотрим вкратце форматирование строк при помощи StringFormat() и их дальнейшее использование в программе. Напишем шаблоны для вывода информации о символе в журнал терминала. Статья будет полезна как новичкам, так и уже опытным разработчикам.
 
Muy buen artículo. ¿Dónde está el archivo mqh podemos descargar?
 
Zhongquan Jiang # :
Muy buen artículo. ¿Dónde está el archivo mqh para que lo descarguemos?

Los archivos no se adjuntan al artículo, ya que fue concebido como una especie de información de referencia ampliada. Usted puede simplemente utilizar Copy-Paste códigos del artículo en el editor de código MetaEditor.

 
Artyom Trishkin #:

Los archivos no se adjuntan al artículo, ya que fue concebido como una especie de información de referencia ampliada. Usted puede simplemente utilizar Copy-Paste códigos del artículo en el editor de código MetaEditor.

 
la función MqlRatesPrint falta en este artículo
 
Fokus24 #:
La función MqlRatesPrint está ausente en este artículo

Lo olvidé, supongo. Gracias.

//+------------------------------------------------------------------+
//| Registra la descripción de todos los campos de la estructura 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)
  {
//--- Declara una variable para almacenar el resultado
   string res="";
//--- Obtener el número de decimales y el valor de la cadena de tiempo
   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));
//--- Si el registro es corto - salida de datos de barras al registro en 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);
     }
   /* Ejemplo de salida:
 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
 */
//--- De lo contrario.
   else
     {
      //--- crear una cadena que describa todos los datos de la estructura con sangría y anchura especificada del campo de cabecera
      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)
                      );
      //--- Envía la cadena recibida al libro de registro
      Print(res);
     }
   /* Ejemplo de salida (si Last no es null):
 Hora: 2023.07.20 14:42:33
 Oferta: 1.28958
 Demanda: 1.28962
 Último: 1.28947
 Volumen: 33
 Hora msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 Volumen Real: 33.45
 
 Ejemplo de salida (si Last es null):
 Hora: 2023.07.20 14:42:33
 Oferta: 1.28958
 Ask: 1.28962
 Hora msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 */
  }
//+------------------------------------------------------------------+
 

Propongo completar la funcionalidad.


string GetPrintSource( const string Source );

Devuelve la fuente de la función de impresión por la fuente de la estructura.

 
fxsaber #:

Propongo ampliar la funcionalidad.


Devuelve la fuente de la función de impresión por la fuente de la estructura.

¿Puedes darme un ejemplo? No lo entiendo.

 
Artyom Trishkin #:

¿Puede darme un ejemplo? No lo entiendo.

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

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