pmus

Выложил исходники торгового терминала RTS-Robot в открытый доступ.

    • 06 января 2018, 05:07
    • |
    • pmus
  • Еще

Выложил исходники торгового терминала RTS-Robot в открытый доступ.

Итак, как я и обещал, исходники торгового терминала RTS-Robot версии 1.0 выложены на GitHub!

Напоминаю, что язык программирования — Python 2.7, брокер — Финам, коннектор — Transaq XML Connector. (в том числе и Transaq HFT)

Что умеет:


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


Выложенное решение имеет некоторые ограничения, а именно:

— Упрощенный код, многое из «планов на будущее» отключено и/или убрано.
— Торговые алгоритмы работают только с одной бумагой. (несложно доделывается.)
— Коннектор только один
— Бесплатной поддержки нет и не будет (мне работать надо!)
— Короткий документ о том, «как это всё собрать и заставить работать» если напишу, то позже
— Сайт проекта обновлю позже, сейчас нет времени заниматься.

В остальном же — это работающий торговый терминал, запускаемый как под Windows, так и под Wine.

Будьте осторожны. Нужны специальные знания и навыки профессионального программиста.

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


Отказ от ответственности за использование Вами бесплатных продуктов

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

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

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


Ссылка на репозиторий GitHub. (исходники).

Уже собранная версия  (zip-архив).

Поздравляю всех православных с Рождеством.

★39
69 комментариев
Правильно сделал что выложил предупреждение. Я как пользователь и тестировщик всех подобных ноу-хау отмечу что это очень важно особенно если учесть что робот может лечь из-за обновлений (допустим) 
avatar
Автору у меня был опыт работы с роботом BigTrend для российской биржи. У него было два 2 режима автоматической торговли, которые к сожалению, сейчас не помню. Его главная проблема в том, что он только для РФ, на рынках которых много непрозрачного. Но конечно скальпинг как у тебя это неплохая защита от всяких неприятностей. Спасибо за ссылку. 
avatar
Дом Металла, чем робот нюхает ордерный стакан?
если вся торговля через браузер интернета?
avatar
Ramon Albert Rudolfovich, я хз) с Рождеством) 
avatar
Дом Металла, загуглил. Bigtrend — это торговый алгоритм для MT5.

Здесь совсем другое, это как если бы я выложил исходные коды самого MT5.
avatar
pmus, хорошо) все равно спасибо. 
avatar
Также спасибо что выложил полностью. Так как если у вашего робота библиотеки не хватает с каким-нибудь индикатором или код не валидный он не будет работать. Я видел роботов которые можно было оптимизировать полночи, а он в итоге сделки просто не открывал. Это настолько бесило что готов был клавиатуру выкинуть. Некоторые горе создатели не создавали на UTF-8. Потому я вам советую брать телеграммных ботов так как: а) точно видно, что он работает так как он валит в рамках одной экосистемы б) можно забыть про баги. Вы не представляете, как это круто. Сам пользуюсь телеграммным советником @my_investing_bot (всем советую)
avatar
 Короче неистово плюсую и иду спать.
avatar
А нет чего-то подобного на С++?
Евгений Гуревич, сложнее писать чем на Питоне или на TSLab (но то только мое предположение) 
avatar
Евгений Гуревич, что вы хотите реализовать на с++? вроде как автор пишет что работает и так ))
avatar
Евгений Гуревич, на C# есть Stock#.

avatar
а нафига?
avatar
Stoic, он же написал. Ничего не заработал, ушёл на работу устраиваться, робот без надобности. Наверное нам такой робот сильно пригодится.
avatar
pmus, давно хочу написать своего бота под Tranzaq HFT, библиотека от финама написана на си шарпе.

Как вы считаете, на Питоне реально такое написать (так как изучения си шарпа идет туго, а порог входа в Питон пониже)? Есть же какие-то клоны питона под .net (в инете правда пишут что неподдерживаемые много лет) 
avatar
Alpinist573, я не пмус но тебе сразу говорю что если что-то не подерживается значит робот ляжет в один прекрасный момент 
avatar
Alpinist573, реально. Я именно это и сделал. Выложенный код работает с Transaq HFT, для этого и создавался. Клон Питона под .net называется IronPython, но вам он не нужен.
avatar
этот робот в один прекрасный момент перельет ваш депо на другой.
И автор чист, по скольку вы согласились с его условиями не за что не отвечать и использовать на свое усмотрение. Автор браво.
Очень нужный продукт кстати, но подход бы изменить.
avatar
Борис Литвинов, код открытый же. Готовых торговых стратегий я не прилагаю, только серия постов о ком, как их написать. Куда и какой депозит он может слить?
avatar
pmus, ну тогда круто
avatar
по идее для Linux нужно написать враппер библиотеки Finam и скомпилировать его в winelib, тогда можно код терминала подправить под Linux и запускать все это используя прокладку только для враппера
avatar
Константин, 
по идее для Linux нужно написать враппер библиотеки Finam и скомпилировать его в winelib, тогда можно код терминала подправить под Linux и запускать все это используя прокладку только для враппера
я это в качестве эксперимента пускал тестово на .Net Core
avatar
Автор, коллега, мне вот интересно… по поводу отказа от ответственности… ведь питон, робот, винда, интернет — всё будет глючить. И люди будут сливать. Да даже если и ничего глючить не будут — все равно большая часть сольет... 
И виноватым окажется автор, поскольку раз роботов пишет, значит умный, а раз мы еще и слили, то «он наверняка всё так с самого начала и задумал и за нас счет там как-о обогатился»… а предупреждений я никаких не видывал.

Как относитесь к возможности подобного развития событий?
Бабёр-Енот, любой нормальный человек пошлет в пеший эротический тур с такой предъявой и будет прав ))
avatar
Константин, это да… меня, однако, больше волнует правовая сторона вопроса… хотя вроде прецендентов не было (или мне неизвестны)
Бабёр-Енот, ))) если ПО выложено с открытым исходным кодом, то есть вариант его изучить и потом запускать, тот же QUIK все запускают не стесняясь при этом сливают немало трейдеров, а исходный код там закрытый ))
avatar
Бабёр-Енот, у меня все прекрасно работает в облаке MS Azure и не глючит. Исходный код компилируется в *.exe файл и запускается как любая другая программа.
avatar
Ого… я сразу то не врубился, а тут у автора еще и Гуй на питоне… респект.
тут действительно надо разбираться и чето ставить, чтоб это запустить))
Бабёр-Енот, на питоне, с гуём и свечки рисует??
старый трейдер, судя по описанию на гитхабе, там походу как-то к проекту Qt прикрутили… в нем видать и рисуют
Бабёр-Енот, а-а, понятно.
старый трейдер, именно так. На Питоне, с гуём, свечки рисует, все как на этой картинке. 

avatar
Бабёр-Енот, GUI там на PyQt, это не совсем Python а лишь обертка над Qt ))
avatar
Константин, всё верно. PyQt это официальная библиотека для работы с Qt в Python. Моя следующая программа, кстати, работает даже не с Qt, а с PySide.
avatar
Ув. Автор, а вы там пару роботов каких-нить не приложите к проекту? чтоб показать как там с апи вашим общаться
Бабёр-Енот, API придется самим вычислять, код пока не смотрел, но вижу там кучу .dll, а значит придется по сигнатурам функции изучать ))
avatar
Константин, нет. Куча dll — это финамовские коннекторы разных версий (демо, боевой и боевой HFT, каждая под x32 и x64 — итого шесть.)

А то, что ищет Бабёр-Енот, содержится в stock.py и api.py
avatar
Бабёр-Енот, я в своем блоге несколько постов написал об этом.
avatar
pmus, нашел только схему построения терминала, но не нашел описание API, скинь, что бы не шариться по коду и смотреть что реализовано, а что нет по схеме и заодно описание API если есть

ps. хочу посмотреть код в целом и возможность реализовать враппер для коннектора win <=> *nix

кстати вопрос, почему не писал gui на C++ Qt, ведь так проще было бы, даже есть библиотеки реализующие чарты
avatar
Константин, для меня дружить GUI на C++ Qt  с основной программой было бы совсем не проще. Не увидел никаокого смысла, тем более что это вызвало бы огромные трудности при компиляции. Код и так транслируется в C++ при помощи Nuitka.
avatar
pmus, c Nuitk не работал ни разу, это компилятор Python?
avatar
Константин, http://nuitka.net Транслирует в C++, далее компилирует в исполняемый файл.
Также можно использовать и PyInstaller, скорость по факту не отличается.
avatar
pmus, кстати не могу понять, что за артефакты в коде:

def numeric_time(self):
   t = (datetime.datetime.now().strftime("%H%M%S"))
   d = (datetime.datetime.now().strftime("%d%m%Y"))
   return int(t)

def numeric_date(self):
   t = (datetime.datetime.now().strftime("%H%M%S"))
   d = (datetime.datetime.now().strftime("%d%m%Y"))
   return int(d)

это класс API, и подобное встречается не только тут
avatar
Константин, https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
avatar

pmus, наверное не корректно задал вопрос ))

зачем в методе numeric_time инициализировать переменную d, значением, если мы эту переменную в методе не используем, то же касается метода numeric_date где инициализируем переменную t значением, но не используем ее

avatar
Константин, видимо просто забыл удалить. 
avatar
pmus, 
видимо просто забыл удалить.
чтобы такого не было, принято прогонять статическим анализатором проект и зачищать все warning
avatar
Андрей К, ну прогони)
Бабёр-Енот, 
pmus пошел на повышение в своей карьере, я лишь поддержал советом, чтобы его проекты стали еще качественней 
avatar
Андрей К, спасибо за совет! Корпоративное программирование и собственные проекты, действительно, очень сильно отличаются по методологии процесса разработки.
avatar
Андрей К, просто делаешь бывает какую-нить вещь, переменные для нее завел, проинициализировал… но не доделал, занялся чем-то другим… А потом садишься доделывать, а там херак — оказывается что сидящий рядом перфекционист всё это уже давно похерил, потому что оно мол ничего не делало, только ворнинги генерило о неиспользуемых переменных и кусках кода…
Бабёр-Енот, попросить перфекциониста использовать git fork / git merge…
avatar
Бабёр-Енот, 
 А потом садишься доделывать, а там херак — оказывается что сидящий рядом перфекционист всё это уже давно похерил
это конечно вопрос правильной организации коллективной разработки. Начиная от банальных комментариев и до системы контроля версий
потому что оно мол ничего не делало, только ворнинги генерило о неиспользуемых переменных и кусках кода…
конечно при современных компиляторах оно действительно ничего не делало, компилятор за вами подчистит и затрет эти инструкции. Ну а вообще, чем ниже программируешь тем больше нужно прогонять код на эти вещи. И стараться делать качественно изначально. Лишняя память, лишний кеш, лишний кеш инструкций и тд. — все это стабильности не придает, особенно когда бьешься за стабильность производительности
avatar
Андрей К, чтобы качественно делать изначально, нужно изначально ТЗ. А в большинстве случаев на практике разработка сводится к непрерывному прототипированию с показом начальству, получению устной обратной связи и т.д.

Ну, если вы конечно какое-нить медицинское или авиационное ПО не пишете…
где сылка на скач и работает эта хрень на браузере криптобирж?
avatar
Ramon Albert Rudolfovich, читайте внимательно весь пост до конца и увидите ссылку. Под ваши задачи это решение 100% не подойдет и не предназначено: это не для крипто, не для валют, не для браузера.
avatar
Исходный код компилируется в *.exe файл и запускается как любая другая программа.

Есть возможность прикрутить функции из .dll, написанных на других ЯП?
Евгений Гуревич, если напишете — то да, конечно. В datasource.py именно так вызывается dll коннектора, распространяемая Финамом только в виде dll.
avatar
Евгений Гуревич, еще можно например, без проблем прикрутить Alglib, очень хорошая библиотечка.
avatar
Здравствуйте! 
А время раздачи исходников, чудо робота, закончилась? :)
Находил в кеше гугла GitHub репозиторию от 28 октября. 

Интересует три момента. 
1. Как вы сделали обёртку .dll библиотеки от Финама?
2. После трансляции кода спомощью http://nuitka.net скорость выполнения, память, загруженность процесса ниже?
3. Почему вы будете использовать pyside? Ведь они то не особо отличаются от pyqt? 

Тимофей Чулков, этот проект — «проба пера», написан в 2016 году. Естественно, сейчас я пишу код намного лучше, но пойди объясни это людям. Мне надоело выслушивать критические замечания, и недавно я удалил публичный репозиторий.

1. Могу выслать вам код, и сами увидите.

        proto_callback = WINFUNCTYPE(c_bool, POINTER(c_byte))
        self.callback = proto_callback(self.rx2)
        _res = self.txml.SetCallback(self.callback)

2. Что Nuitka, что PyInstaller — как ни странно, никаких преимуществ у Nuitka я не увидел.
3. Разная лицензия и больше доверия испытываю к pyqt.


 

avatar
pmus, Буду вам признателен :) 
 
Спасибо ;)
Тимофей Чулков, ссылка в личке.
avatar
pmus, присоединяюсь к запросу. Могу получить ссылку? Буду признателен и благодарен.
Не обращайте внимания на критику :)
avatar
shprots, пардон, не сразу заметил. Вот, пожалуйста: https://yadi.sk/d/prd6B-Mie3RpjA
avatar
pmus, Премного Вам благодарен! )
avatar
pmus, спасибо за эту статью. 
avatar
Добрый день, pmus! Случайно обнаружил вашу публикацию о выложенном на github исходном коде торгового терминала на python. Захотелось посмотреть на вариант реализации, но не тут-то было, репозитария больше нет. Если не затруднит отправьте мне, пожалуйста, ссылку на ваше проект. Знакомлюсь с алготрейдингом и хочу понять как реализуют подобный программный продукт. Заранее спасибо.

Валерий

avatar
ValerySemjonov, https://disk.yandex.ru/d/pLRKjIpxV1iwtA
avatar

теги блога pmus

....все тэги



UPDONW
Новый дизайн