Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 114

 
Slava:

...

Мне, чтобы выяснить, где и что не инициализируется нужно воспроизвести ваши результаты. 

Но у меня это не получается сделать. Результаты всегда одни и те же. Такие же, как у вас на первом запуске:

Slava:

Для быстроты эксперимента генерация тиков m1 ohlc

Первый запуск

Что можно сделать в таком случае? 


 
Anatoli Kazharski:

Мне, чтобы выяснить, где и что не инициализируется нужно воспроизвести ваши результаты. 

Но у меня это не получается сделать. Результаты всегда одни и те же. Такие же, как у вас на первом запуске:

Что можно сделать в таком случае? 


Ваша оптимизация происходит исключительно на Ваших локальных агентах? Или используется ещё локальная ферма и клауд?
 
Slava:
Ваша оптимизация происходит исключительно на Ваших локальных агентах? Или используется ещё локальная ферма и клауд?

Только на локальных.

Я уже воспроизвёл такой же результат, как у вас. То есть, иногда разные результаты получаются на одних и тех же внешних параметрах эксперта.

Подготовил и отправил максимально краткий код для тестов. 

Тоже пытаюсь найти проблему.

 
Anatoli Kazharski:

Только на локальных.

Я уже воспроизвёл такой же результат, как у вас. То есть, иногда разные результаты получаются на одних и тех же внешних параметрах эксперта.

Подготовил и отправил максимально краткий код для тестов. 

Тоже пытаюсь найти проблему.

Есть время первого входа эталонного запуска. Отпринтуйте все данные для входа на этот момент с максимально возможной точностью.

И для первого входа (вообще для первого) также отпринтуйте значения.

После получения другого результата может оказаться, что первый вход получился раньше, чем у эталона. Тогда на этот момент времени тоже сделайте принт.

Когда будут данные, тогда будет ясно, в какую сторону копать

 
Ilyas:

1972 - посыпались ошибки компиляции здесь.

 
pavlick_:

Так можно ведь

typename не возвращает полиморфный тип. А речь речь шла именно об этом. 

но в плюсах получать имя типа - бесполезное занятие,  идентичность имени не гарантируется для одного и того же объекта и может совпадать для разных типов, ерунда в общем. 

Да ну, где такое сказано?  Про хэш-код ещё понятно, т.к. там коллизии могут быть.  А с именем то какие проблемы.
 
fxsaber:

1972 - посыпались ошибки компиляции здесь.

Локализовал одну из проблем

#define ADD(A,B) Str = (A) + (B);

  void Func()
  {
  string Str = NULL;
  string Str2 = NULL;

    ADD(Str2, (MathRand()) ? Str2 : NULL) // Без скобок все OK.

    ADD(NULL, true ? NULL :
#ifdef __MQL5__
        Str2
#else // __MQL5__
        Str2
#endif // __MQL5__
        )
  }
Не компилируется этот код.
 
Slava:

Есть время первого входа эталонного запуска. Отпринтуйте все данные для входа на этот момент с максимально возможной точностью.

И для первого входа (вообще для первого) также отпринтуйте значения.

После получения другого результата может оказаться, что первый вход получился раньше, чем у эталона. Тогда на этот момент времени тоже сделайте принт.

Когда будут данные, тогда будет ясно, в какую сторону копать

Провёл такие тесты и получил вот такие результаты.

Настройки:

//---

Результаты оптимизации:

//---

Тестируем выделенный в таблице выше результат. Количество трейдов 697. В файл записываются значения, которые участвуют в условиях для совершения сделки. А также время, когда условие исполнилось (первая строка).

      if(!MQLInfoInteger(MQL_OPTIMIZATION))
        {
         HistorySelect(0,INT_MAX);
         int deals_total=HistoryDealsTotal();
         if(deals_total<2)
           {
            int total=FilesCounter();
            ResetLastError();
            string name="Parameters_"+(string)total+".txt";
            int handle=FileOpen(name,FILE_WRITE|FILE_TXT|FILE_COMMON);
            if(handle!=INVALID_HANDLE)
              {
               FileWrite(handle,"first time: "+TimeToString(TimeCurrent()));
               FileWrite(handle,"m_zz_current.Direction(): "+(string)m_zz_current.Direction());
               FileWrite(handle,"m_zz_current.HighPrice(0): "+(string)m_zz_current.HighPrice(0));
               FileWrite(handle,"m_zz_current.SegmentSize(0): "+(string)m_zz_current.SegmentSize(0));
               FileWrite(handle,"m_zz_current.SegmentBars(0): "+(string)m_zz_current.SegmentBars(0));
               FileClose(handle);
              }
            else
              {
               Print(__FUNCTION__," > error: ",GetLastError());
              }
           }
        }

Первый запуск. Результат отличается от того, что в таблице.

//---

Второй запуск. Результат отличается от предыдущего и от того, что в таблице результатов оптимизации. Записанные данные в файл идентичны предыдущей записи.

//---

Архив с новыми файлами для тестов отправил в личных сообщениях.

 
fxsaber:

Локализовал одну из проблем

Не компилируется этот код.

На мой взгляд логичней писать так

    ADD(Str2, (MathRand() ? Str2 : NULL))
 
Anatoli Kazharski:

Провёл такие тесты и получил вот такие результаты.

Настройки:

//---

Результаты оптимизации:

//---

Тестируем выделенный в таблице выше результат. Количество трейдов 697. В файл записываются значения, которые участвуют в условиях для совершения сделки. А также время, когда условие исполнилось (первая строка).

Первый запуск. Результат отличается от того, что в таблице.

//---

Второй запуск. Результат отличается от предыдущего и от того, что в таблице результатов оптимизации. Записанные данные в файл идентичны предыдущей записи.

//---

Архив с новыми файлами для тестов отправил в личных сообщениях.

Для начала добавьте в Ваш индикатор свойство

#property tester_everytick_calculate
Причина обращения: