Написал бектестер на С++ для тестирования скальперских стратегий, с перспективой дописания его до рабочего робота. Вот только прибыльную стратегию родить так и не смог. Теперь вот не знаю, как поиметь какой-нибудь профит с разработки. Возможно заинтересованная общественность что-нибудь предложит.
Тут хочется сделать некоторое отступление и написать немножечко о С++. Здесь на сайте частенько попадаются сообщения в стиле «хочешь быстрого робота, пиши на плюсах!». Понятно что большинство здешних «программистов», советующих или критикующих С++, дальше lua (в лучшем случае C#) ничего не трогало, поэтому помимо высокой скорости работы программ, написанных на С++, единственное, что ещё упоминается, так это то, что писать программы на этом С++ безумно сложно. Отчасти это так, однако современный С++ (11-й и 14-й стандарты) — это (простите за тавтологию) современный язык программирования, который в выразтиельности программ может вполне потягаться с тем же С#.
Вобщем что может мой бектестер сейчас:
— работать с файлами qsh-формата (бектестинг на полном ордерлоге от Цериха)
— использовать сразу несколько источников данных (например, торгуя Ri смотерть за текущим Si)
— поддержка индикаторов (например, есть индикактор рабочего времени биржи, и чтобы торговать сразу на америке достаточно просто создать новый индиктор с подходящими значениями рабочих временных интервалов)
— самое лучшее: поддержка асинхронности в виде корутин.
О последнем чуть подробнее. Тут не так давно читал сообщение, где некто понтовался, что у него у робта чуть ли не 800 переменных. Типа смотрите, как круто! Так вот это совсем не круто. Держать в голове все эти переменные нереально. И алгоритм торговли в подобном случае работает скорее всего не так, как вы предполоагаете.
Так вот эти 800 переменных скорее всего являются лишь следствием убогой архитектуры робота, которая построена на базе т.н. конечного автомата. Код в данном случае быстро раздувается и превращается в неподдерживаемую лапшу. А что же дают корутины? А дают они следующее. Допустим, есть операция отправки заявки на биржу. Данная операция в торговых платформах или api реализована обычно двумя способами:
1) при вызове функция сразу завершается, а результат работы (поставлена ли заявка или отклонена) получается с помощью функции обратного вызова (callback). 800 перемменных проистекают обычно, когда подобный подход используются для всех асинхронных функций. Плюсы данного подохода: тестируемость робота (робота, реализованного на callback'ах можно отправлять в бектестер). Минусы: говнокод.
2) функция синхронная, и она подвешивает поток, пока не получит результат. Плюсы данного подхода: код получается линейным и простым. Минусы: таких роботов не протестирвать.
Использование корутин позволяет взять плюсы от обоих подходов: код линейный и на бектстере он тестируется.
Например, чтобы отправить завку на сервер и дождаться её исполнения, в моём роботе достаточно подряд вызвать две функции async_send_order и async_wait_deal. Роботов подобным образом писать легко и приятно.
Вобщем повторюсь ещё раз: написал бектестер, а рабочих стратегий нет. Что с этим барахлом можно сделать? Есть идеи?
ЗЫ вниматлельный читатель спросит: в чём же успех, упоминемый взаголовке? А успех в том, что биржа от меня ни рубля не получила, и я не слил никаких денег. А всего-то надо было написать сначала бектсетер.
Таких бэктестеров тьма тьмущая.
Передергиваете
Чтобы научить робота водить машину нужно самому уметь или нанимать спецов.
А так на что вы рассчитывали — что робот вас научит торговать?
По поводу 800 переменных — вы сходите на russian cup AI game- там пишут роботов для соревнований в примитивные игры- и поймете что ваш тестер это 1 процент от того что необходимо для работы.
Ну у меня было несколько идей, как я думал, «прибыльных роботов». Оказалось, что это не так.
«вы сходите на russian cup AI game»
Там куча кода нужна для выполнения множества различных задач. В алготрейдинге же — потому что не знают, как можно написать программу, выполняющую те же действия, но чтобы она (программа) была в разы короче.
П.с. личный опыт
а так никто вам не даст готовый грааль) Ну по крайней мере я точно не дам)
ну и стиль все дураки, а я д'артаньян сразу подкупает ))
можно вопрос для разрыва шаблона? а зачем вы его писали, если стратегий нет?
2) тяжелый и дорогостоящий путь. начать изучать анализ рынка и начать торговать руками(не важно как в + или в -)главное начать, что бы набрался опыт и Вы родили стратегию. Потому что самый мощный инструмент это ваша нейронная сеть, ваш мозг. Но без дальнейшего анализа рынка, каким либо способом, стратегию не напишите. Но анализ в ручную, самый тяжелый и дорогой но самый верный и в итоге приведет к хорошему результату.
Плюс не понятно, как работает их бектестер.
Плюс не люблю Виндоус.
Тем более это была не инфраструктура, а просто бектестер. Инфраструктурой это было бы, если бы я начал сразу писать коннектор для плазы.
зачем писать тестер, если не знаешь какого типа стратегии на нем будешь тестировать? HFT, позиционные, арбитраж. может вокруг посмотреть и куча тестеров кругом? нет ?
но вообще, что-то сделать самому — это уже поступок !
еще очень важный практический момент, если все протестил и ок, то, наверное стратегию на реал. С экзекьушеном как?
было представление о прибыльных стратегиях, которое развеялось после их тестирования.
«С экзекьушеном как?»
вопрос не понял.
«Другой аспект в разнице знать стратегию и применить ее»
Да, я понимаю, что есть описание стратегии, а есть её реализация. И второе может не соответствовать первому. Только зачем вы это рассказываете?
интересно послушать тех, кто пишет что нужно самому зарабатывать чтобы написать робота.
по-моему это всё-таки не связанные вещи. вон как долго пишут себе роботов известные смартлабовцы (причём не сами, им программисты делают, профессиональные — и всё равно долго).
а те кто имеют роботов, насколько я понял, занимаются их доработкой почти каждый день.
ещё мне наезд на lua не понравился. отличный язык. между прочим у него нативная поддержка корутин, в отличие от С++.
по сложности он не прям вот сильно проще С++, хотя и из совсем другой оперы уже.
а так я ничего сказать не хотел. просто засветиться в разговоре про программирование. а то всё политика да политика.
Данная фраза мне не совсем понятна.
Но если что, то у меня выделен интерфейс поверх, которого строилась библиотека.
Интерфейс состоит из простых функций (send_order, cancel_order и т.д.) и callback'ов. Т.е. очень похож на то, что сделано в smartcom api. Чтобы добавить плазу, нужно реализовать на ней этот интерфейс. Что довольео просто.
«вон как долго пишут себе роботов»
Ну это дело действительно не быстрое.
За сутки.
«И что тебе это дало?»
Душевное спокойствие. Так бы постоянно мучился бы мыслями, что во мне пропадает алготрейдер-миллионер.
Это вообще ни о чём.
Самый простейший — это работа с market-заявками и свечками. А для скальперских стратегий подобное вообще не годится.
«всякие ордерлоги это для мечтательных нищебродов. Вспомните блэкфилд кэпитал»
А я и не собирался сразу миллионы баксов зарабатывать.
«Сколько времени занимает тест 1 файла лога?»
От процессора зависти. У меня стратегия на ордерлоге Si за сутки прогоняется за 4 минуты. (А сам по себе парсинг qscalp-файла происходит быстрее, чем с использованием классов от Морошкина).
«Есть ли специально внедренные задержки на получение данных и на постановку заявок?»
Есть.
«Может ли тестер одномоментно тестить много бумаг?»
Может. Несколько qscalp-файлов можно подключать.
Подумаешь, в 4-е раза ошибся! )
«без ознакомления с исходным кодом»
Заключение выдаётся по факту того, что есть. Есть хвалебные рассказы про большое количество переменных — вот это вот и оценивается.
«прибыльную стратегию родить так и не смог»
Примерно таже проблема. Есть приложение на крестах, которое снимает все из quik. Есть тестер стратегий на R. Пробую все вплоть до корреляций. R только начал учить, но он прекрасен для многих вещей.
Может чего выйдет.