Librerías: MultiTester - página 50

 

Mi post fue creado en el hilo equivocado, debería estar aquí:

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Nueva versión de MetaTrader 5 build 5200: extensión OpenBLAS y mayor control en MQL5

Stanislav Korotky, 2025.09.05 11:13 AM

¿Por qué 30 y no 31? El titular parece estar diseñado para 31 días.

uint Buffer[64 + 12 * 30];

¿Y si cripto?

 
Stanislav Korotky #:

¿Por qué 30 y no 31? El titular parece ser para 31 días.

Los índices de 0 a 30 son 31.

 
fxsaber #:

Los índices de 0 a 30 son 31 piezas.

Exactamente, de 0 a 30, ambos inclusive - un total de 31.

 
Stanislav Korotky #:

Exactamente, de 0 a 30, ambos inclusive - 31 en total.

¿Lo has entendido bien?

 
fxsaber #:

¿Así que lo has entendido bien?

No. En la cabecera del fichero, por lo que veo, la matriz para 31 días está reservada, lo cual es lógico. Así que debería ser 12*31 en el código. ¿Dónde me equivoco?

O proporciona un enlace a la descripción del formato tkc, donde dice que debería haber (como máximo) 30 días en un mes.

 
Stanislav Korotky #:

No. La cabecera del fichero, por lo que veo, reserva una matriz para 31 días, lo cual tiene sentido.

No tengo ninguna información sobre la cabecera. Estaba haciendo un carácter personalizado y mirando qué bytes se modificaban. Sólo a partir de esas acciones me di cuenta de lo que ciertos bytes de la cabecera son responsables.

Así que debería ser 12*31 en el código. ¿En qué me equivoco?

O proporciona un enlace a la descripción del formato tkc donde dice que debería haber (como máximo) 30 días en un mes.

      uint Buffer[64 + 12 * 30];
      uint Read;

      kernel32::ReadFile(handle, Buffer, sizeof(Buffer), Read, 0);

      if (Read == sizeof(Buffer))
        for (int i = 63; i < (sizeof(Buffer) >> 2); i += 12)
          Res += (int)Buffer[i];

La variable i toma 31 valores.

 
fxsaber #:

No tengo información sobre la cabecera. Hice un símbolo personalizado y observé qué bytes cambiaban. Sólo a partir de estas acciones me di cuenta de lo que ciertos bytes en el encabezado son responsables de.

La variable i toma 31 valores.

Claramente, el bucle cuenta desde 63, pero al describir el array, se asignan 64 para la cabecera, lo que equivale a que el bucle empiece desde -1. No es muy intuitivo, pero las matemáticas cuadran.

 
fxsaber #:
Obtener el número de ticks de un mes natural de forma no estándar.

Obtener información sobre los ticks históricos disponibles por símbolos.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132

string NumToString( ulong Num, const string Delimeter = " " )
{
  string Res = (Num ? NULL : "0");

  while (Num)
  {
    Res = ((Num < 1000) ? (string)(Num % 1000) : ::IntegerToString(Num % 1000, 3, '0')) +
          ((Res == NULL) ? NULL : Delimeter) + Res;

    Num /= 1000;
  }

  return(Res);
}

string TicksDataToString( const string Symb )
{
  datetime From = 0;
  datetime To;
  
  const int Amount = MTTESTER::GetAmountFileTicks(From, To, Symb);
  const string SizeStr = ::DoubleToString((long)Amount * sizeof(MqlTick) / (double)(1 << 20), 3) + " MB";
  
  return(Symb + ": " + NumToString(Amount) +" ticks (MqlTick[] = " + SizeStr + ")" +
         (From ? ", " + ::TimeToString(From) + " - " + ::TimeToString(To) +
                 ", " + GetDiffTime(From, To) // https://www.mql5.com/ru/forum/170952/page308#comment_57872629
               : NULL));  
}

void OnStart()
{
  const int Size = SymbolsTotal(true);
  
  for (int i = 0; i < Size; i++)
    Print(IntegerToString(i + 1, 3, '0') + "/" + IntegerToString(Size, 3, '0') +
          ". " + TicksDataToString(SymbolName(i, true)));
}


Resultado.

001/045. EURUSD: 473 689 648 ticks (MqlTick[] = 27104.739 MB), 2011.12.01 00:00 - 2025.09.01 00:00, 13 Years 9 Months
002/045. GBPUSD: 508 981 458 ticks (MqlTick[] = 29124.153 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
003/045. USDCAD: 402 756 151 ticks (MqlTick[] = 23045.892 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
004/045. USDCHF: 353 129 808 ticks (MqlTick[] = 20206.250 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
005/045. USDJPY: 482 177 651 ticks (MqlTick[] = 27590.427 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
006/045. AUDCAD: 446 882 461 ticks (MqlTick[] = 25570.820 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
007/045. AUDCHF: 387 336 224 ticks (MqlTick[] = 22163.557 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months


Puede ver la causa del error 4004.

 
MTTester.mqh no compila. Supongo que es debido a la reciente MT5 construir donde hay un buen número de cosas que de repente no compilar más. ¿Alguna posibilidad de que usted podría proporcionar una versión actualizada de esa biblioteca? Parece una biblioteca increíble.
 
Goesta Torsten Hulden #:
MTTester.mqh no está compilado.

Versión actualizada sólo en la página en ruso de la biblioteca.