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

 
Aleksey Vyazmikin:

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

Речь об произведении количества шагов всех параметров.

Например:

Оптимизируем Стоплосс от 60 до 100 с шагом 10. Тейкпрофит от 80 до 140 с шагом 10; Количество шагов СтопЛосс  = 5. Тейкпрофит  = 7. Всего шагов будет 7 * 5 = 35. При обычной оптимизации (не генетической) тестер сделает 35 прогонов.

Вот когда общее прозведение шагов больше, чем 10 в 18 степени, фреймы не включаются. По крайнемере, так было в сентябре.

Я на скрине цифру, о которой речь, красным подчеркнул. У меня сейчас 63 степень. 

 
Nexxtor:

Речь об произведении количества шагов всех параметров.

Например:

Оптимизируем Стоплосс от 60 до 100 с шагом 10. Тейкпрофит от 80 до 140 с шагом 10; Количество шагов СтопЛосс  = 5. Тейкпрофит  = 7. Всего шагов будет 7 * 5 = 35. При обычной оптимизации (не генетической) тестер сделает 35 прогонов.

Вот когда общее прозведение шагов больше, чем 10 в 18 степени, фреймы не включаются. По крайнемере, так было в сентябре.

Я на скрине цифру, о которой речь, красным подчеркнул. У меня сейчас 63 степень. 

Не, я такое даже проверять не буду 1 000 000 000 000 000 000 - это перебор для здравого смысла...  я даже не представляю, что за мощности Вы используете для таких расчетов, разве что математическую оптимизацию, но и там на один параметр ограничения 999999999. Поэтому, не знаю, как помочь, извините.

 
Nexxtor:

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

fxsaber, 2017.08.23 14:10

Для записи данных Агентов в один файл нужно использовать Фрейм-режим.

// Пример записи данных Агентов (включая Облачные) в один файл
input int Range = 0;

void OnTick()
{
// ....
}

// Файл открываем только в режимах одиночночного прогона или Фрейма.
const int handle = ((MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_OPTIMIZATION)) || MQLInfoInteger(MQL_FRAME_MODE)) ?
                   FileOpen(__FILE__, FILE_WRITE | FILE_TXT) : INVALID_HANDLE;

// Подготовка данных
void GetData( string &Str, MqlTick &Ticks[], double &Balance )
{
  Str = "Hello World!";
  
  CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 2); // Последние два тика (пример)
  
  Balance = AccountInfoDouble(ACCOUNT_BALANCE);
}

// Запись данных
void SaveData( const string &Str, const MqlTick &Ticks[], const double Balance )
{
  FileWrite(handle, Str);
  
  for (int i = 0; i < ArraySize(Ticks); i++)
    FileWrite(handle, Ticks[i].bid);
    
  FileWrite(handle, Balance);
}

void OnTesterDeinit()
{
  if (handle != INVALID_HANDLE)  
    FileClose(handle);
    
  ChartClose();
}

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

double OnTester()
{
  string Str;
  MqlTick Ticks[];
  double Balance;
  
  GetData(Str, Ticks, Balance); // Подготовка данных для записи

  if (MQLInfoInteger(MQL_OPTIMIZATION)) // Оптимизация
  {
    CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
    
    Container[0] = Str;
    Container[1] = Ticks;
    Container[2] = Balance;
  
    FrameAdd(NULL, 0, 0, Container.Data); // Отправили данные из Агента на Терминал
  }
  else // Одиночный прогон
  {    
    if (handle != INVALID_HANDLE)
      SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Агента (не Терминала)
    
    FileClose(handle);
  }
  
  return(0);
}

void OnTesterPass()
{    
  if (handle != INVALID_HANDLE)
  {
    ulong Pass;
    string Name;
    long ID;
    double Value;
  
    CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
  
    while (FrameNext(Pass, Name, ID, Value, Container.Data))
    {
      string Str;
      MqlTick Ticks[];
      double Balance;
      
      // Получили данные от Агента
      Container[0].Get(Str);
      Container[1].Get(Ticks);
      Container[2].Get(Balance);
      
//      FileWrite(handle, Pass);     // Если хочется записать номер прохода
      SaveData(Str, Ticks, Balance); // Данные будут записаны в MQL5\Files-папку Терминала (не Агента)
    }
  }
}