Ошибки, баги, вопросы - страница 2436
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всё правильно. Фрейм доступен при условии его добавки в mqd-файл. Именно оттуда он и вычитывается фреймовыми функциями
Тогда, если правильно понимаю, тем, кто утверждает о потерях фреймов, стоит проверить их наличие в OnTesterDeinit.
У меня такой проблемы не было. Библиотеку писал для доступа к фреймам в обычном режиме советника в Терминале.
Не разобрался, за что отвечают последние 16 байтов.
Всегда надо дочитывать фреймы в OnTesterDeinit. Это как отче наш
Потом жалуются на пропажу фреймов
Впервые слышу про этот "отче наш". Где об этом сказано? Разве OnTesterDeinit не должен вызываться после получения всех фрэймов в терминал? Или он может перескакивать через другие события (в частности OnTesterPass), находящиеся в очереди событий? Если так, то это следовало бы прописать в документации, ибо это нетипичное поведение.
Если же вы имеете ввиду принудительную остановку тестирования самим пользователем, то здесь о пропаже фрэймов вообще нет смысла говорить.
Впервые слышу про этот "отче наш". Где об этом сказано? Разве OnTesterDeinit не должен вызываться после получения всех фрэймов в терминал? Или он может перескакивать через другие события (в частности OnTesterPass), находящиеся в очереди событий? Если так, то это следовало бы прописать в документации, ибо это нетипичное поведение.
Если же вы имеете ввиду принудительную остановку тестирования самим пользователем, то здесь о пропаже фрэймов вообще нет смысла говорить.
OnTesterPass может запросто вызваться по окончанию прохода, но к этому моменту фрейм-данные прохода могут не дойти из-за неидеальности сети.
Когда народ говорит, что фреймы теряются, он чаще всего имеет в виду, что в OnTesterPass не все получилось поймать.
Так вот дополучить можно всегда в OnTesterDeinit, т.к. Оптимизатор на стороне Терминала прекращает свою работу не тогда, когда Агенты все посчитали, а когда дождался прихода всех фреймов.
OnTesterPass может запросто вызваться по окончанию прохода, но к этому моменту фрейм-данные прохода могут не дойти из-за неидеальности сети.
Т.е. OnTesterPass вызывается без наличия фрэймов? Ну тогда это очевидная ошибка. Данное событие означает получение фрэйма, а не окончание прохода.
Все фрэймы должны придти в OnTesterPass до того, как вызывать событие OnTesterDeinit. Это нормальная здоровая логика. Если, повторюсь, речь не идёт о принудительном прерывании тестирования.
Т.е. OnTesterPass вызывается без наличия фрэймов? Ну тогда это очевидная ошибка. Данное событие означает получение фрэйма, а не окончание прохода.
Все фрэймы должны придти в OnTesterPass до того, как вызывать событие OnTesterDeinit. Это нормальная здоровая логика. Если, повторюсь, речь не идёт о принудительном прерывании тестирования.
Видимо, я ошибся. Думал, что TesterPass-событие - поступление данных прохода
Т.е. OnTesterPass вызывается без наличия фрэймов? Ну тогда это очевидная ошибка. Данное событие означает получение фрэйма, а не окончание прохода.
Все фрэймы должны придти в OnTesterPass до того, как вызывать событие OnTesterDeinit. Это нормальная здоровая логика. Если, повторюсь, речь не идёт о принудительном прерывании тестирования.
OnTesterPass вызывается, когда пришёл хотя бы один фрейм. Может прийти пачка фреймов. Поэтому в OnTesterPass надо принимать фреймы в цикле, а не по одному. Но если "после последнего раза - ни разу", то OnTesterPass не вызывается.
Оптимизация прекращается, когда пришёл последний результат. Фреймы могут поступить позднее, особенно если в фрейме передаётся большое количество данных или если передаётся сразу несколько фреймов на один проход. Поэтому в OnTesterDeinit, которая запускается по завершению оптимизации нужно организовывать приём оставшихся фреймов. Тоже в цикле.
Это - нормальная здоровая логика.
Я несколько раз давал примеры приёма фреймов именно в OnTesterDeinit, а не только в OnTesterPass. И именно приём сложных фреймов разных типов
если передаётся сразу несколько фреймов на один проход.
Когда-то пробовал, такое не прокатывало. Только один FrameAdd срабатывал.
Оптимизация прекращается, когда пришёл последний результат. Фреймы могут поступить позднее, особенно если в фрейме передаётся большое количество данных или если передаётся сразу несколько фреймов на один проход. Поэтому в OnTesterDeinit, которая запускается по завершению оптимизации нужно организовывать приём оставшихся фреймов. Тоже в цикле.
Если фрэймы могут поступить позднее, то значит нет гарантии, что и в OnTesterDeinit они будут сразу? Т.е. надо делать цикл ожидания? И как долго ждать?
Я то ранее подумал, что дело обстоит так: OnTesterPass вызывается только для тех фрэймов, которые пришли с момент окончания предыдущего OnTesterPass. Если же новый фрэйм пришёл в процессе выполнения OnTesterPass , а конкретней - с момента последнего вызова FrameNext и до завершения функции, то этот фрэйм так и останется висеть, пока не придёт новый фрэйм, генерирующий событие. Поэтому OnTesterDeinit и необходим для получения этих висящих фрэймов.
Если фрэймы могут поступить позднее, то значит нет гарантии, что и в OnTesterDeinit они будут сразу? Т.е. надо делать цикл ожидания? И как долго ждать?
Я то ранее подумал, что дело обстоит так: OnTesterPass вызывается только для тех фрэймов, которые пришли с момент окончания предыдущего OnTesterPass. Если же новый фрэйм пришёл в процессе выполнения OnTesterPass , а конкретней - с момента последнего вызова FrameNext и до завершения функции, то этот фрэйм так и останется висеть, пока не придёт новый фрэйм, генерирующий событие. Поэтому OnTesterDeinit и необходим для получения этих висящих фрэймов.
FrameNext - это тупое чтение mqd-файла и больше ничего.
FrameFirst - FileSeek.