<HELP> for explanation

Блог им. 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.
 

Постараюсь посмотреть на досуге. Это очень достойное решение опубликовать такую работу как Free Software. Respect, кто бы что ни говорил.
avatar

Displacer

Displacer, смысла скрывать не вижу. Так хоть попонтуюсь немножечко :)
professor facepalm, вот прежде чем выкладывать и искать работу стоило бы хотя бы сайт этот по ссыле тестировщикам отдать на тестирование… нифига не открывается… картинки точно не открываются
avatar

Pobeditel

Pobeditel, какой сайт? Гитхаб? Ха-ха-ха) Этот «сайт» на IPO заработал 2 миллиарда долларов на NASDAQ)
avatar

stitrace

stitrace, вот сейчас открывается и что? да он криво открывался в хроме… какая на… н разница сколько он заработал если он не открывался? м?) 
avatar

Pobeditel

+1, с критики гитХаба угарел=)
avatar

wallarion

Посмотрел код. Весьма качественно написано, на первый взгляд. Только доки нет никакой, жаль. Сколько по времени примерно занимает «прогон» суточного лога от запуска до вывода результатов?
avatar

stitrace

stitrace, от мощности компьютера зависит. На ноутбуке с intel'ом две с половиной минуты, на настольном amd — четыре минуты.
 ищу работу по разработке на С++

Вроде как программеры от безработицы не страдают ни где. Вопрос оплаты труда только. 
обязательно в сфере биржевой торговли работать хотите?
  обязательно удаленно?
на какую  з/п рассчитываете?
avatar

SuperMegaTrader

SuperPuperMegaTrader, извините, у вас есть какое-то предложение? Или вы из любопытства интересуетесь? Если первое, то со мной можно связаться либо по личке здесь, либо по мылу: bytefury@yandex.ru. Если второе — предпочту никак не комментировать и не отвечать на вопросы.
professor facepalm,  из любопытства? Жизнью «звезды» программирования  интересуюсь ибо фанат.=) 
Публично выведываю сокровенные тайны у обезличенного персонажа . 
Уже очевидно что ни в какой команде  не уживетесь.
Только фриланс за еду. 
// удачи

 
avatar

SuperMegaTrader

Респект, коллега! Это правильно )
avatar

Zweroboi

Код простенький, но чистенький! ) Даж asio все дела ) Ну всё теперь только резюме заслать! )
avatar

Zweroboi

Zweroboi, ну работа, связанная с С++, — дело такое. Это либо старый legacy и стандарт C++03, либо в требованиях нужен многолетний опыт разработки на плюсах. Первое не устраивает. Второе — не мой случай. Так что шансов тут не так уж и много.
professor facepalm, ну а кому сейчас легко? ) А сейчас кем работаешь, если не секрет?
avatar

Zweroboi

Zweroboi, извини, но секрет )
professor facepalm, да без проблем )
avatar

Zweroboi

Круто, спасибо! А зачем искусственное ограничение по времени? Я понимаю, память жалко, но так обрезать это слишком упрощенно
avatar

ПBМ

ПBМ, что за ограничение? Не понял.
professor facepalm, ну, 5 секунд в стратегии
avatar

ПBМ

ПBМ, а, понял. Ну тут дело не в памяти. Это часть стратегии. Т.е. это такой индикатор, который следит, чтобы за 5 секунд набралось 200 контрактов (и так 3 раза подряд). Типа всплеск активности.
professor facepalm, ясно, идея хорошая.
сегодня в Si за минуту кто-то 50 тыс контрактов купил.
вот это был всплеск активности...
на самом дне по 76400
avatar

ПBМ

ПBМ, гражданин, покупающий разом 50 тыс контрактов, отзовись! Напишу робота, который размажет все эти покупки по времени так, что тебя никто и не заметит. Плюс исполнишь их по лучшей цене с помощью лимитников, а не маркет-ордеров! :)
professor facepalm, меня научи по дружбе. я как раз к подобной задаче подошел. надоело одним скользящим лимитником исполняться.
хотя б литературу присоветуй в метро почитать
avatar

ПBМ

ПBМ, так такую штуку, наверное, и в квике можно без проблем запрограммировать. Если умеешь программировать на qlua, то вряд ли какая-то дополнительная литература нужна.
professor facepalm, программировать не проблема вообще. мне принцип хочется понять. желательно с объяснением. мб я просто не брался, а там ничего сложного.
но понимаю, что точно надо следить за потоком всех сделок, чтобы попадать в ритм… просто сам поток сделок ещё не анализировал в квике, начал сверху. часовые свечи, пятиминутные, минутные, теперь к тикам приглядываюсь.
avatar

ПBМ

ПBМ, поток сделок тут не нужен. Надо получить стакан, из которого затем определить цену лимитника. Отправить лимитник. Дождаться совершения сделки или отменить заявку, если она не могла долгое время исполниться. Заново проделать эти шаги. И так пока не будет совершено нужное число сделок.
professor facepalm, ясно. пока делаю всё до слов «или отменить заявку». а в чём незаметность? в грамотном разбиении? и как разбить?
avatar

ПBМ

ПBМ, «а в чём незаметность?»

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

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

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

ПBМ

А через что оно подключается к рынку?

Может, вы и сами qsh файлы выложите?
avatar

mmm

mmm, оно не подключается к рынку, оно его эмулирует по ордерлогу.
avatar

stitrace

mmm, к рынку на данный момент нет подключений. Там нужно писать коннектор и немного отрефакторить существующий код.
qsh-файлы находятся тут: ftp://athistory.zerich.com/
professor facepalm, спасибо!
avatar

mmm

mmm, Цериху спасибо!
professor facepalm, а есть какая-нибудь библиотека для работы с этим qsh, или вам пришлось самостоятельно писать?
avatar

mmm

mmm, есть эталлоный набор классов от Морошкина на сайте qscalp'а. Я только портировал на С++ её некоторую часть, достаточную только для чтения ордерлога.
И как долго эти бустовские корутины компилируются? Я лучше следующего стандарта подожду, там вроде обещали добавить.
Вообще что-то такое хочу сделать под квик, но там увы нет ордерлога.
Кто-нибудь знает как можно эффективно хранить снимки стаканов?
avatar

Анзорик

Анзорик, храни только первый снимок стакана, а остальная инфа только изменения его.
avatar

stitrace

Анзорик, в памяти
Анзорик, С++ сам по себе долго компилируется. Дело тут не в корутинах.
ооо даже несколько тестов есть! если честно стратегия выглядит как лапшакод, слишком много нужно написать левого кода. какой перформанс например RI сутки по логу при реакции на каждый коммит с условием что лог загрузить в память?
avatar

Александр

Александр, вот добавил бы он пару сотен переменных, все сразу бы встало на места!:)
avatar

Adept

Александр, «стратегия выглядит как лапшакод»

show me your code

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

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

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

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

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

успехов!

Александр, на полном ордерлоге? Ну да, заливай дальше )
professor facepalm, вот кстати чем плох С++ — он фигово профилируется. или я чего-то уже забыл.
в java косяки перформанса можно за пару прогонов вылечить.
avatar

ПBМ

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

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

я так понимаю, с полным ордерлогом вы не работали. Поэтому ваше непонимание вполне объяснимо.
professor facepalm, ок
кстати у чувака с 3000 кубиками насколько я помню один параметр только в системе
avatar

nbvehrfr

nbvehrfr, интересно что остальные 2999 кубиков делают
avatar

Mr. Bean

Хинт: если в теле ифа стоит ретурн, то элс после него не нужен. )
avatar

Zweroboi

Zweroboi, знаю. Но если ретурн в процессе рефакторинга придется убирать, то надо будет элс добавлять. А это можно случайно забыть сделать. Да и чисто визуально сразу понятно, что у ифа есть альтернативная ветка.
подскажите пожалуйста для нубов как собрать проект? я так понимаю Qt creator нужен и gcc??
avatar

expert

спасибо вам за ваш труд, жаль что вы нигде не указали про платформозависимость вашего проекта. под виндой не собирается. используются linux'овый тип u_int8_t, gcc'шный noexcept. Не переносимое решение…
avatar

expert

expert, сорри за поздний ответ. Разрабатывался под qt creator на убунте. Для сборки на винде скорее всего нужен будет mingw. Но там ещё boost нужен будет. Разработка под винду — это боль. На линуксе всё в разы проще делается.
спасибо) да Qt creator и винда это боль, особенно в сочетании с msvc. Русские символы в путях не понимает, в консоли сборки выводит кракозябры. Хоть и удалось победить проблемы с кодировками, буду ставить убунту. жаль конечно что последняя убунту не встает на VirtualBox, придется туда винду перемещать))
avatar

expert


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW