Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1220
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Одна секунда - это частая потеря последней сделки/ордера на реале. Например, на многих бриджах ордер уходит на исполнение на TTL-время, которое может быть равно пяти секундам. Если за пять секунд не исполнился - реджект. Либо исполнился, но секунды за три.
В случае, если от акцепта до исполнения не было тиков, такой вызов HistorySelect не получит об этом информацию.
Возможно, TimeCurrent стоит делать равным MathMax(LastOrder_time, MarketWatch_Time). Тогда HistorySelect будет корректный. Но TimeCurrent, возможно, слишком дорогой.
ЗЫ Кстати, такая схема работа HistorySelect будет пропускать часть истории торгов.
Хотя, на первый взгляд, все чисто.
Написать дешевый DealsTotal() не просто в MT5. Это не элементарный (и бесплатный) OrdersHistoryTotal() в MT4.
мысли вслух, не претендую на актуальность и компетентность:
В случае, если от акцепта до исполнения не было тиков, такой вызов HistorySelect не получит об этом информацию.
Вы не решите эту проблему, модель взаимодействия сервер - терминал - MQL изначально такая была заложена
в МТ5 еще не дошел до момента проверок, но в МТ4 точно знаю, что бывают ситуации когда на в окне обзор рынка на символе происходят изменения цен по нашему символу, а вот тиков в ЕА может не поступить или поступает меньше
ладно не суть, так работает значит так, Вам просто нужно в ТС выбрать решение, что происходит с ордером при отсутствии информации от сервера с момента отправки ордера - т.е. априори ордер будет выставлен или отклонен, а получив ответ подтверждать это предварительное решение или отменять - т.е. работать с неподтвержденной информацией или ждать все таки ответ от сервера - это предлагают MQ и Вас скорее всего не устраивает
сать дешевый DealsTotal() не просто в MT5. Это не элементарный (и бесплатный) OrdersHistoryTotal() в MT4.
а не напишите ;)
вернее, скорее всего напишите и будете тратить ресурсы ЕА на сопровождение алгоритма, думаю нужно выяснить как работает SQLite, MQ тесты производительности заявляла, работа с большими таблицами и выборками это как раз и назначение БД - код ЕА будет минималистическим, всю работу БД будет Вам делать, вся работа сведется к заполнению данных при выставлении ордера и актуализации при ответе от сервера (синхронизация, понятное дело при запуске ЕА, БД в памяти)
а не напишите ;)
вернее, скорее всего напишите и будете тратить ресурсы ЕА на сопровождение алгоритма, думаю нужно выяснить как работает SQLite, MQ тесты производительности заявляла, работа с большими таблицами и выборками это как раз и назначение БД - код ЕА будет минималистическим, всю работу БД будет Вам делать, вся работа сведется к заполнению данных при выставлении ордера и актуализации при ответе от сервера (синхронизация, понятное дело при запуске ЕА, БД в памяти)
Изначально был написан и выложен. Вряд ли получится быстрее.
Изначально был написан и выложен. Вряд ли получится быстрее.
значит я задачу не правильно увидел
думал, что нужно актуализировать список ордеров из двух точек OnTradeTransaction() и OnTick() , поэтому и предложил в БД это выполнять
Вот мой код. В инициализации он создает в таблице одну запись. В теле OnTick он сразу же должен вернуть ошибку, так как я пытаюсь добавить запись с таким же PRIMARY KEY, и после этого база сразу закрывается. Но при этом я при ее открытии должен увидеть хотя бы ту первую запись, но при запуске в тестере ее нет. И даже таблица не создается. А если запускаю просто в терминале то все нормально. Первая запись есть.
С расположением базы вы ведь не напутали надеюсь?
С расположением базы вы ведь не напутали надеюсь?
Нет конечно. Все в Files пишется. Думаю что в режиме тестера база создается в памяти и после теста уничтожается.
мысли вслух, не претендую на актуальность и компетентность:
...
вернее, скорее всего напишите и будете тратить ресурсы ЕА на сопровождение алгоритма, думаю нужно выяснить как работает SQLite, MQ тесты производительности заявляла, работа с большими таблицами и выборками это как раз и назначение БД - код ЕА будет минималистическим, всю работу БД будет Вам делать, вся работа сведется к заполнению данных при выставлении ордера и актуализации при ответе от сервера (синхронизация, понятное дело при запуске ЕА, БД в памяти)
И какая БД будет делать Вам всю работу?? Вы подскажите?
На одном терминале только выставление ордеров, на другом( с тем же брокером и счетом) контроль исполнения. коммуникация либо через БД, либо через PUB/SUB ZMQ. БД конечно не SQLite. наиболее подходящим для этих целей Redis, конечно личное мнение.
Удачи