Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот те, раз! А в истории она достоверная?
papaklass имел в виду, наверно, что OnTradeTransaction возвращает ошибки?
Если в OnTradeTransaction информация может быть не достоверная, то ее приходится брать из истории что бы убедиться что информация достоверная.
Если в OnTradeTransaction информация не всегда приходит, то информацию приходится брать из истории что бы убедиться что вся информация обработана.
Спрашивается, на кой черт тогда OnTradeTransaction, если все равно, в любом случае информацию приходится брать из истории? - Только если для контроля ошибок. Типа выставили ордер - брокер его отклонил, в OnTradeTransaction поймали ответ почему ордер был отклонен и проанализировали его.
а зачем слюни на 9 страниц ?
Пожалуйста, не хамите! Кстати, уже 10!
И Вы в праве совсем не читать, что здесь написано!
С-4, будет обработано, конечно, но зачем нужен OnRefresh()?
Много событий -> один обработчик.
Ошибки со всех углов в одну кучу! :)
Шлются не ошибки, а данные. Ошибки могут быть в обработчике, но их легко исправить, потому что обработчик один.
Я, именно, об этом. Нужно разделение событий.
Шлются не ошибки, а данные. Ошибки могут быть в обработчике, но их легко исправить, потому что обработчик один.
Нужно не разделение событий, а разделение обработчиков. События генерируют данные. Каждый тип данных обрабатывает свой обработчик. Неважно кем именно были получены данные, важно что на каждый тип данных существует свой уникальный обработчик.А что здесь не разделено?
А ведь есть ещё
А что здесь не разделено?
То что Вы предлагаете (обработку типов данных) и есть у МК в данный момент. Обработчик OnTradeTransaction и обрабатывает определенный тип данных MqlTradeTransaction. Правда в этот тип данных очень много чего засунули, т.е. типы данных, соответствующие разным событиям.
Я же предлагаю, чтобы у каждого события были свои данные и свой обработчик. Сколько событий, столько и обработчиков. Разделение ИМЕННО событий (открытие позиции, закрытие позиции, выставление ордера, модификация ордера, модификация позиции и т.д.). А какие типы данных приписать какому событию, пусть решают разработчики.
Под словом "обработчик" я понимаю не системную функцию, в которую приходит то или иное событие, а некий модуль эксперта, который это событие анализирует. Плодить множество функций On... каждую на свое событие - бессмысленно, тем более создать пользовательские обработчики в нужном количестве элементарно. Вот как сделано у меня:
Может показаться странным, что один и тот же некий класс Event передается совершенно разным обработчикам, которым необходимы совершенно разные типы данных. Так, для OnMouseMove необходима маска нажатых клавиш на мыши и ее координаты, для OnKeyDown() необходим код нажатой клавиши, для OnOrderChange - тикет ордера, который изменился и возможно перечисление, описывающее какое именно изменение произошло. Можно подумать что класс event содержит поля для всех возможных событий. Однако это не так. На самом деле объекта класса event даже не может существовать, т.к. его конструктор скрыт в области protected. Зато в изобилии существуют его потомки - каждый потомок для обработки только своего события. Однако для любого event существует идентификатор указывающий к какому типу он принадлежит. Зная этот идентификатор можно выполнять безопасное преобразование типа от большего к меньшему. Вот именно к этому типу потомка происходит неявное преобразование в момент передачи обработчика. Смотрим как на самом деле видят event наши обработчики:
Красота... Вроде событие только одно - event, а на самом деле их может быть десятки. Вроде событие не содержит практически ни какой информации, кроме своего типа, а на самом деле обработчики свободно обращаются к только им известным методам.Нет "внешних" и "внутренних" событий, а есть просто события. И количество этих событий потенциально может быть бесконечным. Событием может быть все что угодно. Событие может содержать какие угодно данные. Следуя этой философии мы достигаем нового, более высокого уровня абстракции данных. Зачем создавать ограничения в своей голове, зачем навязывать классификацию ограничивающую абстракцию!?
Существенное отличие внутренних событий от внешних - это время исполнения. У внутренних оно практически равно нулю, а у внешних оно измеряется от сотен миллисекунд до секунд.
У событий нет времени исполнения. Если событие пришло - оно уже исполнилось. Именно так работает асинхронный режим. Поэтому классифицировать события на внутренние и внешние потому на сколько быстро они исполняются неправильно. Правильно вообще не классифицировать, а мыслить предельно абстрагируясь от конкретной реализации.