![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А зачем Вам весь стакан формировать все время по всем символам? Для алгоритма это не нужно. Для визуального отображения тоже.
В моих роботах нужен стакан хотя бы с 3-я sell и с3-я buy
В том-то и проблема, что я торгую по всем инструментам ФОРТС, а их на реале около 500.
В моих роботах нужен стакан хотя бы с 3-я sell и с3-я buy
В том-то и проблема, что я торгую по всем инструментам ФОРТС, а их на реале около 500.
Ну, обновить 3000 значений даже с сортировкой О(N) никак не 30мс - на 3 порядка быстрей, думаю на современных процессорах.
Проблема в организации XML - сообщений
Попробую подробно объяснить
Структура хранилища данных выглядит так
seccode + board - Эта пара позволяет идентифицировать инструмент
А теперь цепочка обработки приходящих сообщений
1. Приходящее сообщение помещается в XML парсер (стандартный парсер Делфи)
2. Парсер ищет рутовый тег сообщения
3. Поиск пары, для идентификации инструмента
4. Первое заполнение стакана
5. Обновление стакана
Так вот, каждую измененную запись нужно найти и отсортировать, иначе
стакан не будет агрегирован! А из поста выше, видно сколько изменений нужно обработать!
Комп просто будет висеть, даже на 20 инструментах.
Добавлено
С списте инструментов ФОРТС - 13816 инструментов, для этого создан Instruments header
В моих роботах нужен стакан хотя бы с 3-я sell и с3-я buy
В том-то и проблема, что я торгую по всем инструментам ФОРТС, а их на реале около 500.
заведите пул по числу свободных тредов, пусть разбирают поступающее и накладывают изменения
в однопотоке с приемлемой скоростью разбираются скриптами 5-10 стаканов.
Для скальперных скальперов - один поток на скальпер, и потоки пополам (должны быть свободные). им дико скорость нужна
заведите пул по числу свободных тредов, пусть разбирают поступающее и накладывают изменения
в однопотоке с приемлемой скоростью разбираются скриптами 5-10 стаканов.
Для скальперных скальперов - один поток на скальпер, и потоки пополам (должны быть свободные). им дико скорость нужна
Приемник сообщений только один, чтобы направить сообщение нужно его идентифицировать!
Приемник сообщений только один, чтобы направить сообщение нужно его идентифицировать!
я не знаю устройства вашего внутреннего устройства :-) Как вы там всё организовали
почему получилось что приёмник ровно один и такой нагруженный. Если сетевое соединение возможно только одно, значит он должен раскидывать приходящие данные по исполнителям (на основе инструмента например).
образно - приёмник получил сообщение "изменения стакана по EURUSD" и должен сразу скинуть в тред который отвечает за EURUSD. Или если возможны несколько подключений, то открывать несколько и подписываться на EURUSD по одному а на GBPJPY по другому.
но это вам скорее не грозит - запустите работу по 2-м инструментам с максимально возможным стаканом и все косяки и недочёты сами всплывут. И будет ясность как исправлять на текущей архитектуре или как её поменять.
Приемник сообщений только один, чтобы направить сообщение нужно его идентифицировать!
В принципе, согласен с тем, что хмл - не лучший вариант для таких вещей. Поэтому этот вариант сразу пропускаю, займусь плазой.
Пора выходить, так сказать, на новый уровень.
В принципе, согласен с тем, что хмл - не лучший вариант для таких вещей. Поэтому этот вариант сразу пропускаю, займусь плазой.
Пора выходить, так сказать, на новый уровень.
Я об этом лет 8 назад говорил....
Но там, на плазе, конечно, все повеселее, но стаканы обновляются по тому же принципу.
Кстати, я забросил Tranreq connector и переключился тоже на Плазу.
Будет, что обсудить... :)
Добавлено
Вам хорошо, подцепил Cgate.h и все, а мне весь нужно "перестукивать" :(
Для Плаза 2 понадобятся следующие функции:
Ключ реестра = 'SOFTWARE\Moscow Exchange\SPECTRA Client''s Gate'
Запись = 'InstallDir'
А так же функция проверки работы сервиса 'SpectraCGate'
Если сервис не работает, то загружаем роутер ручками...
Командная строка выглядит так: