при оптимизации задания агенту выдаются пачками ( могу ошибаться, но по 4 шт задания )
поэтому логика:
Допустим, у нас есть 2 агента, работающих при оптимизации.
- первый агент. условие А. запись в файл 123
- в файле 123
- второй агент. условие А. запись в файл 321
- в файле 321
- первый агент. условие Б. читает из файла....
будет примерно такая:
- первый агент закончил задание записал 123, первый агент прочитал или нет свои 123
- первый агент закончил задание записал 456 , прочитал 123
- второй агент закончил задание , записал 321, прочитал 456
- второй агент закончил задание, записал 789, прочитал 321
Вопрос - будет ли совпадать результат из оптимизации с результатом одиночного теста?
будет, если использовали один агент = одно ядро, в остальных случаях синхронизируйте запись или в разные файлы или выдумывать, что-то наподобие мьютексов
при оптимизации задания агенту выдаются пачками ( могу ошибаться, но по 4 шт задания )
поэтому логика:
будет примерно такая:
- первый агент закончил задание записал 123, первый агент прочитал или нет свои 123
- первый агент закончил задание записал 456 , прочитал 123
- второй агент закончил задание , записал 321, прочитал 456
- второй агент закончил задание, записал 789, прочитал 321
будет, если использовали один агент = одно ядро, в остальных случаях синхронизируйте запись или в разные файлы или выдумывать, что-то наподобие мьютексов
Спасибо, но оптимизация на одном ядре.... не камильфо ))
Вот в том то проблема. Для оптимизации нужно как-то сделать так, чтобы каждый агент писал-читал свой файл. Но как это сделать не представляю.
Вообще то я думал, что при оптимизации каждому агенту выделяется индивидуальный поток со всеми вытекающими. А получается.....
Вот в том то проблема. Для оптимизации нужно как-то сделать так, чтобы каждый агент писал-читал свой файл. Но как это сделать не представляю.
- или не пишите в общую папку, файлы будут в папке тестер\агент
- или формируйте имя файла по номеру агента, вот нашел у себя тест - просто считает сколько проходов оптимизации выполнил каждый агент
input ushort param = USHORT_MAX; #include <Files\FileTxt.mqh> CFileTxt f; const string path = TerminalInfoString(TERMINAL_DATA_PATH); const string agent = "Agent_" + StringSubstr(path, StringLen(path) - 4); long pass; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { f.Open(agent+".txt", FILE_READ | FILE_WRITE | FILE_COMMON); if(f.Size() == 0) pass = 0; else pass = StringToInteger(f.ReadString()); f.Close(); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { pass++; f.Open(agent+".txt", FILE_WRITE | FILE_COMMON); f.WriteString((string)pass); f.Close(); } //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret = 0.0; //--- //--- return(ret); } //+------------------------------------------------------------------+
- или не пишите в общую папку, файлы будут в папке тестер\агент
- или формируйте имя файла по номеру агента, вот нашел у себя тест - просто считает сколько проходов оптимизации выполнил каждый агент
Спасибо. Попробую и так и так.
И ещё вопрос. Недавно у человека была проблема похожего типа, только он использовал базу данных. База данных же не пишется с коммон-флагом? Я просто подумываю над этим вариантом, раньше не использовал. Не столкнусь ли и там с подобным?
в справке, в разделе работа с БД есть ссылка на статью от Метаквот
кажется в комментариях к статье админ тестировал совместную запись из агентов тестера в одну БД
но по моему Вы не то ищете, скорее всего Вы хотите раздавать агентам задания самостоятельно, тогда OnTesterPass()
в справке, в разделе работа с БД есть ссылка на статью от Метаквот
кажется в комментариях к статье админ тестировал совместную запись из агентов тестера в одну БД
но по моему Вы не то ищете, скорее всего Вы хотите раздавать агентам задания самостоятельно, тогда OnTesterPass()
Нет, Игорь. Я хочу просто писать советник и не думать, что он может неправильно оптимизироваться.
А пока получается так, что я пишу советник и при этом должен ещё думать "а что будет при его оптимизации, где возникнут подводные камни?". На мой непрофессиональный взгляд - это не барско...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Логика советника:
При работе советника в режиме простого теста никаких вопросов не возникает. А вот при оптимизации...
Если не использовать FILE_SHARE_READ и FILE_SHARE_WRITE, то получим массу ошибок. А что получим, если использовать FILE_SHARE_READ и FILE_SHARE_WRITE ?
....
Допустим, у нас есть 2 агента, работающих при оптимизации.
Вопрос - будет ли совпадать результат из оптимизации с результатом одиночного теста?
И правильно ли я понимаю этот процесс?