Ошибки, баги, вопросы - страница 2451
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Наверное, чтобы обнаружить такое, нужно было в поисках ошибки в своем коде дойти до внутреннего состояния/упорства "здесь ничего не может не работать, но все равно проверю".
Код парсил поток байтов под определенный протокол.
Не сходились размеры распакованных и не распакованных данных (данных для следующего уровня инкапсуляции).
Код парсил поток байтов под определенный протокол.
Не сходились размеры распакованных и не распакованных данных (данных для следующего уровня инкапсуляции).
Гистерезис в действии... на примере работы неявного оператора копирования в структурах.
А в чем вопрос?
в MQL условная запись
// a = b;равносильна
ArrayCopy( a, b );Результат:
ArrayPrint( a ); }2 2 3
А в чем вопрос?
Оператор копирования присваивания, на мой взгляд, должен копировать не только сами элементы массива, но и их количество, оставив действительным количество зарезервированной памяти.
А сейчас происходит практически следующее:
Исходный код:
Оператор копирования должен копировать не только сами элементы массива, но и их количество, оставив действительным количество зарезервированной памяти.
А почему тогда
в (1) случае ошибка, а во (2) все нормально!? Какая разница?
А такая что копированиe массивов происходит не по правилам a = b, а по правилам ArrayCopy( a, b )
Не по правилам a = b, потому что его нету, если бы оно было, то ошибки (1) не было бы
Если считать на каждом тике - это ресурсоёмко, особенно заметно в тестере стратегий. Не правильнее ли пересчёт делать только при событии Trade, т.е. когда реально меняется что-то в перечне открытых позиций? С OnTradeTransaction() упрощается контроль за вмешательством пользователя в работу советника. (есть прецеденты :)
В данном роботе тестил возможность закрытия сеток по схеме: убыточная + прибыльная > Х , то закрыть обе (как правило, на разных символах). Но сбой получается, т.к. не смотря на то, что они закрыты, тестер не знает об этом, и переходит к следующей итерации, ошибочно "спаривая" существующие с уже закрытыми. Т.е. пришлось добавить пересчёт после каждого закрытия.
Пересчёт у меня со сбросом счётчика и сначала по всем отрытым, не +1 / -1
Согласен, рисковано было изначально использовать OnTradeTransaction() Вообще, наверное, откажусь от неё в случаях когда запросы не асинхронные - одни проблемы от неё.
Нисколько не рискованно. Вопрос только в организации последовательности действий и событий. Барабашка правильно дальше сказал, закрыл пару и вышел из цикла до следующего тика. На следующем тике не факт что цены будут хуже чем есть. Может и лучше будет закрыть чуть позже, зато не будет путаницы что с чем закрылось.
Второй вариант: цикл организовать не по PositionsTotal, а по массиву созданному заранее. И при закрытии какой-то пары эти тикеты удалять из массива. Это не даст попасть закрытым позициям повторно на закрытие. В общем полёт фантазии и логика действий.
А такая что копированиe массивов происходит не по правилам a = b, а по правилам ArrayCopy( a, b )
Сами придумали, или где-то написано?
Напомню, речь идет работе неявного оператора присваивания для структур с динамическими массивами.
Сами придумали, или где-то написано?
Напомню, речь идет работе неявного оператора присваивания для структур с динамическими массивами.
Это не я придумал, а Разработчики
Почему ошибка? Обернули в структуру и ошибка исчезла? А почему? Что принципиально изменилось? Мои ответы вышеВопрос только в организации последовательности действий и событий.
Вы же сами привели цитату из мануала, где сказано, что последовательность не гарантируется. Потому и рисковано.
Я уже начал было переписывать код по совету Владимира, но споткнулся о случай, когда закрытие дольше тика - опять двойной подсчёт (узел фильтра в подсчёте уж очень тяжеловестный получился). Пока не придумал ничего лучше, чем остановка до полного закрытия, ради компромисса со скоростью оптимизации.
Пятница же :) Может отдохнув что-то соображу.
В любом случае, спасибо за идеи - они не пропадут!
Это не я придумал, а Разработчики
Так и не понял, где это написано, но не суть важно...
Спасибо за холивар.
Подперли костылем и побежал дальше: