Bibliotecas: MultiTester - página 50

 

Minha postagem foi criada no tópico errado, ela deveria estar aqui:

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Nova versão do MetaTrader 5 build 5200: extensão OpenBLAS e maior controle em MQL5

Stanislav Korotky, 2025.09.05 11:13 AM

Por que 30 e não 31? O título parece ter sido projetado para 31 dias.

uint Buffer[64 + 12 * 30];

E se for cripto?

 
Stanislav Korotky #:

Por que 30 e não 31? A manchete parece ser para 31 dias.

Os índices de 0 a 30 são 31.

 
fxsaber #:

Os índices de 0 a 30 têm 31 unidades.

Exatamente, de 0 a 30, inclusive - um total de 31.

 
Stanislav Korotky #:

Exatamente, de 0 a 30, inclusive - 31 no total.

Então você entendeu certo?

 
fxsaber #:

Então você acertou?

Não. No cabeçalho do arquivo, até onde posso ver, a matriz para 31 dias está reservada, o que é lógico. Portanto, deveria ser 12*31 no código. Onde estou errando?

Ou forneça um link para a descrição do formato tkc, onde se diz que deve haver (no máximo) 30 dias em um mês.

 
Stanislav Korotky #:

Não. O cabeçalho do arquivo, até onde posso ver, reserva uma matriz para 31 dias, o que faz sentido.

Não tenho nenhuma informação sobre o cabeçalho. Estava fazendo um caractere personalizado e observando quais bytes estavam sendo alterados. Somente a partir dessas ações é que percebi por que determinados bytes no cabeçalho são responsáveis.

Portanto, deveria ser 12*31 no código. Onde estou errando?

Ou forneça um link para a descrição do formato tkc onde se diz que deve haver (no máximo) 30 dias em um mês.

      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];

A variável i assume 31 valores.

 
fxsaber #:

Não tenho nenhuma informação sobre o cabeçalho. Criei um símbolo personalizado e observei quais bytes foram alterados. Somente a partir dessas ações percebi por que determinados bytes no cabeçalho são responsáveis.

A variável i tem 31 valores.

Claramente, o loop conta a partir de 63, mas ao descrever a matriz, 64 são alocados para o cabeçalho, o que equivale ao loop começar a partir de -1. Não é muito intuitivo, mas a matemática se encaixa.

 
fxsaber #:
Obter o número de ticks em um mês do calendário de uma forma não padrão.

Obter informações sobre os ticks históricos disponíveis por símbolos.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/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


Você pode ver a causa do erro 4004.

 
O MTTester.mqh não compila. Presumo que isso se deva à recente compilação do MT5, em que há várias coisas que, de repente, não são mais compiladas. Há alguma chance de você fornecer uma versão atualizada dessa biblioteca? Ela parece ser uma biblioteca incrível.
 
Goesta Torsten Hulden #:
O MTTester.mqh não foi compilado.

Versão atualizada somente na página em russo da biblioteca.