Ошибки, баги, вопросы - страница 2377
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да. Любой Print из OnInit
Спасибо. Интересно, если бы случайно не заметил, как узнать об этом возможно было бы...
ЗЫ Оставил бы эту фишку только для локальных Агентов. В Облаке запросто можно заспамить лог таким образом.
Спасибо. Интересно, если бы случайно не заметил, как узнать об этом возможно было бы...
ЗЫ Оставил бы эту фишку только для локальных Агентов. В Облаке запросто можно заспамить лог таким образом.
Когда запускаете генетику, то оптимизируете по пользовательскому критерию?
Судя по представленным логам, OnTester во всех случаях вернул 0
Обычно я оптимизирую по своему критерию, но тут пробовал и по штатным. Результат аналогичный.
OnTester возвращает 0, поэтому в результатах и нули - это понятно. Вопрос в том почему он возвращает "0" при общем прогоне (оптимизации), а при единичном прогоне из "нулевых результатов" (с теми же параметрами) выдаёт нормальный результат, график и пр? Т.е. что-то не работает в "Полном переборе" и при этом генетика работает нормально. Есть ещё мысли/идеи?
Есть ещё мысли/идеи?
Вытянуть всю инфу оптимизационного прохода подобным способом
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5. ТЕСТЕР СТРАТЕГИЙ. Расхождение результатов тестирования и оптимизации.
fxsaber, 2017.08.22 11:06
Вставить в советник эти строки
и запустить Оптимизацию. Затем запустить несовпадающий одиночный прогон.
Далее сравнить сохраненные два отчета соответствующих прохода из Оптимизации и одиночного прохода.
Результат сравнения этих двух отчетов быстро выявит причины.
Цель - максимально улучшить то, что сделано, прошу разработчиков не обижаться на возможную критику.
1. Не понятны причины таких сильных отличий "интерфейсов" для socket Read функций:
2. Название функции SocketIsReadable не имеет ни чего общего с тем, что выполняет на самом деле:
В действительности, SocketIsReadable -это аналог ioctlsocket() функции с флагом FIONREAD в Ws2_32.dll
3. Как пользователю с помощью функционала Socket* по не шифрованному соединению получить ответ от сервера с минимальными задержками по времени, если сервер не рвет соединение после передачи данных?
Ага, вот так это делается:4. SocketIsReadable возвращает ложную информацию.
Выключить интернет и выполнить вышеприведенный код.
В результате SocketIsReadable возвращает вменяемое значение 1. Чудеса.
Удалось описать где-то третью часть от общей массы вопросов и проблем связанных с Socket*.
К сожалению, необходимо достаточно много времени, что бы все проверить, описать, перепроверить... (так что не факт что будет продолжение)
Общее впечатление: или все делалось в большой спешке, или функционал Socket* попал на реализацию к junior разработчику.
В любом случае, текущее решение весьма сырое и покрывает достаточно узкий подход по использованию сокетов.
Обычно я оптимизирую по своему критерию, но тут пробовал и по штатным. Результат аналогичный.
OnTester возвращает 0, поэтому в результатах и нули - это понятно. Вопрос в том почему он возвращает "0" при общем прогоне (оптимизации), а при единичном прогоне из "нулевых результатов" (с теми же параметрами) выдаёт нормальный результат, график и пр? Т.е. что-то не работает в "Полном переборе" и при этом генетика работает нормально. Есть ещё мысли/идеи?
Можете поделиться советником (ex5 в личку) и условиями оптимизации?
Мы хотим воспроизвести указанную Вами проблему.
После исследований эксперт будет безвозвратно стёрт
Можете поделиться советником (ex5 в личку) и условиями оптимизации?
Мы хотим воспроизвести указанную Вами проблему.
После исследований эксперт будет безвозвратно стёрт
Можете поделиться советником (ex5 в личку) и условиями оптимизации?
Мы хотим воспроизвести указанную Вами проблему.
После исследований эксперт будет безвозвратно стёрт
Ответил в личку.
В рамках знакомства с функционалом Socket* возник целый ряд вопросов к текущей реализации.
Цель - максимально улучшить то, что сделано, прошу разработчиков не обижаться на возможную критику.
1. Не понятны причины таких сильных отличий "интерфейсов" для socket Read функций:
2. Название функции SocketIsReadable не имеет ни чего общего с тем, что выполняет на самом деле:
В действительности, SocketIsReadable -это аналог ioctlsocket() функции с флагом FIONREAD в Ws2_32.dll
3. Как пользователю с помощью функционала Socket* по не шифрованному соединению получить ответ от сервера с минимальными задержками по времени, если сервер не рвет соединение после передачи данных?
Ага, вот так это делается:4. SocketIsReadable возвращает ложную информацию.
Выключить интернет и выполнить вышеприведенный код.
В результате SocketIsReadable возвращает вменяемое значение 1. Чудеса.
Удалось описать где-то третью часть от общей массы вопросов и проблем связанных с Socket*.
К сожалению, необходимо достаточно много времени, что бы все проверить, описать, перепроверить... (так что не факт что будет продолжение)
Общее впечатление: или все делалось в большой спешке, или функционал Socket* попал на реализацию к junior разработчику.
В любом случае, текущее решение весьма сырое и покрывает достаточно узкий подход по использованию сокетов.
1. Таков интерфейс.
TLS функции являются вспомогательными для поддержки сложных случаев. Никаких проблем с выставлением SocketTimeouts - именно их лучше и использовать.
2. Она выполняет свою функцию правильно.
Видимо, вы не в курсе проблем детекции разрыва TCP соединений. Это достаточно сложно(ресурсоемко за счет дополнительных вызовов) обнаружить, что соединение гарантированно оборвано правильно. Все сетевые реализации страдают от этой проблемы.
Наша реализация SocketIsReadible достаточно умна и имеет детект разрыва связи. При обнаружении чистого 0 байт, она делает дополнительную работу по проверке завершенности сокета:
Так как она возвращает количество байт без флага завершенности, то она выдает 1 байт, чтобы последующая/неминуемая попытка SocketRead чтения штатно выдала ошибку.
Почему это правильно? Потому что большинство кода программистами в лоб пишется так:
фактически результат операции проверяется на прямой попытке чтении.
3. Нужно перед фактическим чтением делать SocketIsReadible(), если вы не знаете точного размера читаемых данных.
Связка SocketisReadible/SocketRead дает вам возможность не терять контроль(минимизировать почти до нуля утерю контроля) над потоком выполнения своей программы. Это позволяет избегать влетания в сетевые таймауты.
Да, на несколько строк больше кода, но вы ни на миллисекунду(грубо) не потеряете контроль. Вы сами решаете, что делать в промежутках отсутствия сетевых данных.
4. Объяснено во втором пункте.
Выдача 1 ради стимуляции чтения и выхода как ошибка чтения.
Ваши выводы неверные.
Такова природа TCP/IP транспорта, где вообще гарантий нет. Там и в сетевые черные дыры можно влететь на фильтрах/файрволах, когда нет части TCP сигналлинга. Сырой контроль таймаутов и потока данных позволяет их детектить и самостоятельно рвать соединения.
Мы дали сырой/прямой интерфейс доступа к сетевым функциям, включая TLS реализации. Если вы ими пользуетесь, то именно вам нужно правильно оборачивать сырые функции в защитный/контролируемый обработчик SocketIsReadible/SocketRead.
Если же вы хотите делать высокоуровневые запросы без необходимости думать о мелочах, то есть WebRequest функции. Там все защиты встроены.