Блог им. Shurik

Написание торговых роботов. Шаги 0-2.

Роботы… Как много в этом слове для уха трейдера слилось!
Как? Откуда? С чего начать?

Как ни банально, но для начала необходимо определиться со стратегией. Она может быть создана либо основываясь на стратегии других трейдеров (Резвяков, привет! Ударные дни легли в основу самого первого робота, который работал и зарабатывал у меня 1.5 года назад), либо — основываясь на собственных ощущениях и понимании рынка.

Мы пойдём путём наиболее логичным и, на мой взгляд, правильным — будем исследовать рынок на истории, искать и наблюдать закономерности, их тестировать. А в случае успеха — реализовывать в торговом роботе.

шаг 0 — что почитать?
1) Кургузкин А.А. Биржевой трейдинг: системный подход
Лучшая книга по системному трейдингу. Полезна всем и каждому, в независимости от вашей причастности к роботам.

Далее книги по C# — учимся программировать и готовимся к тестированию / реализации своих будущих алгоритмов:
2) Герберт Шилдт. C# 4.0 полное руководство.
3) http://msdn.microsoft.com/ru-ru/library/bb383962%28VS.90%29.aspx
4) http://msdn.microsoft.com/ru-ru/beginner/ee344863.aspx
5) http://www.youtube.com/user/geekitdevelop


Шаг 1 — поиск закономерностей:

открываем график, накладываем индикаторы (хаха), ищем индикаторы/их пересечения, которые позволят нам обнаружить начало движения / его остановку / пилу /… Собственно всё то, что может стать костяком нашего будущего робота.
Кому индикаторы не внушают доверие — начинаем анализ стакана, ленты, строим объёмные уровни, анализируем дельту — и используем всё это для того же самого — понимания и осознания как что где может работать. Вот один из примеров.

Все тут не первый год на рынке, поэтому у каждого есть свои наблюдения, которые он бы хотел протестировать.


Шаг 2 — тестирование
Для многих это первый затык, который останавливает.

Для тестирования берём либо Wealth-Lab (лучше брать версию не младше 5.0 — присутствует .Net язык C#. С помощью Wealth-Lab я умудрялся даже тестировать стратегии, основанные только на объёмах (кому интересны детали как — можно личкой / в комментах)),
либо — вариант более проффесиональный и намного лучше для будущего — библиотека Stock# (мой выбор).

Кому-то может для тестов подойдёт и TsLab. На вкус и цвет все фломастеры разные.
Для начала в любом случае советую выбрать тестировщик с визуальным редактором.



Программируем наши первоначальные идеи-закономерности, смотрим на первые результаты. Если не сливает — уже отлично.
Добавляем / тестируем разные варианты выхода / входов. Перестановки стопа, выхода по времени, добавляем фильтры, убираем фильтры,… Стараемся получить лучший результат (доходность, просадка, ...), при этом не увеличивая число параметров стратегии.
Тестируем на разных интервалах, в разные периоды.


При тестировании учитывайте:
1) Стратегия должна быть простой, она должна быть обоснованной и логичной.
Закономерность, что сбербанк надо шортить в том случае, если 47 часовых свечек назад лукойл рос — бред, на помойку.

2) Параметров не должно быть много, старайтесь не перегружать систему параметрами. Чем меньше параметров — тем лучше. Если введение параметра лишь немного улучшает систему — от такого параметра стоит вообще избавиться и сделать систему таким образом более стабильной.

3) При тестировании параметров выбирайте не лучшее значение, а среднее значение среди стабильного диапазона. Т.е. при небольшом изменении параметра система должна работать также хорошо.
К примеру, если на параметре X равном 1.2 система показывает 100% прибыли, а на 1.1 и 1.3 — 10%; при этом в диапазоне 2.1 — 2.5 система показывает в среднем 60-80%, то стоит брать параметр именно 2.3 — средний от диапазона.

4) Старайтесь тесты максимально приближать к реальным торгам — учитывайте комиссии, проскальзывания берите больше чем могут быть.

И самое главное — 5) Перепроверяйте всё по 10 раз. Все полученные сделки просмотрите — что нет заглядывания в будущее, что всё именно так, как и предполагалось.



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



Продолжение следует...
★65
56 комментариев
хорошо написал только вот второй шаг многих останавливает)
avatar
я первоначально второй шаг вообще расписал ещё больше, потом половину удалил.
надо как-то подробнее, с картинками, наверное, отдельно каждый пункт описать.

ладно, может осилю :)
я тестил свою системку вообще на екселе))
avatar
а я последнюю системку даже и не тестил. было наблюдение — запрограммировал минут за 15, теперь работает :)
10 входов, 7 в + пока. Порядка 3000пп взяла.
Блин, Шурик! Ты не нереально крут! Может выступить с коротким докладиком по теме роботостроительства 16 апреля?
сколько по времени, какой формат?
я подумаю =)
+100 баллов
ждем продолжения
avatar
если бы мог то плюсанул, спасибо за пост…
avatar
Супер! Ждем подробностей. А Резвяковская стратегия уже не работает или просто менее эффективна?
avatar
не запускается, т.к. намного менее эффективнее новых. :)
очень интересно.
продолжайте развивать тему.
avatar
Стрёмно полагаться на машину-робота, но за тему +
avatar
ничего стрёмного, если писал всё сам. =)
ошибки, если есть, довольно быстро находятся и исправляются.
Добавляю к автору-
обязательное условие тестирования:
1)тестируем на периоде где обязательно есть просадки и боковики, а не только рост.Лучше всего чтобы период тестирования начинался и заканчивался на примерно одном уровне цен (+- 20%)
2)Комиссии и проскальзывание НЕ МЕНЕЕ 0,1% от сделки! ПОВТОРЯЮ-НЕ МЕНЕЕ! Все личные довыды «да мой робот сможет быстрее реализовывать сделку»,«да я руками буду покупать сразу по сигналу» фтопку! Закладывайте лучше ваще 0,2% и нивкоем случае не принебрегайте этим показателем, я ваще считаю что он главный в тестинге.
3)обязательно оставляйте период(как правило самые свежие данные) где не проводили тестирование и после оптимизации своих показателей тестируйте на этом новом периоде.Только такой метод форвард-тестинга поможет выявить переоптимизировали ли вы или нет! ну автор думаю в дальнейших постах это опишет.

п.с.Автору мегареспект за столь понятное обьяснение этого аспекта трейдинга!
avatar
А сколько вы ставите проскальзывание на 1 сделку для RTSI в расчете на 1 контракт, а на 10?
avatar
ставлю проскальзывание — 50-100пп.
в среднем выходит 35пп (в районе 100 контрактов), поэтому результаты в реале получаются лучше тестов.
О! Я ставлю 20пп на 1 контракт и в тестах и в реале.
avatar
Еще вопрос. Расскажите, какой метод, по-вашему, является оптимальным для динамического расчета позиции?
avatar
А есть ли у вас метрики «успешной» систем, которые лично вы считаете приемлимыми для торговли? Если да, может быть опубликуете их?

Можно в формате как здесь:
smart-lab.ru/blog/mytrading/4037.php

Или в любом другом.
avatar
в след. посту попробую ответить
s#, как я понимаю, больше подходит уже для написания робота, который будет взаимодействовать с торговым терминалом, нежели для тестирования стратегий на исторических данных
avatar
хотя нет, почитал help, оказывается там тоже реализовано несколько режимов тестирования
avatar
тестировать там можно — как на истории, так и на реальных данных, так и на генерированных данных.

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

в след. посте тогда подробнее отвечу.
Вам удалось написать робота, стабильно приносящего доход?
avatar
1.5 года достаточный срок или ещё нет?
думаю об этом можно с уверенности говорить через N лет.
стратегии устаревают и постоянно разрабатываются / тестируются новые.
поэтому торговля роботами — такой же путь как торговля руками.
только время уходит на создание, а не на торговлю.
Я это прекрасно понимаю, поэтому и интересуюсь, есть ли уже результат, или вы в процессе поиска. Я сейчас тоже торгую с помощью робота, то есть мой интерес не праздный.
avatar
Те цели, которые ставил по доходности, сейчас в среднем достигаются. Поэтому да, конечно, результат есть. И именно развитие и движение в сторону дальнейшего написания роботов я вижу своё будущее.
а какая доходность примерно с какой суммы?
avatar
На S# через что лучше торговать? Через Quick или SmartCOM? Что надежнее?
avatar
Я хоть и был аналитиком Айти-Инвеста, но роботы всю жизнь работали через Квик. :)
Запускаются утром, сами вечером выключаются — всегда уверен что всё стабильно работает.
Смартком мягко говоря не стабилен.
По-поводу книжки. Я думаю, что читать про c# 4.0 не обязательно. Язык стал еще сложнее. Я не думаю, что программист, который пишет робота возликует от того, что там наконец-то появились ковариантные и контрвариантные generic types :-)

Пожалуй, единственное, что будет интересно, это dynamic и optional params в функциях.
avatar
так-то да, но пусть лучше будет свежий вариант книги — со всеми исправлениями и дополнениями. :)
А позицию как открываешь в 100 контрактов? По рынку, лимитом, котировщиком?
avatar
Насторожённо я отношусь однако к робототехнике, в плане конфликта робот-человек. У меня любимый способ входа в рынок по рецепту Эда Сейкоты --> повесил график эмитента на стену, отошёл в другой конец комнаты, если виден явный тренд, бум брать в направлении тренда.
Ну я инвестор, мне проще.Мне эти шумы и мелкие телодвижения не интересны.
А инфа выложена грамотно.Даже мне понятно.
avatar
Хех, особенно круто со зрением -3.5 такое проделывать :-)
avatar
Скажите, пожалуйста, нужно ли читать и Кургузскина, и Шилдта? Нельзя ли обойтись одним автором? Боюсь, с двумя я не справлюсь…
avatar
Шилдт — по программированию, Кургузкин — по бирже.
Если программировать умеете — то можно только Кургузкина. Его советую читать всем и каждому настоятельно.
Александр, привет!
Очень интересная инфа, продолжай писать!

Скажи, а через что ты торгуешь и на чем робот?
Я тоже занимаюсь роботостроением, пока правда только на начальной стадии, есть небольшая программка на Qpile, напрямую в QUIK ее гружу и работает)

Понимаю, что дальше надо юзать чтото посерьезнее — но никак не определюсь с выбором.

Как выбирал ты? Другие комментарии будут также интересны)
Wealth-Lab для тестинга идеально? а программа сама на чем и как коннектиться к квику?

спс)
avatar
привет.

я торгую через квик, робот на C# — по DDE получает инфу из квика, через Trans2Quik — передаёт заявки. Сделано через библиотеку Stock#.

Я тоже начинал с qpile. Потом быстро ушёл с него.
В следующем посте напишу свой опыт.

Wealth-Lab — хороший вариант для тестирования. Лучше многих.
просто я пытаюсь тестить в Metastock'e.

а вот с DDE и Trans2quik — там задержек нет при передаче данных? или они несущественны
avatar
задержки минимальные.
если не скальперская стратегия — то всё отлично.
если скальперская — надо под плазу писать.

задержки в получении данных минимальны, меньше 0.1сек точно.

Десятки тысяч заявок в минуту тоже тянет — больше, чем потянет плаза.
для Wealth-Lab какие недорогие и надежные способы получать датафид имеются? можно ли прикрутить к квику?
avatar
Wealth-Lab я использую только для тестов.
Те стратегии, которые сейчас реализую в Wealth-Lab'e вообще невозможно реализовать. Вроде Церих рекламировал какой-то адаптер к квику, можно к ним обратиться если вдруг такое желание возникло.
ну оттестировал, в том числе то, что невозможно реализовать — а потом что с ним делать, как автомат работать будет?
avatar
ну вот с финама в wealthlab сгрузить реально?
avatar
Конечно, именно так и делаю — с финама в Wealth-Lab.
Хорошо, Александр, если вы говорите, что надо, то я прочитаю. Только я программировать не умею. Это, наверное, сложно? Может, вы дадите мне пару уроков в индивидуальном порядке? Я способная.
avatar
если будут вопросы — задавайте в скайп
А нет готового привода для альфадирект? ну чтобы там свои данные можно было втыкать (разные индикаторы) и тестить на прошлом. Программировать неумею.
avatar
какие данные?
если тестить на истории — используйте Wealth-Lab / TsLab /…
простые стратегии можно программировать в TSLab, с помощью кубиков. Научиться их строить можно быстро, там все понятно.
TSLab в демо доступ на месяц дает Финам, берите и пробуйте.
avatar
полезная статья, спасибо)
avatar
Чушь больных! Завтра допустим война или экономика рухнет и в Жо… все твои роботы и твои домыслы… И людей только путаешь навязиваешь ахинею
avatar
Александр, зато вы пишите крайне полезные вещи в блоге! :)
Александр Муханчиков, Я в блоге ничего не пишу, мой блог взломал Муха… и теперь там пишет что хочет
avatar

теги блога Александр Муханчиков

....все тэги



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