Бета-версия платформы MetaTrader 5 build 2055: Интеграция с Python и массовые улучшения в тестере стратегий - страница 24
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Все Ваши агенты под вашим контролем?
Все агенты под моим контролем, но доступ к ним не очень удобен, к сожалению.
Попробуйте проанализировать код ошибки после FrameAdd. Если есть ошибка, то организовать деление на 0, чтобы спровоцировать критическую ошибку. Чтобы узнать какой из агентов виноват.
Не совсем понял, что нужно сделать - добавить
а делить на ноль неважно что, типа что б остановить оптимизацию?
Ну и допустим, выявили мы агента - так это же дело случая, а не стабильная зависимость в виде вины агента.
Посылка фреймов производится раньше посылки результата в том же потоке. Если результат дошёл, то фрейм тем более дойдёт. Если только он был правильно сохранен функцией FrameAdd
Тут не согласен - дойди же может один фрейм только, а их 1000.
Я не понимаю, почему нельзя научить аганта сообщать о числе фреймов полученных за проход, и что б серверная часть (на котором запущена оптимизация) контролировало получение всех фреймов в полном объеме? В случае, если все фреймы не пришли по какой либо причине после выполнения всех заданий, то повторно раздавать задания с не пришедшими фреймами и ждать их получения.
Все агенты под моим контролем, но доступ к ним не очень удобен, к сожалению.
Не совсем понял, что нужно сделать - добавить
а делить на ноль неважно что, типа что б остановить оптимизацию?
Ну и допустим, выявили мы агента - так это же дело случая, а не стабильная зависимость в виде вины агента.
Тут не согласен - дойди же может один фрейм только, а их 1000.
Я не понимаю, почему нельзя научить аганта сообщать о числе фреймов полученных за проход, и что б серверная часть (на котором запущена оптимизация) контролировало получение всех фреймов в полном объеме? В случае, если все фреймы не пришли по какой либо причине после выполнения всех заданий, то повторно раздавать задания с не пришедшими фреймами и ждать их получения.
В последних билдах если фрейм не может быть добавлен, то генерируется критическая ошибка нехватки диска. И такое задание будет отправлено на перевыполнение. Все ваши агенты последнего билда?
Деление на 0 четко покажет проблемного агента
Все фреймы отправляются одной пачкой. Если дошло 999 фреймов, значит было отослано 999 фреймов
У Вас дошло некратное 1000 количество фреймов. Если Вы абсолютно уверены что каждый OnTester посылает ровно 1000 фреймов, то какие-то из фреймов не добавляются. Не добавиться они могли только по нехватке ресурсов мало памяти и/или мало дискового пространства. И это не дело случая, а дело бедного агента, которого необходимо вычислить
Там агент занимает в памяти порядка 60 мегабайт, место на винчестере есть везде. К тому же, если запускать оптимизацию разбивая самому её на разные компьютеры, без удаленных агентов, то всё работает и агенты в 99,99% не теряются (1 раз была ситуация потери). Исходя из этого, я полагаю, что дело именно в вопросе передачи данных от удаленных агентов.
В последних билдах если фрейм не может быть добавлен, то генерируется критическая ошибка нехватки диска. И такое задание будет отправлено на перевыполнение. Все ваши агенты последнего билда?
Деление на 0 четко покажет проблемного агента
Так не совсем понял, у агента генерируется ошибка? Если это так, то тогда бы другие агенты с этого ПК не могли работать же и отдавать фреймы - не похоже на это.
По поводу кода, значит мне его надо добавить сюда?
Все фреймы отправляются одной пачкой. Если дошло 999 фреймов, значит было отослано 999 фреймов
А какая частота формирования этой пачки? Кажется, что ранее Вы говорили, что формирование пачек происходит с определенной периодичностью. Что является сигналом, к тому, что надо отправлять пачку?
В визуализаторе при загрузке мультитаймфреймного эксперта шаблон (с имерем эксперта) на основной таймфрейм грузится нормально, а на остальные таймфреймы при использовании Charts -> Templates не грузится. Установка любых других шаблонов так же не проходит. Ошибок в логах и нет.
Наблюдается это с билда 2055 (Текущий установленный 2085). Уточните пожалуйтса это баг или какая-то новая функциональность.
Заранее благодарен.
Там агент занимает в памяти порядка 60 мегабайт, место на винчестере есть везде. К тому же, если запускать оптимизацию разбивая самому её на разные компьютеры, без удаленных агентов, то всё работает и агенты в 99,99% не теряются (1 раз была ситуация потери). Исходя из этого, я полагаю, что дело именно в вопросе передачи данных от удаленных агентов.
Так не совсем понял, у агента генерируется ошибка? Если это так, то тогда бы другие агенты с этого ПК не могли работать же и отдавать фреймы - не похоже на это.
По поводу кода, значит мне его надо добавить сюда?
А какая частота формирования этой пачки? Кажется, что ранее Вы говорили, что формирование пачек происходит с определенной периодичностью. Что является сигналом, к тому, что надо отправлять пачку?
Проверять ошибку, если FrameAdd вернёт false
После каждого прохода оптимизации все накопленные фреймы (в вашем случае 1000 штук) отсылаются пачкой. Результат может быть отослан позже вместе с другими результатами. Но если проходы не очень быстрые, то результат отсылается сразу (это к вопросу о периодичности). То есть у фреймов больше шансов на доставку. Но если пришло менее 1000 фреймов, значит ошибка во FrameAdd
Проверять ошибку, если FrameAdd вернёт false
После каждого прохода оптимизации все накопленные фреймы (в вашем случае 1000 штук) отсылаются пачкой. Результат может быть отослан позже вместе с другими результатами. Но если проходы не очень быстрые, то результат отсылается сразу (это к вопросу о периодичности). То есть у фреймов больше шансов на доставку. Но если пришло менее 1000 фреймов, значит ошибка во FrameAdd
Внес такую правку в код - правильно?
Произвел оптимизацию с внесенными правками в код, получил такой результат
Вызывает удивление число дубликатов - 113, как я понимаю - откуда их так много может быть?
Что и где я теперь должен искать (в логах каждого агента, как я понимаю)?
В логе одного из агентов говорится, что выполнено 9 из 10 проходов - почему?
Содержимого в логах со словом "Error" не найдено. Я думаю, что в логах не хватает вообще информация о числе фреймов и работе с ними - приеме/передаче.Внес такую правку в код - правильно?
Произвел оптимизацию с внесенными правками в код, получил такой результат
Вызывает удивление число дубликатов - 113, как я понимаю - откуда их так много может быть?
Что и где я теперь должен искать (в логах каждого агента, как я понимаю)?
В логе одного из агентов говорится, что выполнено 9 из 10 проходов - почему?
Содержимого в логах со словом "Error" не найдено. Я думаю, что в логах не хватает вообще информация о числе фреймов и работе с ними - приеме/передаче.Дубликаты возникают когда долгое время не изменяется счётчик выполненных проходов. "Долгое время" рассчитывается на основе среднего времени выполнения одного прохода
10-е задание из пачки не было выполнено потому что тестерному агенту сказали остановиться. Скорее всего потому, что все задания выполнены. 10-ый проход был выполнен другим агентом.
Если у Вас в оптимизации всего 510 проходов, то можно включить галку полных логов в контекстном меню журнала тестера.
Вы уверены, что каждый проход посылает ровно 1000 фреймов? Это можно проверить через кастомный результат. В OnTester возвращайте результат примерно таким способом
где ExtTotalFrames - общее количество вызванных FrameAdd
ExtSuccessFrames - количество FrameAdd выполненных без ошибок
PS Бесполезно вызывать Print на оптимизации. При оптимизации принт работает только в OnInit, дальше эта возможность перекрываетсяДубликаты возникают когда долгое время не изменяется счётчик выполненных проходов. "Долгое время" рассчитывается на основе среднего времени выполнения одного прохода
10-е задание из пачки не было выполнено потому что тестерному агенту сказали остановиться. Скорее всего потому, что все задания выполнены. 10-ый проход был выполнен другим агентом.
Может на этом этапе возникает какой либо сбой? Просто если оптимизация на локальном компьютере, где все проходы занимают примерно одинаковое время, такого не происходит и фреймы как раз не теряются.
Если у Вас в оптимизации всего 510 проходов, то можно включить галку полных логов в контекстном меню журнала тестера.
Что это даст?
Вы уверены, что каждый проход посылает ровно 1000 фреймов? Это можно проверить через кастомный результат. В OnTester возвращайте результат примерно таким способом
где ExtTotalFrames - общее количество вызванных FrameAdd
ExtSuccessFrames - количество FrameAdd выполненных без ошибок
Да, каждый проход посылает ровно 1000 фреймов, это исходит из настроек перебора.
По поводу OnTester - у меня перебор как раз в нём и происходит - может в этом дело?
А вот как интегрировать ваш код - не понял, напишите пожалуйста конкретно какими функциями получить ExtTotalFrames и ExtSuccessFrames.
Ну и если логически рассуждать, то ошибка не может быть в моем коде, так как локальная оптимизация не теряет фреймов.
Что будет в каждом случае, если в момент передачи фрейма или оптимизации происходит обрыв соединения с агентом?