Под катом скучное и неинтересное описание устройства торговой программы.
Итак, торговая программа состоит из множества модулей, самым главным из которых является API. Обращаясь к нему, другие модули могут общаться между собой. Именно API обеспечивает выполнение торговых функций и вывод данных.
API имеет дочерние структуры: GUI для работы с графическим интерфейсом, Configloader для сохранения данных конфигурации программы, Dataparser для разбора и упорядовачивания поступающих данных, Plugins для загрузки торговых алгоритмов, Csvrec для сохранения данных в для Excel, и (пока нереализованный) JSON для управления через RESTful API (вместо всяких DDE).
Модуль GUI — это вещь в себе, он загружает окна, выводит на экран текст и графики, определяет, что происходит при нажатии кнопок и так далее. Торговый алгоритм-плагин при необходимости обращается к нему, чтобы занять для себя какую-нибудь кнопку в интерфейсе или вывести что-нибудь на экран.
Configloader при запуске загружает сохраненные данные или берет конфигурацию из командной строки
Dataparser — сложный асинхронный модуль, имеющий несколько частей, главные — Stock и Datasource.
Stock содержит данные, включая таблицы с ордерами, сделки стаканы, позиции и все-все, что связано с торговой информацией. Именно сюда Dataparser складывает данные, полученные и разобранные в правильный вид. Сырые данные он получает из Datasource — модуля, который следит и поддерживает соединение с сервером брокера. Connector — это модуль более низкого уровня, получающий данные от Transaq XML Connector и отдающий XML-данные выше по цепочке в Dataparser, который разберет и сложит их в Stock. Этот же модуль отправляет команды на исполнение сделок брокеру.
Plugins — это модуль, запускающий файлы торговых систем, оформленных как .py файлы, то есть написанные на Python программы.
Каждый плагин при запуске получает объект API, через который может обращаться к другим модулям программы. Например, выводить данные через api.gui, узнавать состояние рынка, подписываться на торговые инструменты через api.stock.
Модуль работы с JSON был запланирован, но не реализован из-за того, что пока в нем не было необходимости. Добавить его не составляет большого труда, но на данный момент с импортом-экспортом данных оказалось удобней работать через плагин.
CSVrec записывает таблицы с данными в CSV и используется для создания моментальных снимков состояния любой таблицы для последующего анализа (например, чтобы сделать снимок состояния «стакана», достаточно два раз щелкнуть по нему). Также CSVrec можно использовать для экспорта данных в другие программы, например, в TSLab.