Чисто теоретически - почему?

 

Советник с нейронной сетью. 

Одиночный тест за этот период проходит за

Решил посмотреть профилировщиком

В принципе, ничего криминального. checkSignal - это получение сигнала от сети. Всё логично и правильно.

Ставлю генетическую оптимизацию. Всего параметров (у сети параметров нет, подбираются параметры безубытка и стопов)

За 10 минут агенты выполнили только 7 заданий. Грустно. Но это ещё не вопрос )))

Собственно параметров не так уж и много. Ставлю медленную оптимизацию.

Время 12:47.....

Время 12:51....


Прошло 4 минуты а агенты по нулям. Почему?

Хотя пишет, что выполнено 7 заданий....


П.С. Хотя, в принципе, 7 агентов за 4 минуты должны были бы сделать 28 заданий. Ну хорошо, накладные расходы и тыр-быр-тыр, ну хотя бы 21.... Нет?

 
Журналы Надо смотреть. Скорее всего синхронизация символов продолжается долго. 
 
Dmitiry Ananiev:
Журналы Надо смотреть. Скорее всего синхронизация символов продолжается долго. 

Советник не мультивалютный. О какой синхронизации речь?

 
Сергей Таболин:

Советник не мультивалютный. О какой синхронизации речь?

Вы перекомпилировали советник после его профилировки ?

 
Ilyas:

Вы перекомпилировали советник после его профилировки ?

Да.

Более того, определил один ну ооочень "тормознутый" индикатор, удалил его из сети, тест (и соответственно, ген. оптимизация) идут значительнее быстрей. Медленную пока не ставил.

Но это всё не отвечает на вопрос: почему в течение 4-х минут оптимизации активность агентов на нуле?

 

К стати, вот сейчас идёт оптимизация и, между делом, рисует мне такие строки:

2020.05.08 16:17:30.748 Core 3  genetic pass (7, 361) tested with error "OnInit failed" in 0:00:00.001

В OnInit() у меня везде прописана причина INIT_FAILED.

А тут никак это не отражено. Как понять что именно вызвало ошибку инициализации?


Это я к тому, что было бы здорово возвращать эту самую причину. Вместо return(INIT_FAILED); ввести функцию типа ReturnInit(INIT_FAILED, "Тут причина ошибки");
 
Сергей Таболин:


Это я к тому, что было бы здорово возвращать эту самую причину. Вместо return(INIT_FAILED); ввести функцию типа ReturnInit(INIT_FAILED, "Тут причина ошибки");

Так ведь никто не запрещает указать причину (записать ее в свой файл, т. к. Print при оптимизации ничего не выдаст в журнал). 

 
Ihor Herasko:

Так ведь никто не запрещает указать причину (записать ее в свой файл, т. к. Print при оптимизации ничего не выдаст в журнал). 

Так это конечно, только это же ещё время потерянное. Плюс это нужно и во всех включаемых файлах тоже прописывать запись в файл. Значит это должен быть вполне определённый файл. А это уже компот )))

 
Ihor Herasko:

Так ведь никто не запрещает указать причину (записать ее в свой файл, т. к. Print при оптимизации ничего не выдаст в журнал). 

Последовал совету. Ошибка возникает в этом:

int   readPeriodZZ3()
{
   int      pmZZ3    = 0;
   string   dirNC    = dir_NC+"MLP\\";
   string   filename = dirNC+"!NCC.net";
   int      h        = FileOpen(filename, FILE_BIN|FILE_READ|FILE_COMMON);
   if(h != INVALID_HANDLE)
   {
      FileSeek(h,0,SEEK_SET);
      pmZZ3 = (int)FileReadInteger(h);
   }
   FileClose(h);
   Print("pmZZ3 = ",pmZZ3);
//+---------------------
   return(pmZZ3);
}
-------------------------------------------
   int   period_mZZ3 = readPeriodZZ3();
   if(period_mZZ3 == 0)
   {
      Print("Ошибка определения периода индикатора myZigZag3.");
      writeErrorFile(program_name,program_version,"Ошибка определения периода индикатора myZigZag3.");
      return(INIT_FAILED);
   }

Только вот не понятно, почему этот инт то считывется, то нет?

Может я как то не правильно его считываю?


P.S. FILE_SHARE_READ ситуацию не исправил...