Блог им. facepalm

История успеха

Написал бектестер на С++ для тестирования скальперских стратегий, с перспективой дописания его до рабочего робота. Вот только прибыльную стратегию родить так и не смог. Теперь вот не знаю, как поиметь какой-нибудь профит с разработки. Возможно заинтересованная общественность что-нибудь предложит.

Тут хочется сделать некоторое отступление и написать немножечко о С++. Здесь на сайте частенько попадаются сообщения в стиле «хочешь быстрого робота, пиши на плюсах!». Понятно что большинство здешних «программистов», советующих или критикующих С++, дальше lua (в лучшем случае C#) ничего не трогало, поэтому помимо высокой скорости работы программ, написанных на С++, единственное, что ещё упоминается, так это то, что писать программы на этом С++ безумно сложно. Отчасти это так, однако современный С++ (11-й и 14-й стандарты) — это (простите за тавтологию) современный язык программирования, который в выразтиельности программ может вполне потягаться с тем же С#.

Вобщем что может мой бектестер сейчас:
— работать с файлами qsh-формата (бектестинг на полном ордерлоге от Цериха)
— использовать сразу несколько источников данных (например, торгуя Ri смотерть за текущим Si)
— поддержка индикаторов (например, есть индикактор рабочего времени биржи, и чтобы торговать сразу на америке достаточно просто создать новый индиктор с подходящими значениями рабочих временных интервалов)
— самое лучшее: поддержка асинхронности в виде корутин.

О последнем чуть подробнее. Тут не так давно читал сообщение, где некто понтовался, что у него у робта чуть ли не 800 переменных. Типа смотрите, как круто! Так вот это совсем не круто. Держать в голове все эти переменные нереально. И алгоритм торговли в подобном случае работает скорее всего не так, как вы предполоагаете.

Так вот эти 800 переменных скорее всего являются лишь следствием убогой архитектуры робота, которая построена на базе т.н. конечного автомата. Код в данном случае быстро раздувается и превращается в неподдерживаемую лапшу. А что же дают корутины? А дают они следующее. Допустим, есть операция отправки заявки на биржу. Данная операция в торговых платформах или api реализована обычно двумя способами:

1) при вызове функция сразу завершается, а результат работы (поставлена ли заявка или отклонена) получается с помощью функции обратного вызова (callback). 800 перемменных проистекают обычно, когда подобный подход используются для всех асинхронных функций. Плюсы данного подохода: тестируемость робота (робота, реализованного на callback'ах можно отправлять в бектестер). Минусы: говнокод.

2) функция синхронная, и она подвешивает поток, пока не получит результат. Плюсы данного подхода: код получается линейным и простым. Минусы: таких роботов не протестирвать.

Использование корутин позволяет взять плюсы от обоих подходов: код линейный и на бектстере он тестируется.

Например, чтобы отправить завку на сервер и дождаться её исполнения, в моём роботе достаточно подряд вызвать две функции async_send_order и async_wait_deal. Роботов подобным образом писать легко и приятно.

Вобщем повторюсь ещё раз: написал бектестер, а рабочих стратегий нет. Что с этим барахлом можно сделать? Есть идеи?

ЗЫ вниматлельный читатель спросит: в чём же успех, упоминемый взаголовке? А успех в том, что биржа от меня ни рубля не получила, и я не слил никаких денег. А всего-то надо было написать сначала бектсетер.
★17
81 комментарий
Это история успеха или «попрошайничество» накидать стратегий?))

Таких бэктестеров тьма тьмущая.
avatar
Serenity, такой бектестер только у меня.
avatar
professor facepalm, а я говорю туева куча таких бэктестеров!
avatar
Serenity, нет, сэр!
avatar
Чтобы написать зарабатывающего робота нужно уметь торговать и иметь опыт.
avatar
Дар Ветер, масло масленное. Чтобы водить машину, нужно уметь водить машину. Это и так понятно.
avatar
professor facepalm, 
Передергиваете
Чтобы научить робота водить машину нужно самому уметь или нанимать спецов.
А так на что вы рассчитывали — что робот вас научит торговать?
По поводу 800 переменных — вы сходите на russian cup AI game- там пишут роботов для соревнований в примитивные игры- и поймете что ваш тестер это 1 процент от того что необходимо для работы.
avatar
rutrader, «А так на что вы рассчитывали»

Ну у меня было несколько идей, как я думал, «прибыльных роботов». Оказалось, что это не так.

«вы сходите на russian cup AI game»

Там куча кода нужна для выполнения множества различных задач. В алготрейдинге же — потому что не знают, как можно написать программу, выполняющую те же действия, но чтобы она (программа) была в разы короче.
avatar
professor facepalm, Покупатель наврядли найдется. ТЕм более на С++. Что бы что то продать -нужен продукт. А к нему полное описание что как и где.А просто получить денежку и переслать проект по почте и досвидос — не получится.
kbrobot.ru, печаль :(
avatar
Надо поторговать, ручками… не один год. Начинаете с минутных и так все выше и выше до дневок, потом опять в обратную сторону. Гоняете кучу тестов в это время. Думаю не одну 1000 алгоритмов на разных таймфремах, инструментах. Набиваете шишки, не спите ночами. Лет через 10 такой е*атни родите более менее нормальный алгоритм, который и запрограммируете.
П.с. личный опыт
ОбнуляюсьТретийРаз, имхо это гиблый путь, перебором надеяться получить прибыльную стратегию. Ну получишь один раз, а потом, бац, и не работает. Что тогда делать? Уж лучше время потратить на что-то более полезное. Если речь о том же трейдинге, то лучше изучить матан и рубить капусту в стиле Горчакова.
avatar
professor facepalm, с начала будете перебором… потом возьмете учебники и изучите ТА и начнете обдумывая создавать стратегии… Еще нужно не один год смотреть каждый день графики и стакан что бы появились идеи.
а так никто вам не даст готовый грааль) Ну по крайней мере я точно не дам)
professor facepalm, по другому не получится, как вы можете сочинять идеи для роботов если понятия не имеете какие вещи работают а какие нет. Даже для machine learning нужна база параметров и функций которые перебирать. Почитайте про kevin davey, он кубки роббинса роботами выигрывал, руками у него не получалось но опыт он получил для понимания
avatar
Дар Ветер, а как можно узнать, работает ли вещь или нет, не попробовав её реализовать? От рождения сразу знать, что работает, а что нет?
avatar
professor facepalm, это называется опыт. С опытом знаешь в каком направлении стоит копать а в каком нет. Можно все подряд перебирать и тоже будет опыт, просто смысла во всем причесанно коде и эффективных тестерах если вы пытаетесь при этом давить вино из арбузов.
avatar
по секрету… здесь через одного, все писатели бэктестеров и все не такие как у всех. естественно уникальные.
ну и стиль все дураки, а я д'артаньян сразу подкупает ))

можно вопрос для разрыва шаблона? а зачем вы его писали, если стратегий нет?
avatar
Изя Квикович, стратегии были. Как оказалось, все убыточные.
avatar
думаю Вы на верном пути. далее есть два варианта 1) это заниматься тем что у Вас лучше всего получается, программированием и тестированием  и кому ни будь продаться в команду.
2) тяжелый и дорогостоящий путь. начать изучать анализ рынка и начать торговать руками(не важно как в + или в -)главное начать, что бы набрался опыт и Вы родили стратегию. Потому что самый мощный инструмент это ваша нейронная сеть, ваш мозг. Но без дальнейшего анализа рынка, каким либо способом, стратегию не напишите. Но анализ в ручную, самый тяжелый и дорогой но самый верный и в итоге приведет к хорошему результату.
avatar
 за пост большой+++++++
avatar
А чем готовое решение тестера на fullorderlog от S#DATA  не устроило?
  
avatar
Romanx, тем, что на S# разрабатывать роботов сложно. Используя мою библиотеку, это можно делать гораздо проще.
Плюс не понятно, как работает их бектестер.
Плюс не люблю Виндоус.
avatar
BuldozerM, тут матан нужно учить. Что в общем-то в планах. Но это увы не так быстро, как хотелось бы.
avatar
это типичная ошибка разработчиков которые приходят в трейдинг — тратят время на велосипед вместо того чтобы заняться разработкой самой стратегии а инфраструктура потом
avatar
nbvehrfr, а как проверить стратегию без инфраструктуры? Глазами просматривая ордерлог и отмечая карандашиком сделки, протестировать мои стратегии было нереально.
Тем более это была не инфраструктура, а просто бектестер. Инфраструктурой это было бы, если бы я начал сразу писать коннектор для плазы.
avatar
professor facepalm, есть куча инструментов, просто склад ума у дэва — проще сделать самому чем изучить другой инструмент. на смарте есть чел, забыл ник, который херачит в tslab'е стратегии из кубиков (3 тысячи! для одной). вот это пример как надо концентрироваться на сути дела а не на посторонних вещах. под инфраструктурой я понимаю все что не касается стратегии
avatar
nbvehrfr, скальперские стратегии в tslab'е не сделать и, тем более, не протестировать.
avatar
professor facepalm, так все-такие есть стратегии ?
зачем писать тестер, если не знаешь какого типа стратегии на нем будешь тестировать? HFT, позиционные, арбитраж. может вокруг посмотреть и куча тестеров кругом? нет ?
но вообще, что-то сделать самому — это уже поступок !
еще очень важный практический момент, если все протестил и ок, то, наверное стратегию на реал. С экзекьушеном как?
Андрей Егоров, «так все-такие есть стратегии ?»

было представление о прибыльных стратегиях, которое развеялось после их тестирования.

«С экзекьушеном как?»

вопрос не понял.
avatar
professor facepalm, execution — исполнение сделок на рынке. 
Андрей Егоров, нет стратегии, которая прибыльна в бектестере, — не вижу смысла тратить время на коннектор к плазе и деньги на бесперспективную торговлю в реале.
avatar
professor facepalm, у меня этих прибыльных стратегий, как у дурака махорки, могу возмездно поделиться
Андрей Егоров, отношусь к подобному с большим подозрением, т.к. не понимаю, какой смысл делиться прибыльными стратегиями, пусть и возмездно.
avatar
professor facepalm, я тоже так раньше думал )) почитайте Рашке, Л. Уильямса еще много кого, все делятся, бесплатно. Другой аспект в разнице знать стратегию и применить ее. я здесь тоже делюсь в рамках курса.
Андрей Егоров, да, есть те, кто делятся бесплатно. Но сути эти не меняет, т.к. есть и те, кто занимается мошенничеством (это я говорю не о вас, а вообще). Поэтому подозрение к подобным вещам никуда не девается.

«Другой аспект в разнице знать стратегию и применить ее»

Да, я понимаю, что есть описание стратегии, а есть её реализация. И второе может не соответствовать первому. Только зачем вы это рассказываете?
avatar
professor facepalm, «Только зачем вы это рассказываете?» просто хотел помочь, в соответствии с постом. удачи
professor facepalm, если у тебя робот не совместим по модели событий и данных с плазой, то ты явно где-то зря потратил время. потом потратишь ещё столько же на переделку для подсоединения. хотя это и не критично. ну сколько можно писать такой бектестер, месяц? это совсем не много для робота. и мало для поиска стратегии, imho.

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

ещё мне наезд на lua не понравился. отличный язык. между прочим у него нативная поддержка корутин, в отличие от С++.
по сложности он не прям вот сильно проще С++, хотя и из совсем другой оперы уже. 

а так я ничего сказать не хотел. просто засветиться в разговоре про программирование. а то всё политика да политика.
avatar
ПBМ, «если у тебя робот не совместим по модели событий и данных с плазой»

Данная фраза мне не совсем понятна.

Но если что, то у меня выделен интерфейс поверх, которого строилась библиотека.

Интерфейс состоит из простых функций (send_order, cancel_order и т.д.) и callback'ов. Т.е.  очень похож на то, что сделано в smartcom api. Чтобы добавить плазу, нужно реализовать на ней этот интерфейс. Что довольео просто.

«вон как долго пишут себе роботов»

Ну это дело действительно не быстрое.
avatar
professor facepalm, твой бэктэстер скорее всего никому не нужен. Сам по себе. Ты к нему полный ордерлог Цериха за какой срок прикладываешь? Сам посмотри — протестировал ты свои «стратегии» )) И что тебе это дало? ))
Zweroboi, «Ты к нему полный ордерлог Цериха за какой срок прикладываешь?»

За сутки.

«И что тебе это дало?»

Душевное спокойствие. Так бы постоянно мучился бы мыслями, что во мне пропадает алготрейдер-миллионер.
avatar
Злой Кремлебот, поправочка: бесконечно выигрышных стратегий нет. Но никто и не просит
avatar
Скорее всего в бекстестере ошибка! Не может быть чтобы без прибыли.
avatar
ivanovr, может!
avatar
ivanovr, т.е. прибыль есть, но убыток то больше! :)
avatar
professor facepalm, это же здорово! тебе нужно всего-лишь перевернуть позицию — лонг заменить на шорт )) и прибыль будешь лопатой грести.
Alex, пробовал: не работает!
avatar
professor facepalm, это на каком обьеме сделок и за какой период?
avatar
stitrace, сутки. Сделок около 600.
avatar
professor facepalm, сутки это очень мало. То что стратегия проигрывает на каком то коротком промежутке времени не является критерием её убыточности, даже если речь идёт об сотнях и тысячах сделок. Прогоняй на массивах от 30 суток, выделяй убыточные и выигрышные периоды, разбирайся почему и т.д. Чтобы отмести идею недостаточно прогнать её на бэктсте, бектест должен только дать помочь понять, почему идея, заложенная в стратегии не работает. И если находишь почему она не работает, только тогда отметай или вноси поправки.
avatar
stitrace, благодарю за ценный совет.
avatar
Думаю в области скальпнга больше всего шансов добиться успеха используя статистический арбитраж. Я бы копал туда.
avatar
Если представить, сколько в мире желающих написать прибыльного робота, финал можно было предсказать. Попробуйте поискать партнера с выраженным даром самостоятельно мыслить (наблюдать и делать выводы), это редкость, но шансы есть. Сузить круг поисков можно ориентацией на творческие способности/гуманитарный склад. Но все равно алгоритмизация того, что может мозг очень трудна. Вероятно, это хорошо.
На самом деле, зря вы. Для тестирования скальп стратегий очень мало качественных бектестеров. Вопрос автору. Как ваш бектестер эмулирует реакцию участников рынка на вашу заявку?
avatar
stitrace, никак. Торгуется один (максимум два) контракт. Предполагается, что на рынок они не оказывают воздействие.
avatar
BuldozerM, надеюсь, что не прав, но похоже на разводилово.  Как никак,
1) стратегии, основанные на анализе временных рядов, как правило, имеют высокий порог ликвидности, значит, было бы там что-то, ребят бы давно перекупили люди с деньгами, и они бы не искали заказчиков с $400000.
2) судя по страницам сайта, у ребят есть неплохие наработки в курвфиттинге. И это просто пипец, какая их гордость.
3) какого-либо упоминания о анализе микроструктуры не увидел в принципе. Похоже, что все упирается в анализ временных рядов. То ли это, что нужно физикам? Думаю, нет. Скорее это подойдет тем, кто привык рисковать чужими деньгами
avatar
BuldozerM, да… тяжело будет найти альфу с такими-то возможностями) https://www.quantconnect.com/forum/discussion/826/how-to-backtest-with-historical-limit-order-book-data
avatar
Автор однозначно на верном пути. Более того, по всему видно, что он знает что делает. Именно поэтому я ничего не подскажу. Однако, удачи))
avatar
Cristopher Robin, толстовато!
Zweroboi, не злитесь, этот парень закончит свой бэктестер, прогонет рынок вдоль и поперек и в*зъ*бет вас))) Сушите весла))
avatar
Cristopher Robin, одного бэктестера мало. Настолько мало, что он по большому счёту и не нужен. Ну только если самый простейший, для успокоения совести, а всякие ордерлоги это для мечтательных нищебродов. Вспомните блэкфилд кэпитал )) Уж какие там у них были запасы ордерлогов )) а бэктестер! и не один! И офис в башне… мечта таких вот парней. Труха всё это.
Zweroboi, «самый простейший»

Это вообще ни о чём.
Самый простейший — это работа с market-заявками и свечками. А для скальперских стратегий подобное вообще не годится.

«всякие ордерлоги это для мечтательных нищебродов. Вспомните блэкфилд кэпитал»

А я и не собирался сразу миллионы баксов зарабатывать.
avatar
Zweroboi, для нищебродов которым лень прогнать алгоритм на реальном счете? Вы это имеете в виду? В таком случае я нищеброд в квадрате, потому что мне лень даже алгоритм писать, пока бектестер не покажет мне где имено брать деньги))
avatar
Zweroboi, не исключено, кстати, что прямо сейчас автор обнуляет ваш счёт в бэктесте.
avatar
stitrace, пусть обнуляет, сто лет не хватит чтобы обнулить я вас уверяю ))) пусть бы лучше чем полезным занялся, молодой же ещё наверное…
stitrace, * мечтательно * эх, вот бы так и было!
avatar
Cristopher Robin, Спасибо!
avatar
Автор молодец. Подход правильный. Торговлей руками не забивайте голову, это не системная торговля. Свечки таже фигня. Свечка это фильтр 4 точки за 60 секунд, из массива лога в много тысяч точек. Почему именно этот фильтр лучше многих других? В общем автору успеха. Сколько времени занимает тест 1 файла лога? Есть ли специально внедренные задержки на получение данных и на постановку заявок? Может ли тестер одномоментно тестить много бумаг? Или только одну? 
Алексей Никитин,
«Сколько времени занимает тест 1 файла лога?»

От процессора зависти. У меня стратегия на ордерлоге Si за сутки прогоняется за 4 минуты. (А сам по себе парсинг qscalp-файла происходит быстрее, чем с использованием классов от Морошкина).

«Есть ли специально внедренные задержки на получение данных и на постановку заявок?»

Есть.

«Может ли тестер одномоментно тестить много бумаг?»

Может. Несколько qscalp-файлов можно подключать.
avatar
Искать идеи, разрабатывать свои стратегии. Либо найти адекватного партнера с идеями, скорее всего 98 из 100 вам такое предложат потестить…
avatar
Поехавший) Во первых, я говорил не 800, а 200+. Во вторых, фраза вырвана из контекста, который совсем о другом. В третьих, я приложил к тому комментарию результаты тестов с устойчивой плюсовой динамикой. Ну и в четвертых, без ознакомления с исходным кодом, любое «экспертное» заключение о структуре бота будет трехствольным пуком в лужу.
avatar
Adept, «я говорил не 800, а 200+»

Подумаешь, в 4-е раза ошибся! )

«без ознакомления с исходным кодом»

Заключение выдаётся по факту того, что есть. Есть хвалебные рассказы про большое количество переменных — вот это вот и оценивается.
avatar
professor facepalm, Ну почесал ЧСВ, с кем не бывает :). Но ты не забывай, что сравнивать мои MQL5-поделки со взрослой программой на C++ не корректно, т.к. е*ала с архитектурой, потоками и даже  ООП в MQL5 просто не нужна. 200+ переменных легко держатся в голове т.к. у меня 1600+ LPI на lumosity.com потому что они правильно названы и используются только для хранения данных полученных в функциях. Все работает именно так как нужно, отлично поддерживается и компонуется вообще как угодно.
avatar
А этот бектестер торгует сам или нет? Интересно через какой интерфейс под линуксом, если не плаза.
avatar
Displacer, он не торгует на реальных рынках. Это ведь бектестер. Коннектора к плазе на данный момент нет.
avatar

«прибыльную стратегию родить так и не смог»

Примерно таже проблема. Есть приложение на крестах, которое снимает все из quik. Есть тестер стратегий на R. Пробую все вплоть до корреляций. R только начал учить, но он прекрасен для многих вещей.

Может чего выйдет.

avatar

теги блога professor facepalm

....все тэги



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