pmus
pmus личный блог
10 января 2017, 04:43

РТС Робот: скальпинговая платформа на Python

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

Вдохновила меня прекрасная программа Николая Морошкина Qscalp и захотелось иметь похожую, но с блекджеком Python внутри. С большим уклоном в автоматический скальпинг, и с меньшим — в ручной.

Я хотел писать торговые стратегии для скальпингового привода на Питоне, имея возможность творить с рыночными данными все, что угодно. Например, экспортировать тики в базу данных или скармливать их нейросетям в реальном времени. Ну и заодно проверить, действительно ли Python, как уверяли некоторые, слишком медленный для реализации подобных задач. Создавал программу в свободное время.

Итак, у нас был Transaq XML Connector, QT, Python и целое множество библиотек всех сортов и расцветок, а также Windows, Linux, wine и VirtualBox. Не то чтобы это был необходимый запас для разработки. Но если начал писать проект, становится трудно остановиться. Единственное, что вызывало у меня опасение — это pyinstaller. Нет ничего более беспомощного, безответственного и испорченного, чем ошибки при сборке. Я знал, что рано или поздно мы перейдем и на эту дрянь.

Я проверял работу программы на 10-миллисекундном Transaq HFT подключении от Финам, на обычном Transaq Connector и демо-сервере. Сейчас занимаюсь устранением мелких ошибок и построением красивого API для торговых систем. Повторюсь, я не ставил задачу создания полноценного торгового терминала — нужна была только основная платформа для создания быстрых торговых роботов.

РТС Робот: скальпинговая платформа на Python
Интерфейс программы я старался сделать разумно-минималистичным.

Реализованные «хотелки»:

  • Возможность 10-мс подключения.
  • Встроенный Python
  • Использование сколь угодно большого количества памяти системы в скриптах
  • Многопоточность и утилизация всех ядер процессора, программа изначально только x86-64
  • API для создания сколь угодно сложных систем и их связок
  • Создание по двойному щелчку «снимков» любых таблиц в формате Excel (на память)
  • Индикатор баланса стакана
  • Экономный жор памяти (получилось порядка 150 мегабайт)
  • Нормальная работа под Linux
Список «пока нереализованного», конечно, больше.

Если тема заинтересует, продолжу понемногу выкладывать материал о программе.

Демо-версия находится здесь.
16 Комментариев
  • Don Constantine
    10 января 2017, 07:09
    буду читать
  • Антон Иванов
    10 января 2017, 10:53
    Новые тарифы биржы прилично обесценивают такую хорошую работу, к сожалению…
  • Андрей К
    10 января 2017, 13:09
    труд хороший для стартового опыта.
  • БорисыЧ
    17 апреля 2017, 15:56
    Я сейчас качаю вашу программу, присмотрюсь, но идея моя вот в чем: индикаторы бы мои перенести на вашу платформу. Присмотритесь, это возможно? http://trendphil.blogspot.ru/
  • Дмитрий
    15 января 2018, 17:38
    Доброго дня!
    Хочу попробовать использовать вашу программу, для этого создал демо-счет тут: www.finam.ru/demos/choose/, скачал .zip-архив с уже собранной программой. Вношу в настройки полученные логин и пароль, получаю следующее:
    Connector: simple 64-bit mode.
    Using old 64-bit version for demo
    serverConnector: Connecting to server...
    DataParser: Connection error: Unknown connection problem: {'connected': 'error'}

    В логе нашел такие строки:
    162206.540951 [2752] [main] <info> Initializing dsp...
    162206.540951 [2752] [main] <info> Preparing for login...
    162206.540951 [2752] [main] <info> Packet size:65520
    162206.540951 [2752] [main] <info> Logging in...
    162227.599220 [2752] [main] <warning> Failed to login
    При этом через обычное приложение финам-демо с теми же учетными данными логинится без проблем.

    Пробовал ip-адрес, забитый в программе по умолчанию для демо-режима, ip-адрес, взятый из настроек подключения программы финам...

    Больше всего напрягает то, что в программе на вкладке «статус» при этом отображаются следующие запросы и ответы:
    <command id='connect'><request_timeout>5</request_timeout><host>78.41.194.46</host><session_timeout>10</session_timeout><rqdelay>100</rqdelay><autopos>True</autopos><login>ХХХХХ</login><password>1234</password><port>3950</port></command><result success=«true»/>
     
     

    То есть как будто в ответе приходит xml, что все хорошо, но соединения не происходит...

    Подскажите, пожалуйста, в какую сторону стоит копать? Очень интересен этот проект, т.к. также предпочитаю питон шарпам.

    Заранее большое спасибо!
      • Дмитрий
        18 января 2018, 19:35
        pmus, теперь пробую на обычном (не демо) аккаунте, ничего не поменялось. Сборку взял с гитхаба уже готовую.

        Также пробовал указывать другой ip-адрес (обычный и резервный), подменять dll-ки в win32\dll\finam-demo на новые. Ничего не помогает.

        В логе *_ts.log нашел такие строки:
        Start logging
        18/01/2018 19:27:36 Transaq TXmlConnector, ver.5-T59-37-5.41.2.20.13
        19:27:36.681 Connecting to 78.41.197.18:3900 buf=65512...
        19:27:36.681 WSA started up19:27:36.803  Connected.
        19:27:41.961 RQ_PWD recv #2:0 (-8recv) timeout
        19:27:41.961 RQ_PWD snd/rcv error19:27:41.961 RQ: 46SG: 1WR: B128: (длинный хеш);Z16:PRIME;Z32:User;Z80:Windows 8  (Bld 9200) ;G:61762886434779;L:20490432;L:738306240;L:0;B:0; 
        19:27:41.961 WSA cleanup succeeded
        19:27:41.961 Trade Stream Closed. Reason: 'Connect/Login failed'. S:216/2, R:138/1, E:0, Rl:0

        «Длинный хеш» из лога не привожу, т.к. не знаю что там зашито :)

        Может быть вам, как автору, этот лог скажет больше, чем мне? Пока у меня в качестве вариантов остается только глубокий реверс инжиниринг по сурцам, но на это, к сожалению пока недостаточно времени.

        И да, клиент transaq с теми же логином и паролем, конечно же, работает.
          • Дмитрий
            19 января 2018, 18:45
            pmus, да, все оказалось гораздо проще и глупее -на боевом аккаунте заработало, оказалось — мне  просто дали не те учетные данные для авторизации. С демо проблема остается, но пока на нее решил забить. Спасибо за уделенное время и извиняюсь за глупые вопросы :)
  • alexius
    17 января 2018, 22:31
    Подписка
  • Nikolay D
    09 мая 2019, 07:09

    Автор,

    пожалуйста, поделитесь программой, если предложение в силе. Исходная ссылка уже умерла. 

    • Nikolay D
      09 мая 2019, 07:34

      Нашел в другом посте.

      Спасибо.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн