Как записать результаты оптимизации в файл при использовании облачных агентов?

 

Добрый день

Как записать результаты оптимизации в файл при использовании Local Network Farm или MQL5 Cloud Network ?

Есть процедура в OnTester(void), использует:

string toWrite = "test";
fileHandle=FileOpen(fileName,FILE_CSV|FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_COMMON,",");
FileWrite(fileHandle,toWrite);
FileClose(fileHandle);

При использовании Local агентов файл с результатами оптимизации создается в общей папке, при использовании Local Network Farm или MQL5 Cloud Network файла нет.

 
есть идеи?
 
ну че за форум такой? неужели ни у кого идей нет?
 
Nexxtor:
ну че за форум такой? неужели ни у кого идей нет?

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

П.С.: посмотрите эту библиотеку, возможно она натолкнет на мысли как реализовать то, что хотите

 
Aleksandr Volotko:

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

Ну думал хоть на локальных машинах в моей сети получится....

 
Nexxtor:

Ну думал хоть на локальных агентах получится....

Локальные агенты тоже находятся на других машинах, а они могут быть чужими. Так что вот так.

 
Nexxtor:

Как записать результаты оптимизации в файл при использовании Local Network Farm или MQL5 Cloud Network ?

О каких результатах вообще речь?

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

Как это сделать почитайте в Справке терминала.

Ну или ручками делайте экспорт результатов сами.

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 

Эх, нет fxsaber-а, а он бы сразу ответ дал.

Копайте в сторону фреймов, все данные от агентов можно получить.

 
//+------------------------------------------------------------------+
//| Начало оптимизации                                               |
//+------------------------------------------------------------------+
void OnTesterInit()
  {      
      string TimeF=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES);
      StringSetCharacter(TimeF,13,'_');    
      Statistic=Printer.FileCreate(Symbol()+"_"+TimeF+"_S&G","S&G\\Test",false,false,EvryTick); //Создание файла для записи     
      Printer.Write("N",
      "Депо",
      "Прибыль",
      "Доход",
      "Расход",
      "Прибыльность",
      "Фактор вост.",
      "Мат ож",
      "К.Ш.",
      "Макс ДД баланса",
      "Макс ДД средств",
      "N сделок",
      "N трейдов",
      "N + трейдов",
      "N - трейдов",
      "Sell трейдов",
      "Buy трейдов",
      "Sell + трейдов",
      "Buy + трейдов",
      "Avr + трейдов",
      "Avr - трейдов",
      "% Sell от прибыльных",
      "% Buy от прибыльных",
      "% Sell от всех",
      "% Buy от всех",      
      "% + от всех"            
      );
  }
//+------------------------------------------------------------------+
//| Обработчик события окончания тестирования                        |
//+------------------------------------------------------------------+
double OnTester()
  {

  
      //--- Заполним массив показателями теста
      GetTestStatistics(stat_values);
      //--- Создадим фрейм
      FrameAdd("Statistics",1,0,stat_values);

   return(0.0);
  }
//+------------------------------------------------------------------+
//| Очередной проход оптимизации                                     |
//+------------------------------------------------------------------+
void OnTesterPass()
  {

      string name ="";  // Публичное имя/метка фрейма
      ulong  pass =0;   // Номер прохода в оптимизации, на котором добавлен фрейм
      long   id   =0;   // Публичный id фрейма
      double val  =0.0; // Одиночное числовое значение фрейма
      //---
      FrameNext(pass,name,id,val,stat_values);
      
      double SellPribl_from_Pribl=0.0;//Процент прибыльных позиций Sell из всех прибыльных
      double BuyPribl_from_Pribl=0.0;//Процент прибыльных позиций Buy из всех прибыльных
      double SellPribl_from_All=0.0;//Процент прибыльных позиций Sell из всех проторгованных
      double BuyPribl_from_All=0.0;//Процент прибыльных позиций Buy из всех проторгованных
      double Pribl_from_All=0.0;//Процент прибыльных позиций из всех проторгованных
      if (stat_values[12]>0) SellPribl_from_Pribl=stat_values[16]/stat_values[12]*100.0;
      if (stat_values[12]>0) BuyPribl_from_Pribl=stat_values[17]/stat_values[12]*100.0;
      if (stat_values[11]>0) SellPribl_from_All=stat_values[16]/stat_values[11]*100.0;
      if (stat_values[11]>0) BuyPribl_from_All=stat_values[17]/stat_values[11]*100.0;
      if (stat_values[11]>0) Pribl_from_All=stat_values[12]/stat_values[11]*100.0;
      
         Printer.Write(IntegerToString(pass),
                              stat_values[0],
                              stat_values[1],
                              stat_values[2],
                              stat_values[3],
                              DoubleToString(stat_values[4],2),
                              DoubleToString(stat_values[5],2),
                              DoubleToString(stat_values[6],2),
                              DoubleToString(stat_values[7],2),
                              stat_values[8],
                              stat_values[9],
                              stat_values[10],
                              stat_values[11],
                              stat_values[12],
                              stat_values[13],
                              stat_values[14],
                              stat_values[15],
                              stat_values[16],
                              stat_values[17],
                              stat_values[18],
                              stat_values[19],      
                              DoubleToString(SellPribl_from_Pribl,2),
                              DoubleToString(BuyPribl_from_Pribl,2),  
                              DoubleToString(SellPribl_from_All,2),
                              DoubleToString(BuyPribl_from_All,2),
                              DoubleToString(Pribl_from_All,2)
                              );




  }
//+------------------------------------------------------------------+
//| Завершение оптимизации                                           |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
      FileClose(Statistic);
  }
У меня как то так сейчас, все работает. Но, только надо переделать работу с записью в файл, так-как для этих целей я использую не публичный класс.
 
Aleksey Vyazmikin:
У меня как то так сейчас, все работает. Но, только надо переделать работу с записью в файл, так-как для этих целей я использую не публичный класс.

От фреймов отказался по той причине, что когда при вариантов больше, чем 18 степнень, они не работали.

в итоге поставил запись в файл в процедуре OnTester

@Aleksey Vyazmikin, можете проверить, будут ли работать фреймы при количестве вариантов больше, чем 18 степень? может уже поправили...

 
Nexxtor:

От фреймов отказался по той причине, что когда при вариантов больше, чем 18 степнень, они не работали.

в итоге поставил запись в файл в процедуре OnTester

@Aleksey Vyazmikin, можете проверить, будут ли работать фреймы при количестве вариантов больше, чем 18 степень? может уже поправили...

Эээ, извините за тупой вопрос, но что есть "18 степнень"? Сколько это в цифрах - туплю. Или речь о количестве переменных?

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