Trading tools

Сотрудничество


 
Полезное
Подписка на RSS-ленту

Поддержать проект:

WM:
R757443857681
Z305778025977

Soft

07
Авг

Платформа для торговых роботов

Платформа qSDK

Доступны для скачивания модули торговой платформы (драйвер QCP_Driver) и точка подключения к QUIK (QCP_QUIK). Теперь ранее реализованные и новые торговые автоматы qSDK можно запускать непосредственно на платформе qSDK!

Принципы работы модульной архитектуры qSDK

Скачать модули

02
Авг

Модули торговых автоматов qSDK

В настоящее время QuikOrdersDOM – это программа для быстрого ввода заявок для терминала Quik (скальперский привод). Корме того, QuikOrdersDOM – это платформа для торговых автоматов (модулей автотрейдинга), которые могут быть реализованы любым независимым разработчиком. Также уже реализованы торговые автоматы и индикаторы в виде модулей автотрейдинга.

Пришло время сделать следующий логический шаг в эволюции средств автоматизации биржевой торговли ttools.ru: QuikOrdersDOM будет разделен на платформу для модулей автотрейдинга и скальперский привод, реализованный, как модуль автотрейдинга. Кроме того, платформа (точка подключения) станет заменяемым модулем, который также может быть реализован любым разработчиком по описанным правилам реализации. Для любого способа подключения к биржевым торгам (терминалам, протоколу Plaza2, FIX, и другим) будет возможно реализовать (и будет реализовано) платформу, с которой будет работать QuikOrdersDOM и другие модули автотрейдинга. Дистрибутивы и документация будут доступны в ближайшее время.

Удачной торговли и больших профитов!

Модули торговых автоматов qSDK

Читать полностью »

29
Июль

Plaza2 и МТС #5. Обработка заявок

Задача обработки собственных заявок состоит в том, чтобы как можно более актуально хранить динамические данные о ранее выставленных заявках и максимально быстро получать информацию о любой ранее отправленной заявке. При этом необходимо учесть, что торговый алгоритм (или несколько одновременно работающих торговых алгоритмов) может быть высокочастотным, т.е. количество заявок за сессию может достигать сотен тысяч.
Читать полностью »

25
Июнь

Plaza2 и МТС #4. Время

Потоки

При реализации торговых автоматов важно как можно точнее определять текущее время сервера в реальном времени. Это необходимо для:

  1. измерительных задач (например, измерить задержку маркетдаты)
  2. максимально точного исполнения частей торгового алгоритма, связанного со временем (например, прекратить открывать позиции после 16:30 до 16:31)
  3. Для максимально точного сохранения рыночных данных с привязкой к текущему моменту для последующего исторического тестирования
  4. Наверое, для чего-то еще.

На первый взгляд, задача достаточно проста: необходимо лишь получить время сервера, которое транслируется каждую секунду в таблице heartbeat и скорректировать время локальной машины, на которой работает торговый алгоритм.

Такой способ подходит для грубой синхронизации, с точностью примерно до секунды. Но ведь когда речь идет о Plaza2, подразумевается, что возможно торговый алгоритм будет высокочастотным и необходима максимально возможная точность. Здесь придется столкнуться с четырьмя нюансами, которые необходимо учитывать.

Первый связан с механизмом распространения рыночных данных (в том числе и таблицы heartbeat и остальных таблиц с временной меткой, которые понадобятся для синхронизации). Дело в том, что рыночные данные рассылаются биржей клиентам с определенной задержкой. Точнее, не так, чтобы абсолютно все данные задерживались ровно на N миллисекунд; каждая порция данных накапливается в течение этого времени и рассылается клиентам целиком. То есть, если событие произошло сразу после отправки клиенту очередного кванта данных, то клиент будет уведомлен через интервал N, а если событие произошло непосредственно перед очередной рассылкой, то уведомление будет отправлено клиенту без задержки. С развитием инфраструктуры биржи значение времени этой задержки постепенно уменьшается и на текущий момент значение N составляет 100 мс.

Второй нюанс связан с общей проблемой точной синхронизации двух компьютеров. Дело в том, что ни одни часы в мире не могут идти абсолютно точно, и по истечении определенного временного интервала двое самых точных часов без промежуточной синхронизации покажут существенное расхождение. Компьютерные часы в среднем могут убегать или отставать на несколько секунд за сутки. Учитывая, что накопление погрешности с течением времени может бать нелинейным, синхронизировать 2 компьютера достаточно сложно. Поэтому для синхронизации понадобится динамическая и максимально частая сверка часов.

Третий нюанс связан с технологией измерения времени операционной системы (Windows). Точкой отсчета для измерения времени, очевидно, является время локальной машины, на которой работает торговый алгоритм, более доступного точного источника времени в данной ситуации просто нет. Существует несколько функций Windows, предназначенных для получения текущего значения времени, однако не все они одинаково полезны. Для максимально точных замеров времени потребуются функции максимального разрешения. Для этих целей обычно испльзуют функции QueryPerformanceFrequency / QueryPerformanceCounter, или/и процессорную инструкцию RDTSC

Четвертый нюанс связан с особенностями синхронизации времени самого ядра биржи. Время ядра плавно подстраивается по внешнему GPS-датчику, благодаря чему обеспечивается точная синхронность времени в ядра биржи с мировым временем, но приводит к большим нелинейностям разности счета времени сервера торговой системы и ядра.

В потоках плазы есть несколько таблиц, с помощью которых можно синхронизировать время сервера торговой системы и ядра биржи. Это таблицы, которые содержат время события в «реальном времени» одним из полей. Это таблица всех сделок, собственно heartbeat, таблица полного лога заявок (если подключена). Синхронизируя время по этим таблицам можно получить точность синхронизации [0..N], а точнее, если учесть время на сетевые задержки маркетдаты T [T..N+T]. T зависит от качества маршрута между шлюзом биржи и торговым автоматом и минимизируется инвестициями в и работой над торговой инфраструктурой. Такой разброс уже гораздо лучше, чем использование heartbeat. На этом этапе можно легко добиться отклонений [0..150мс], или 75 мс в среднем. Если синхронизировать время по каждому событию из этих таблиц, то каждая синхронизация может как улучшить так и ухудшить точность, по сравнению с предыдущей синхронизацией. Причем, если пришедшее в новой реплике время меньше чем текущее – однозначно синхронизация улучшает результат, если больше – улучшает в половине случаев. То есть, если будут получены лучшие показатели, то такую синхронизацию всё равно имеет использовать частично, для корректировки случаев, если время в реплике меньше, чем установленное время в момент последней синхронизации.

Добиться лучшего результата можно, используя собственные заявки. В ответе шлюза на транзакцию добавления/перемещения заявки содержится время изменения параметров заявки, т.е. если при отправке заявки и при получении ответа запомнить локальное время, это и будет интервал времени локальной машины, внутри которого находится (можно считать посередине) время сервера, которое указано в реплике-ответе шлюза на постановку заявки. Таким способом можно получить синхронизацию серверного времени с локальным с точностью +/- 15 мс, без учета корректировок по таблицам маркетдаты, т.е. на самом деле ещё точнее.

15
Июнь

TradeProcessor 1.0.0.6.

Новая версия доступна для скачивания в разделе Скачать

Trade Processor – программный модуль, который позволяет в автоматическом режиме управлять дельтой опционного портфеля, а также автоматически управлять размером позиции по биржевому инструменту, в зависимости от его цены. Подробнее…

Что нового в версии 1.0.0.6:

  1. Продлен срок бесплатного использования до 1 января 2013 года.

Приятного использования и больших профитов! ;)

Скальперский привод для Quik QuikOrdersDOM

Подписаться на блог ttools.ru по email: