Características da linguagem mql4, sutilezas e técnicas - página 14

 
Nota para os desenvolvedores.


https://docs.mql4.com/ru/basis/types/integer


O padrão C++ só garante o tamanho do tipo char. Os comprimentos dos outros tipos são específicos de implementação. A tabela de fósforos é incorreta e pode levar a um comportamento indefinido.

Целые типы - Типы данных - Основы языка - Справочник MQL4
Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Целые типы представлены в языке MQL4 одиннадцатью видами. Некоторые из типов могут использоваться вместе с другими, если этого требует логика программы, но при этом необходимо иметь ввиду правила преобразования типов. В таблице приведены характеристики каждого типа. Кроме того, в...
 
Comentários não relacionados a este tópico foram movidos para "Perguntas dos iniciantes do MQL4 MT4 MetaTrader 4".
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Bichos, insetos, perguntas

fxsaber, 2018.12.01 11:15

Projeto de superfreios
string Str[];
const int handle = FileOpen(FileName, FILE_READ | FILE_ANSI | FILE_TXT);  

FileReadArray(handle, Str);

Um arquivo de 40Mb de 1 milhão de linhas leva 18 segundos para ser lido.


O mesmo resultado de saída, mas feito de forma diferente

  uchar Bytes[];
  const int handle = FileOpen(FileName, FILE_READ | FILE_BIN);
  
  FileReadArray(handle, Bytes);

  string Str[];
  StringSplit(CharArrayToString(Bytes), '\n', Str);

Já está pronto em 0,5 segundos.


 

Sobrecarga de 16Gb de RAM com tarefas. O cromo acabou congelando, MT5 com Otimização em funcionamento - sem problemas. Mas mais interessante é o MT4.

Os indicadores ainda estão funcionando, mas os Expert Advisors pararam devido a "fora de alcance" por causa da ausência da verificação de resultados do ArrayResize.

Nem sempre quero verificar o ArrayResize, mas aqui está uma confirmação de que a ausência desta verificação pode parar, por exemplo, um Expert Advisor de combate em VPS.


A única coisa que não consigo entender é como o resultado está "fora de alcance" se o ArrayResize foi feito anteriormente com uma grande Reserva?

 
fxsaber:

Sobrecarga de 16Gb de RAM com tarefas. O cromo acabou congelando, MT5 com Otimização em funcionamento - sem problemas. Mas mais interessante é o MT4.

Os indicadores ainda estão funcionando, mas os Expert Advisors pararam devido a "fora de alcance" por causa da ausência da verificação de resultados do ArrayResize.

Nem sempre quero verificar o ArrayResize, mas aqui está uma confirmação de que a ausência desta verificação pode parar, por exemplo, um Expert Advisor de combate em VPS.


A única coisa que eu não consigo entender é como ele ficou "fora de alcance" se o ArrayResize foi feito anteriormente com uma grande Reserva?

fácil :-) isto é verdade para a maioria dos idiomas/sistemas.

Reservei memória virtual alocada e quando fiquei sem memória física, não consegui encontrar uma página livre. Temos uma exceção de processador, que após uma série de processamentos se tornou fora da faixa de

A propósito, o fato de que a MT não se despenhou de forma alguma confirma a qualidade da mão-de-obra :-)

 

Erro duro no tema da classificação de pedidos na história. A classificação por hora de fechamento nem sempre é o caso, infelizmente.

Roteiro de verificação

#property strict

void OnStart()
{
  datetime time = INT_MAX;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      if (OrderCloseTime() > time)
      {
        Print(time);
        OrderPrint();
        
//        break;
      }
      
      time = OrderCloseTime();
    }
}


O porquê de um código tão elementar não poder ser escrito imediatamente para autoteste é um mistério.

É também um enigma: como pode ser que as ordens não sejam ordenadas pelo tempo? Faço esta pergunta porque usei um testador personalizado em um QB. E logicamente, desde que a ordem entrou na história, o registro dela lá mais tarde do que os que chegaram lá antes. Como abalar esta lógica não está nada claro.

Talvez as ordens sejam armazenadas em diferentes servidores MT5 e esta confusão ocorra durante a sincronização. Espero que isto seja um bug do Terminal e não do servidor MT4. Também espero que isso não aconteça com os negócios na MT.

 
fxsaber:

Erro duro no tema da classificação de pedidos na história. A classificação por hora de fechamento nem sempre é o caso, infelizmente.

Roteiro de verificação


O porquê de um código tão elementar não poder ser criado para autoteste instantâneo é um mistério.

É também um enigma: como pode ser que as ordens não sejam ordenadas pelo tempo? Estou fazendo esta pergunta porque usei um testador personalizado em um QB. E logicamente, desde que a ordem entrou na história, o registro dela lá mais tarde do que os que chegaram lá antes. Como abalar esta lógica não está nada claro.

Talvez as ordens sejam armazenadas em diferentes servidores MT5 e esta confusão ocorra durante a sincronização. Espero que isto seja um bug do Terminal e não do servidor MT4. Também espero que isso não aconteça com os negócios na MT.

Você já tentou mudar a classificação no histórico da conta?

 
Artyom Trishkin:

Você já tentou mudar a classificação no histórico da conta?

Não afeta o resultado.

 
Artyom Trishkin:

Você já tentou mudar a classificação no histórico da conta?

Sim, não deve ter nenhum efeito. Apenas o número de pedidos na guia de histórico da conta é afetado. Você tem que ficar de olho nisso.

 
fxsaber:

Não afeta o resultado.

O horário de fechamento da posição é dado pelo servidor.