Почему вывод оптимизации не возвращается в OnTesterDeInit()?

 

Я пытаюсь записать результат оптимизации с помощью OnTesterDeInit(). Я собираю данные о каждой функции OnDeinit(), а затем хочу записать их один раз в файл. Но когда я открыл файл, в нем ничего не было написано.

Вот то же самое. Пожалуйста, установите параметр оптимизации как D и start = 1 и end = 50.

string FileString;

input int D = 0;

int OnInit() {return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   FileString = FileString + "," + string(D);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick() {ExpertRemove();}
void OnTesterInit()
  {
   if(FileIsExist("Test.txt", FILE_COMMON) == true)
      FileDelete("Test.txt", FILE_COMMON);

   FileString = "";
   int File = FileOpen("Test.txt", FILE_COMMON|FILE_WRITE|FILE_TXT|FILE_ANSI);

   if(File == INVALID_HANDLE)
     {
      Print("Cannot Open File to Write: ", GetLastError());
     }

   FileClose(File);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
   int File = FileOpen("Test.txt", FILE_COMMON|FILE_WRITE|FILE_TXT|FILE_ANSI);

   if(File == INVALID_HANDLE)
     {
      Print("Cannot Open File to Write: ", GetLastError());
     }
   else
     {
      FileWriteString(File, FileString);
     }
   FileClose(File);

  }
//+------------------------------------------------------------------+


Пожалуйста, скажите мне, что я могу сделать, чтобы получить вывод, записанный в файле, из всего процесса. Я надеюсь, что есть какое-то решение для этого. Пожалуйста, я хочу собрать вывод функции OnDeInit() и записать его в функцию OnTesterDeInit(). Я попытался записать файл напрямую, используя функцию OnDeInit(). Но оптимизация, похоже, что-то упускает. Поэтому я хочу собирать данные и писать только один раз.

Пожалуйста, предложите мне, что делать.

 
Пожалуйста, у кого-нибудь есть решение или предложение, дайте мне знать.
 
jaffer wilson #:
Пожалуйста, у кого-нибудь есть решение или предложение, дайте мне знать.

Если использовать ваши метод записи в файл в другом месте, к примеру, в OnInit, он работает?

 

1. Вы не предприняли никаких попыток получить данные от каждого шага оптимизации. Вы не предприняли никаких попыток передать данные клиентскому терминалу от тестируемого эксперта

Читайте внимательно документацию

2. Даже если вы сумеете обработать пришедшие фреймы, то вы каждый раз будете перезаписывать файл заново, потому что не указали флаг FILE_READ

 
Slava # :

1. Вы не предприняли никаких попыток получить данные от каждого шага оптимизации. Вы не предприняли никаких попыток передать данные клиентскому терминалу от тестируемого эксперта

Читайте внимательно документацию

2. Даже если вы сумеете обработать пришедшие фреймы, то вы каждый раз будете перезаписывать файл заново, потому что не указали флаг FILE_READ

Да, вы правы, и есть причина не использовать FILE_READ, потому что я не хочу читать. Я просто хочу написать. Но напишите только один раз все, что находится в переменной FileString.

Я хочу, чтобы всякий раз, когда я запускаю оптимизацию, я фиксировал окончательный вывод процесса внутри функции советника OnDeIninit(), и когда все проходит и кадры завершаются внутри оптимизации, я записываю их в файл с помощью OnTesterDeInit(). Надеюсь, вы понимаете, что я пытаюсь сделать.

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

 
Nikita Chernyshov # :

Если использовать ваши метод записи в файл в другом месте, к примеру, в OnInit, он работает?

Я не понял вашего вопроса.

 

1. Вы не предприняли никаких попыток получить данные от каждого шага оптимизации. Вы не предприняли никаких попыток передать данные клиентскому терминалу от тестируемого эксперта

Читайте внимательно документацию

Документация по MQL5: Обработка событий / OnTesterDeinit
Документация по MQL5: Обработка событий / OnTesterDeinit
  • www.mql5.com
OnTesterDeinit - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5