professor facepalm
professor facepalm личный блог
05 января 2016, 21:19

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

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

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

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

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

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

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

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

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

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

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

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

    Таких бэктестеров тьма тьмущая.
      • Serenity
        05 января 2016, 23:40
        professor facepalm, а я говорю туева куча таких бэктестеров!
  • Дар Ветер
    05 января 2016, 22:42
    Чтобы написать зарабатывающего робота нужно уметь торговать и иметь опыт.
      • rutrader
        05 января 2016, 23:10
        professor facepalm, 
        Передергиваете
        Чтобы научить робота водить машину нужно самому уметь или нанимать спецов.
        А так на что вы рассчитывали — что робот вас научит торговать?
        По поводу 800 переменных — вы сходите на russian cup AI game- там пишут роботов для соревнований в примитивные игры- и поймете что ваш тестер это 1 процент от того что необходимо для работы.
      • Евгений Черных
        06 января 2016, 08:51
        professor facepalm, Покупатель наврядли найдется. ТЕм более на С++. Что бы что то продать -нужен продукт. А к нему полное описание что как и где.А просто получить денежку и переслать проект по почте и досвидос — не получится.
  • Денис Михайлов
    05 января 2016, 23:05
    Надо поторговать, ручками… не один год. Начинаете с минутных и так все выше и выше до дневок, потом опять в обратную сторону. Гоняете кучу тестов в это время. Думаю не одну 1000 алгоритмов на разных таймфремах, инструментах. Набиваете шишки, не спите ночами. Лет через 10 такой е*атни родите более менее нормальный алгоритм, который и запрограммируете.
    П.с. личный опыт
      • Денис Михайлов
        05 января 2016, 23:32
        professor facepalm, с начала будете перебором… потом возьмете учебники и изучите ТА и начнете обдумывая создавать стратегии… Еще нужно не один год смотреть каждый день графики и стакан что бы появились идеи.
        а так никто вам не даст готовый грааль) Ну по крайней мере я точно не дам)
      • Дар Ветер
        06 января 2016, 09:29
        professor facepalm, по другому не получится, как вы можете сочинять идеи для роботов если понятия не имеете какие вещи работают а какие нет. Даже для machine learning нужна база параметров и функций которые перебирать. Почитайте про kevin davey, он кубки роббинса роботами выигрывал, руками у него не получалось но опыт он получил для понимания
          • Дар Ветер
            06 января 2016, 13:55
            professor facepalm, это называется опыт. С опытом знаешь в каком направлении стоит копать а в каком нет. Можно все подряд перебирать и тоже будет опыт, просто смысла во всем причесанно коде и эффективных тестерах если вы пытаетесь при этом давить вино из арбузов.
  • Изя 3%
    05 января 2016, 23:17
    по секрету… здесь через одного, все писатели бэктестеров и все не такие как у всех. естественно уникальные.
    ну и стиль все дураки, а я д'артаньян сразу подкупает ))

    можно вопрос для разрыва шаблона? а зачем вы его писали, если стратегий нет?
  • SMA
    05 января 2016, 23:20
    думаю Вы на верном пути. далее есть два варианта 1) это заниматься тем что у Вас лучше всего получается, программированием и тестированием  и кому ни будь продаться в команду.
    2) тяжелый и дорогостоящий путь. начать изучать анализ рынка и начать торговать руками(не важно как в + или в -)главное начать, что бы набрался опыт и Вы родили стратегию. Потому что самый мощный инструмент это ваша нейронная сеть, ваш мозг. Но без дальнейшего анализа рынка, каким либо способом, стратегию не напишите. Но анализ в ручную, самый тяжелый и дорогой но самый верный и в итоге приведет к хорошему результату.
  • SMA
    05 января 2016, 23:21
     за пост большой+++++++
  • SMT
    05 января 2016, 23:28
    А чем готовое решение тестера на fullorderlog от S#DATA  не устроило?
      
  • nbvehrfr
    05 января 2016, 23:43
    это типичная ошибка разработчиков которые приходят в трейдинг — тратят время на велосипед вместо того чтобы заняться разработкой самой стратегии а инфраструктура потом
      • nbvehrfr
        06 января 2016, 00:00
        professor facepalm, есть куча инструментов, просто склад ума у дэва — проще сделать самому чем изучить другой инструмент. на смарте есть чел, забыл ник, который херачит в tslab'е стратегии из кубиков (3 тысячи! для одной). вот это пример как надо концентрироваться на сути дела а не на посторонних вещах. под инфраструктурой я понимаю все что не касается стратегии
      • Андрей Егоров
        06 января 2016, 00:09
        professor facepalm, так все-такие есть стратегии ?
        зачем писать тестер, если не знаешь какого типа стратегии на нем будешь тестировать? HFT, позиционные, арбитраж. может вокруг посмотреть и куча тестеров кругом? нет ?
        но вообще, что-то сделать самому — это уже поступок !
        еще очень важный практический момент, если все протестил и ок, то, наверное стратегию на реал. С экзекьушеном как?
          • Андрей Егоров
            07 января 2016, 19:07
            professor facepalm, execution — исполнение сделок на рынке. 
              • Андрей Егоров
                07 января 2016, 19:18
                professor facepalm, у меня этих прибыльных стратегий, как у дурака махорки, могу возмездно поделиться
                  • Андрей Егоров
                    07 января 2016, 19:42
                    professor facepalm, я тоже так раньше думал )) почитайте Рашке, Л. Уильямса еще много кого, все делятся, бесплатно. Другой аспект в разнице знать стратегию и применить ее. я здесь тоже делюсь в рамках курса.
                      • Андрей Егоров
                        08 января 2016, 04:41
                        professor facepalm, «Только зачем вы это рассказываете?» просто хотел помочь, в соответствии с постом. удачи
      • П М
        06 января 2016, 00:27
        professor facepalm, если у тебя робот не совместим по модели событий и данных с плазой, то ты явно где-то зря потратил время. потом потратишь ещё столько же на переделку для подсоединения. хотя это и не критично. ну сколько можно писать такой бектестер, месяц? это совсем не много для робота. и мало для поиска стратегии, imho.

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

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

        а так я ничего сказать не хотел. просто засветиться в разговоре про программирование. а то всё политика да политика.
      • Пафос Респектыч
        06 января 2016, 01:18
        professor facepalm, твой бэктэстер скорее всего никому не нужен. Сам по себе. Ты к нему полный ордерлог Цериха за какой срок прикладываешь? Сам посмотри — протестировал ты свои «стратегии» )) И что тебе это дало? ))
  • Roman Ivanov
    06 января 2016, 00:24
    Скорее всего в бекстестере ошибка! Не может быть чтобы без прибыли.
      • Александр Муравьев
        06 января 2016, 08:30
        professor facepalm, это же здорово! тебе нужно всего-лишь перевернуть позицию — лонг заменить на шорт )) и прибыль будешь лопатой грести.
      • stitrace
        06 января 2016, 13:44
        professor facepalm, это на каком обьеме сделок и за какой период?
          • stitrace
            06 января 2016, 15:41
            professor facepalm, сутки это очень мало. То что стратегия проигрывает на каком то коротком промежутке времени не является критерием её убыточности, даже если речь идёт об сотнях и тысячах сделок. Прогоняй на массивах от 30 суток, выделяй убыточные и выигрышные периоды, разбирайся почему и т.д. Чтобы отмести идею недостаточно прогнать её на бэктсте, бектест должен только дать помочь понять, почему идея, заложенная в стратегии не работает. И если находишь почему она не работает, только тогда отметай или вноси поправки.
  • Roman Ivanov
    06 января 2016, 00:27
    Думаю в области скальпнга больше всего шансов добиться успеха используя статистический арбитраж. Я бы копал туда.
  • старый трейдер
    06 января 2016, 00:31
    Если представить, сколько в мире желающих написать прибыльного робота, финал можно было предсказать. Попробуйте поискать партнера с выраженным даром самостоятельно мыслить (наблюдать и делать выводы), это редкость, но шансы есть. Сузить круг поисков можно ориентацией на творческие способности/гуманитарный склад. Но все равно алгоритмизация того, что может мозг очень трудна. Вероятно, это хорошо.
  • stitrace
    06 января 2016, 00:31
    На самом деле, зря вы. Для тестирования скальп стратегий очень мало качественных бектестеров. Вопрос автору. Как ваш бектестер эмулирует реакцию участников рынка на вашу заявку?
  • Cristopher Robin
    06 января 2016, 01:12
    Автор однозначно на верном пути. Более того, по всему видно, что он знает что делает. Именно поэтому я ничего не подскажу. Однако, удачи))
    • Пафос Респектыч
      06 января 2016, 01:20
      Cristopher Robin, толстовато!
      • Cristopher Robin
        06 января 2016, 01:29
        Zweroboi, не злитесь, этот парень закончит свой бэктестер, прогонет рынок вдоль и поперек и в*зъ*бет вас))) Сушите весла))
        • Пафос Респектыч
          06 января 2016, 03:24
          Cristopher Robin, одного бэктестера мало. Настолько мало, что он по большому счёту и не нужен. Ну только если самый простейший, для успокоения совести, а всякие ордерлоги это для мечтательных нищебродов. Вспомните блэкфилд кэпитал )) Уж какие там у них были запасы ордерлогов )) а бэктестер! и не один! И офис в башне… мечта таких вот парней. Труха всё это.
          • Cristopher Robin
            06 января 2016, 16:19
            Zweroboi, для нищебродов которым лень прогнать алгоритм на реальном счете? Вы это имеете в виду? В таком случае я нищеброд в квадрате, потому что мне лень даже алгоритм писать, пока бектестер не покажет мне где имено брать деньги))
      • stitrace
        06 января 2016, 01:41
        Zweroboi, не исключено, кстати, что прямо сейчас автор обнуляет ваш счёт в бэктесте.
        • Пафос Респектыч
          06 января 2016, 03:26
          stitrace, пусть обнуляет, сто лет не хватит чтобы обнулить я вас уверяю ))) пусть бы лучше чем полезным занялся, молодой же ещё наверное…
  • Алексей Никитин
    06 января 2016, 04:38
    Автор молодец. Подход правильный. Торговлей руками не забивайте голову, это не системная торговля. Свечки таже фигня. Свечка это фильтр 4 точки за 60 секунд, из массива лога в много тысяч точек. Почему именно этот фильтр лучше многих других? В общем автору успеха. Сколько времени занимает тест 1 файла лога? Есть ли специально внедренные задержки на получение данных и на постановку заявок? Может ли тестер одномоментно тестить много бумаг? Или только одну? 
  • cfree0185
    06 января 2016, 04:42
    Искать идеи, разрабатывать свои стратегии. Либо найти адекватного партнера с идеями, скорее всего 98 из 100 вам такое предложат потестить…
  • helk3rn
    06 января 2016, 13:42
    Поехавший) Во первых, я говорил не 800, а 200+. Во вторых, фраза вырвана из контекста, который совсем о другом. В третьих, я приложил к тому комментарию результаты тестов с устойчивой плюсовой динамикой. Ну и в четвертых, без ознакомления с исходным кодом, любое «экспертное» заключение о структуре бота будет трехствольным пуком в лужу.
      • helk3rn
        06 января 2016, 16:16
        professor facepalm, Ну почесал ЧСВ, с кем не бывает :). Но ты не забывай, что сравнивать мои MQL5-поделки со взрослой программой на C++ не корректно, т.к. е*ала с архитектурой, потоками и даже  ООП в MQL5 просто не нужна. 200+ переменных легко держатся в голове т.к. у меня 1600+ LPI на lumosity.com потому что они правильно названы и используются только для хранения данных полученных в функциях. Все работает именно так как нужно, отлично поддерживается и компонуется вообще как угодно.
  • Displacer
    10 января 2016, 10:59
    А этот бектестер торгует сам или нет? Интересно через какой интерфейс под линуксом, если не плаза.
  • crast
    15 февраля 2016, 16:06

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

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

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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн