Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
отличия только из за перестановки строк сделок закрытых на одной миллисекунде
Нарушили хронологию в записи истории ордеров.
Лучше конечно как правильнее. Можно сделать переключатель правильно/как в теcтере MQ. Думаю второй вариант тоже будет интересен.
Добавил выключатель
Это мне самому точно понадобится.
Нарушили хронологию в записи истории ордеров.
Это из за удаленных
//this.IsChange();//закроет лимитки по ТП/СЛ открывшиеся на этом же тике
В OrderClose() и в OrderDelete(). Т.е. закрытые там ордера уходят в архив на следующем тике, потому они и оказались ниже.
Надо сделать отправку в архив без проверок срабатывания всех ордеров на ТП/СЛ.
Добавил Check
А в OrderClose() и в OrderDelete() снова открыл вызов IsChange(), но отключил пересчет ордеров
Теперь выглядит так (Gif-ка)
По поводу
Может while для неттинга нужна была. Не знаю, неттинг не изучал. Вам как автору виднее. Нужна?
Если она там нужна, то if (this.Netting) можно вынести наверх, и для него делать while. А для хеджинга просто 1 вызов.
для хеджинга просто 1 вызов.
IsChange - изменение состояния ордера (открылась/закрылась позиция). Поскольку на одном тике может быть два изменения состояния, то одним if, вроде, не обойтись. Надо вникать для более точного ответа. Этот код не менялся с самого начала написания библиотеки. Тогда на тему производительности не думал точно.
IsChange - изменение состояния ордера (открылась/закрылась позиция). Поскольку на одном тике может быть два изменения состояния, то одним if, вроде, не обойтись. Надо вникать для более точного ответа. Этот код не менялся с самого начала написания библиотеки. Тогда на тему производительности не думал точно.
Сделал как в тестере MQ. Все 1-м вызовом решается и получается точное совпадение. Кстати и ускорение получим. Это по экспериментам с хеджингом. Про неттинг не знаю может там для CloseBy нужен цикл (хотя в хеджинге частичное закрытие вроде посчиталось правильно, кроме закоментированного закрытия на одном тике).
В принципе можно и 1-м вызовом: после срабатывания лимитки или открытия рыночного, сразу проверять ТП/СЛ и закрывать, если сработали. Так и скорость сохранится, т.к. не будем весь массив проверять 2-й раз на срабатывание ТП/СЛ.
Можно через #define оба варианта сделать правильный / MQ.
Думаю MQ запретили срабатывание на том же тике, как защиту от дурака, который поставил стоп на цену открытия. Хотя одуматься он не успеет, следующий тик приходит обычно очень быстро. Так что без разницы, так и так потеряет спред+комиссию. А на 1 тик больше или меньше уже не так важно.
Плюс код быстрее, с 1-й проверкой всех ордеров. Может это основной аргумент.
Сделал как в тестере MQ. Все 1-м вызовом решается и получается точное совпадение. Кстати и ускорение получим. Это по экспериментам с хеджингом. Про неттинг не знаю может там для CloseBy нужен цикл (хотя в хеджинге частичное закрытие вроде посчиталось правильно, кроме закоментированного закрытия на одном тике).
В неттинге (лет пять не запускал Virtual в этом режиме) необходимо, как минимум, две проверки.
В принципе можно и 1-м вызовом: после срабатывания лимитки или открытия рыночного, сразу проверять ТП/СЛ и закрывать, если сработали. Так и скорость сохранится, т.к. не будем весь массив проверять 2-й раз на срабатывание ТП/СЛ.
Такое рассматривал, не стал заморачиваться. Надо будет посмотреть, раз уж столько изменений.
Думаю MQ запретили срабатывание на том же тике, как защиту от дурака, который поставил стоп на цену открытия. Хотя одуматься он не успеет, следующий тик приходит обычно очень быстро. Так что без разницы, так и так потеряет спред+комиссию. А на 1 тик больше или меньше уже не так важно.
На терминале такая же ситуация.
Плюс код быстрее, с 1-й проверкой всех ордеров. Может это основной аргумент.
Точно не MQ-аргумент.
А так же
В итоге получим точное совпадение с тестером МQ по всем перечисленным ниже тестам. Анимация результатов обоих тестеров: (тот, что с комментариями - тестер MQ, отличия только из за перестановки строк сделок закрытых на одной миллисекунде)
Думаю можно такой советник считать полной проверкой всех возможных вариантов торговых операций (кроме OrderCloseBy - может вы добавите такую проверку?)
По дате обновления вижу, что вы еще не добавили в свой код пересчет прибыли в валюту депозита, комиссии в % за лот, ежедневные свопы по текущей цене, о которых писал тут https://www.mql5.com/ru/blogs/post/755500.
Вот моя последняя версия библиотеки с ними и с сегодняшними корректировками.
Только что опубликовал https://www.mql5.com/ru/code/47816
Стало точно как в тестере МQ
Тогда придется учитывать еще FreezeLevel/StopLevel.
Тогда придется учитывать еще FreezeLevel/StopLevel.
Expiration тоже легко добавить.
И Slippage наверное тоже просто, еще не думал. Да и не знаю как должно быть. Это, если следующий тик < запрошенной цены покупки + Slippage, то разрешаем?