Блог им. facepalm

Открыл библиотеку для бектестинга

По мотивам: smart-lab.ru/blog/300948.php

Ссылка:
github.com/bytefury/trading_robot_2

Выкладываю скорее для себя. Вряд ли кто-то будет разбираться в ней и тем более пользоваться.

Пример стратегии: github.com/bytefury/trading_robot_2/blob/master/strategies/common/mo_watcher_strategy.hpp

Что она делает: отправляет заявку, если было три серии совершения сделок на 200 и более контрактов. Серия сделок должна произойти не более, чем за 5 секунд. И промежуток между сериями должен быть не более, чем 5 секунд. Инчае стратегия прерывается и всё начинается заново.

И никаких вам 200 перменных и 3000 кубов на tslab'е! :)

Это если в кратце. Там ещё много чего есть. Например, автоматическое перемещение заявки, если между ней и лучше сделкой того же направления накопилось больше 50 заявок. Есть и другое.

Возможно кому-то пригодятся классы на С++ для работы с файлами qsh-формата. Это портирования с C# версия классов Морошкина.

ЗЫ: ищу работу по разработке на С++. Если есть интересные предложения, то в профиле на гитхабе есть email.
★40
61 комментарий
Постараюсь посмотреть на досуге. Это очень достойное решение опубликовать такую работу как Free Software. Respect, кто бы что ни говорил.
avatar
Displacer, смысла скрывать не вижу. Так хоть попонтуюсь немножечко :)
avatar
professor facepalm, вот прежде чем выкладывать и искать работу стоило бы хотя бы сайт этот по ссыле тестировщикам отдать на тестирование… нифига не открывается… картинки точно не открываются
avatar
Pobeditel, какой сайт? Гитхаб? Ха-ха-ха) Этот «сайт» на IPO заработал 2 миллиарда долларов на NASDAQ)
avatar
stitrace, вот сейчас открывается и что? да он криво открывался в хроме… какая на… н разница сколько он заработал если он не открывался? м?) 
avatar
+1, с критики гитХаба угарел=)
avatar
Посмотрел код. Весьма качественно написано, на первый взгляд. Только доки нет никакой, жаль. Сколько по времени примерно занимает «прогон» суточного лога от запуска до вывода результатов?
avatar
stitrace, от мощности компьютера зависит. На ноутбуке с intel'ом две с половиной минуты, на настольном amd — четыре минуты.
avatar
 ищу работу по разработке на С++

Вроде как программеры от безработицы не страдают ни где. Вопрос оплаты труда только. 
обязательно в сфере биржевой торговли работать хотите?
  обязательно удаленно?
на какую  з/п рассчитываете?
avatar
SuperPuperMegaTrader, извините, у вас есть какое-то предложение? Или вы из любопытства интересуетесь? Если первое, то со мной можно связаться либо по личке здесь, либо по мылу: [email protected]. Если второе — предпочту никак не комментировать и не отвечать на вопросы.
avatar
professor facepalm,  из любопытства? Жизнью «звезды» программирования  интересуюсь ибо фанат.=) 
Публично выведываю сокровенные тайны у обезличенного персонажа . 
Уже очевидно что ни в какой команде  не уживетесь.
Только фриланс за еду. 
// удачи

 
avatar
Респект, коллега! Это правильно )
Код простенький, но чистенький! ) Даж asio все дела ) Ну всё теперь только резюме заслать! )
Zweroboi, ну работа, связанная с С++, — дело такое. Это либо старый legacy и стандарт C++03, либо в требованиях нужен многолетний опыт разработки на плюсах. Первое не устраивает. Второе — не мой случай. Так что шансов тут не так уж и много.
avatar
professor facepalm, ну а кому сейчас легко? ) А сейчас кем работаешь, если не секрет?
Zweroboi, извини, но секрет )
avatar
professor facepalm, да без проблем )
Круто, спасибо! А зачем искусственное ограничение по времени? Я понимаю, память жалко, но так обрезать это слишком упрощенно
avatar
ПBМ, что за ограничение? Не понял.
avatar
professor facepalm, ну, 5 секунд в стратегии
avatar
ПBМ, а, понял. Ну тут дело не в памяти. Это часть стратегии. Т.е. это такой индикатор, который следит, чтобы за 5 секунд набралось 200 контрактов (и так 3 раза подряд). Типа всплеск активности.
avatar
professor facepalm, ясно, идея хорошая.
сегодня в Si за минуту кто-то 50 тыс контрактов купил.
вот это был всплеск активности...
на самом дне по 76400
avatar
ПBМ, гражданин, покупающий разом 50 тыс контрактов, отзовись! Напишу робота, который размажет все эти покупки по времени так, что тебя никто и не заметит. Плюс исполнишь их по лучшей цене с помощью лимитников, а не маркет-ордеров! :)
avatar
professor facepalm, меня научи по дружбе. я как раз к подобной задаче подошел. надоело одним скользящим лимитником исполняться.
хотя б литературу присоветуй в метро почитать
avatar
ПBМ, так такую штуку, наверное, и в квике можно без проблем запрограммировать. Если умеешь программировать на qlua, то вряд ли какая-то дополнительная литература нужна.
avatar
professor facepalm, программировать не проблема вообще. мне принцип хочется понять. желательно с объяснением. мб я просто не брался, а там ничего сложного.
но понимаю, что точно надо следить за потоком всех сделок, чтобы попадать в ритм… просто сам поток сделок ещё не анализировал в квике, начал сверху. часовые свечи, пятиминутные, минутные, теперь к тикам приглядываюсь.
avatar
ПBМ, поток сделок тут не нужен. Надо получить стакан, из которого затем определить цену лимитника. Отправить лимитник. Дождаться совершения сделки или отменить заявку, если она не могла долгое время исполниться. Заново проделать эти шаги. И так пока не будет совершено нужное число сделок.
avatar
professor facepalm, ясно. пока делаю всё до слов «или отменить заявку». а в чём незаметность? в грамотном разбиении? и как разбить?
avatar
ПBМ, «а в чём незаметность?»

В том, что никто не сможет определить, что большое количество контрактов купил один участник. С другой стороны, возможно, смысл это имеет, только если объем сделки действительно очень большой.

«и как разбить?»

От объема зависит. Можно равномерно распределить по одному дню. Можно сделать так, чтобы в начале дня и в конце частота отправки заявок была больше, чем в середине дня. А можно сразу отправлять новую заявку по исполнению предыдущей.
avatar
professor facepalm, он кстати вчера снова заходил в 16:38.
даже на утреннем падении до его входа 70 коп не достало.
а 700 * 50 000 = 35 млн. профита
вот это, блин, торговля.
avatar
А через что оно подключается к рынку?

Может, вы и сами qsh файлы выложите?
avatar
mmm, оно не подключается к рынку, оно его эмулирует по ордерлогу.
avatar
mmm, к рынку на данный момент нет подключений. Там нужно писать коннектор и немного отрефакторить существующий код.
qsh-файлы находятся тут: ftp://athistory.zerich.com/
avatar
professor facepalm, спасибо!
avatar
mmm, Цериху спасибо!
avatar
professor facepalm, а есть какая-нибудь библиотека для работы с этим qsh, или вам пришлось самостоятельно писать?
avatar
mmm, есть эталлоный набор классов от Морошкина на сайте qscalp'а. Я только портировал на С++ её некоторую часть, достаточную только для чтения ордерлога.
avatar
И как долго эти бустовские корутины компилируются? Я лучше следующего стандарта подожду, там вроде обещали добавить.
Вообще что-то такое хочу сделать под квик, но там увы нет ордерлога.
Кто-нибудь знает как можно эффективно хранить снимки стаканов?
avatar
Анзорик, храни только первый снимок стакана, а остальная инфа только изменения его.
avatar
Анзорик, в памяти
Анзорик, С++ сам по себе долго компилируется. Дело тут не в корутинах.
avatar
ооо даже несколько тестов есть! если честно стратегия выглядит как лапшакод, слишком много нужно написать левого кода. какой перформанс например RI сутки по логу при реакции на каждый коммит с условием что лог загрузить в память?
Александр, вот добавил бы он пару сотен переменных, все сразу бы встало на места!:)
avatar
Александр, «стратегия выглядит как лапшакод»

show me your code

«слишком много нужно написать левого кода»

Где там левый код? Там одна работа с заявками. Даже контроль, когда это стратегия (ведь биржа не непрерывно круглосуточно работает) торгуется находится выше по уровню. И завершение трейда (в случае если вторая заявка не исполняется по каким-либо причинам) там делается в одну строчку spawner.spawn(SimpleClosing3(ios(), market(), m_isin_id)) Где SimpleClosing3 название закрывающей стратегии.

А последний ваш вопрос я не понял.
avatar
professor facepalm, мой код это секретные разработки.

сколько времени нужно вашему тестеру чтобы прогнать дневной лог по RI, если данные из лога предварительно загружены в память.
Александр, я про время уже выше отвечал. Там данные и так в память предварительно загружаются.
avatar
professor facepalm, тогда это супер результат 2 минуты на день. я на питоне пару лет назад писал за 40 сек работало. текущая реализация на с++ за 14 сек в среднем. 13 месяцев по RI 

start 14:23:19.295917
end 15:53:59.027683

успехов!

Александр, на полном ордерлоге? Ну да, заливай дальше )
avatar
professor facepalm, вот кстати чем плох С++ — он фигово профилируется. или я чего-то уже забыл.
в java косяки перформанса можно за пару прогонов вылечить.
avatar
ПBМ, для С++ есть valgrind. Самый раздражительный косяк С++, имхо, — это неприлично большое время компиляции )
avatar
professor facepalm, я думаю у ребят на Delphi еще быстрее. результат ограничен только скоростью диска. не представляю что можно делать 2 минуты с файлом. еще забыл добавить что тестируется сразу 10-20 стратегий.
Александр, там всё уже в памяти — диск никак на скорость не влияет.

«не представляю что можно делать 2 минуты с файлом»

я так понимаю, с полным ордерлогом вы не работали. Поэтому ваше непонимание вполне объяснимо.
avatar
professor facepalm, ок
кстати у чувака с 3000 кубиками насколько я помню один параметр только в системе
avatar
nbvehrfr, интересно что остальные 2999 кубиков делают
avatar
Хинт: если в теле ифа стоит ретурн, то элс после него не нужен. )
Zweroboi, знаю. Но если ретурн в процессе рефакторинга придется убирать, то надо будет элс добавлять. А это можно случайно забыть сделать. Да и чисто визуально сразу понятно, что у ифа есть альтернативная ветка.
avatar
подскажите пожалуйста для нубов как собрать проект? я так понимаю Qt creator нужен и gcc??
avatar
спасибо вам за ваш труд, жаль что вы нигде не указали про платформозависимость вашего проекта. под виндой не собирается. используются linux'овый тип u_int8_t, gcc'шный noexcept. Не переносимое решение…
avatar
expert, сорри за поздний ответ. Разрабатывался под qt creator на убунте. Для сборки на винде скорее всего нужен будет mingw. Но там ещё boost нужен будет. Разработка под винду — это боль. На линуксе всё в разы проще делается.
avatar
спасибо) да Qt creator и винда это боль, особенно в сочетании с msvc. Русские символы в путях не понимает, в консоли сборки выводит кракозябры. Хоть и удалось победить проблемы с кодировками, буду ставить убунту. жаль конечно что последняя убунту не встает на VirtualBox, придется туда винду перемещать))
avatar

теги блога professor facepalm

....все тэги



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