Erros, bugs, perguntas - página 2588

 
Aleksey Vyazmikin:

Ainda não compreendo - tem preditores que requerem um cálculo mais profundo? Eu preciso de um - MA no gráfico diário :) Estou apenas a fazer testes um ano antes e o comércio antes dessa data pode ser proibido...

Sim - a profundidade da história é necessária durante mais de um ano. A solução já foi encontrada. Agora também vou fazer um lançamento antecipado de 3 anos e saltá-los.
 
O KB não passa o código. Dá estes erros
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,35) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,35) : error 351: 'ToNull' - access to non-static member or function

Por favor, actualize o compilador KB.

 
Vladimir Simakov:
Quando voltar das férias, se não for muito incómodo, estudarei a questão. Mas logicamente o bug pode estar no seu código e não em mql.
A propósito, só por diversão, e se tiver uma biblioteca que funcione com que codificação? Tem a certeza que utf-16, mas e se for utf-8, afinal, o mais comum.

Ainda não verifiquei isso, obrigado pela dica. Vou cavar nessa direcção.
A biblioteca é para Ocean, as aulas com as quais estou a trabalhar são seleccionadas com um W, ou seja, Unicode.

Tal como eu entendo a codificação.

const char *Utf8;
const char *Ansi;
const wchar_t *Utf16;
const wchar_t *Utf32;

utf-16 implica tipo wchar_t, a função de biblioteca que lê a string retorna const wchar_t*
A partir disto torna-se claro que a função retorna um ponteiro para a string na codificação utf-16
Nas propriedades do projecto, o suporte de caracteres Unicode é também seleccionado.
A documentação do mql diz que o cordel funciona em Unicode.

 

Estou novamente a optimizar, não tenho a certeza se serei capaz de testar a velocidade de execução deste código:

void OnStart()
{  datetime m_stoptime = 0;
//1.
   if(m_stoptime < TimeCurrent())
   {
      //расчеты   
   }


//2.
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
   {  if(m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }

}

Suspeito que a variante 2 será mais rápida?

se sim, onde podem estar as armadilhas - uso no OnTick() - para pesquisar no tempo de troca do optimizador, procurando formas de optimizar o código


ZS: Posso perguntar como verificar as opções de velocidade número 1 e número 2, é muito provável que o compilador irá optimizar o código executável e os testes não serão correctos - por isso pergunto

 
Igor Makanu:

Posso perguntar como verificar as variantes 1 e 2 em termos de velocidade, há uma grande probabilidade de que o compilador optimize o código executável e os testes não sejam correctos - por isso pergunto

Fazer o teste habitual separadamente para 1 e 2 e comparar tempos? )

Se o tempo for insignificante, executar a mesma optimização com a variante 1 e a variante 2.

 
Igor Makanu:

HH: Posso perguntar como verificar as variantes #1 e #2 na velocidade, é altamente provável que o compilador optimize o código executável e que os testes não sejam correctos - é por isso que pergunto

https://www.mql5.com/ru/code/18804

TesterBenchmark
TesterBenchmark
  • www.mql5.com
При написании разных версий кода может возникнуть необходимость измерения влияния их на общую производительность советника в тестере. Это позволяет не только понять, насколько оптимален написанный код по сравнению с другим, но и дает предпосылки к будущей быстрой оптимизации советника. Такой подход позволяет выявить "бутылочное горлышко" в...
 
Igor Makanu:

Estou novamente a optimizar, não tenho a certeza se serei capaz de testar a velocidade de execução deste código:

Suspeito que a variante 2 irá correr mais depressa?

se assim for, onde podem estar as armadilhas - uso no OnTick() - para encontrar no tempo de troca do optimizador, procurando formas de optimizar o código


ZS: Posso perguntar como verificar as opções de velocidade número 1 e número 2, é muito provável que o compilador irá optimizar o código executável e os testes não serão correctos - por isso pergunto

Verificar em modo de depuração. O compilador não é suposto optimizar aí, embora eu não saiba como funciona realmente.
 

Pergunta sobre o ArrayResize. Faço uma Reserva para vários gigabytes ao mesmo tempo. Depois aumento gradualmente o Tamanho, que é inferior à Reserva inicial.

Porque é que o TaskManager mostra um aumento do consumo de memória durante o aumento de tamanho?

 
fxsaber:

Pergunta sobre o ArrayResize. Faço uma Reserva para vários gigabytes ao mesmo tempo. Depois aumento gradualmente o Tamanho, que é inferior à Reserva inicial.

Porque é que o TaskManager mostra um aumento do consumo de memória durante o aumento de tamanho?

Porque além do metatrader existe o SO Windows, que acaba por decidir, qual das dezenas de processos (a propósito, cada um deles tem 4 GB de espaço de endereçamento por defeito) deve realmente ser atribuído RAM (quanto RAM tem aí?).
 
Andrey Khatimlianskii:

Realizar um teste normal separadamente para 1 e 2 e comparar tempos? )

Se o tempo for negligenciável, fazer a mesma optimização com a variante 1 e a variante 2.

Estou a fazer algo errado, ainda não consegui ver a diferença, os resultados flutuam cerca de 0,1 segundos numa única corrida

Razão: