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