Александр Муханчиков
Александр Муханчиков личный блог
07 апреля 2011, 10:51

Написание торговых роботов. Шаги 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 раз. Все полученные сделки просмотрите — что нет заглядывания в будущее, что всё именно так, как и предполагалось.



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



Продолжение следует...
56 Комментариев
  • dk777
    07 апреля 2011, 11:10
    хорошо написал только вот второй шаг многих останавливает)
      • dk777
        07 апреля 2011, 11:23
        я тестил свою системку вообще на екселе))
  • Тимофей Мартынов
    07 апреля 2011, 11:14
    Блин, Шурик! Ты не нереально крут! Может выступить с коротким докладиком по теме роботостроительства 16 апреля?
  • megatrade
    07 апреля 2011, 11:16
    +100 баллов
    ждем продолжения
  • Noname
    07 апреля 2011, 11:28
    если бы мог то плюсанул, спасибо за пост…
  • Владимир
    07 апреля 2011, 11:34
    Супер! Ждем подробностей. А Резвяковская стратегия уже не работает или просто менее эффективна?
  • VpnS
    07 апреля 2011, 11:37
    очень интересно.
    продолжайте развивать тему.
  • Ilya-S
    07 апреля 2011, 11:56
    Стрёмно полагаться на машину-робота, но за тему +
  • Артем
    07 апреля 2011, 11:56
    Добавляю к автору-
    обязательное условие тестирования:
    1)тестируем на периоде где обязательно есть просадки и боковики, а не только рост.Лучше всего чтобы период тестирования начинался и заканчивался на примерно одном уровне цен (+- 20%)
    2)Комиссии и проскальзывание НЕ МЕНЕЕ 0,1% от сделки! ПОВТОРЯЮ-НЕ МЕНЕЕ! Все личные довыды «да мой робот сможет быстрее реализовывать сделку»,«да я руками буду покупать сразу по сигналу» фтопку! Закладывайте лучше ваще 0,2% и нивкоем случае не принебрегайте этим показателем, я ваще считаю что он главный в тестинге.
    3)обязательно оставляйте период(как правило самые свежие данные) где не проводили тестирование и после оптимизации своих показателей тестируйте на этом новом периоде.Только такой метод форвард-тестинга поможет выявить переоптимизировали ли вы или нет! ну автор думаю в дальнейших постах это опишет.

    п.с.Автору мегареспект за столь понятное обьяснение этого аспекта трейдинга!
  • Deleted
    07 апреля 2011, 12:03
    А сколько вы ставите проскальзывание на 1 сделку для RTSI в расчете на 1 контракт, а на 10?
      • Deleted
        07 апреля 2011, 12:50
        О! Я ставлю 20пп на 1 контракт и в тестах и в реале.
  • Deleted
    07 апреля 2011, 12:04
    Еще вопрос. Расскажите, какой метод, по-вашему, является оптимальным для динамического расчета позиции?
  • Deleted
    07 апреля 2011, 12:13
    А есть ли у вас метрики «успешной» систем, которые лично вы считаете приемлимыми для торговли? Если да, может быть опубликуете их?

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

    Или в любом другом.
  • meteop
    07 апреля 2011, 12:23
    s#, как я понимаю, больше подходит уже для написания робота, который будет взаимодействовать с торговым терминалом, нежели для тестирования стратегий на исторических данных
    • meteop
      07 апреля 2011, 12:36
      хотя нет, почитал help, оказывается там тоже реализовано несколько режимов тестирования
  • businesstime
    07 апреля 2011, 12:31
    Вам удалось написать робота, стабильно приносящего доход?
      • businesstime
        07 апреля 2011, 13:01
        Я это прекрасно понимаю, поэтому и интересуюсь, есть ли уже результат, или вы в процессе поиска. Я сейчас тоже торгую с помощью робота, то есть мой интерес не праздный.
      • johnny
        08 апреля 2011, 11:31
        а какая доходность примерно с какой суммы?
  • Вадим
    07 апреля 2011, 13:02
    На S# через что лучше торговать? Через Quick или SmartCOM? Что надежнее?
  • Deleted
    07 апреля 2011, 13:05
    По-поводу книжки. Я думаю, что читать про c# 4.0 не обязательно. Язык стал еще сложнее. Я не думаю, что программист, который пишет робота возликует от того, что там наконец-то появились ковариантные и контрвариантные generic types :-)

    Пожалуй, единственное, что будет интересно, это dynamic и optional params в функциях.
  • garry
    07 апреля 2011, 13:19
    А позицию как открываешь в 100 контрактов? По рынку, лимитом, котировщиком?
  • serginvest
    07 апреля 2011, 14:55
    Насторожённо я отношусь однако к робототехнике, в плане конфликта робот-человек. У меня любимый способ входа в рынок по рецепту Эда Сейкоты --> повесил график эмитента на стену, отошёл в другой конец комнаты, если виден явный тренд, бум брать в направлении тренда.
    Ну я инвестор, мне проще.Мне эти шумы и мелкие телодвижения не интересны.
    А инфа выложена грамотно.Даже мне понятно.
    • Deleted
      07 апреля 2011, 16:35
      Хех, особенно круто со зрением -3.5 такое проделывать :-)
  • Flogging Molly
    07 апреля 2011, 16:25
    Скажите, пожалуйста, нужно ли читать и Кургузскина, и Шилдта? Нельзя ли обойтись одним автором? Боюсь, с двумя я не справлюсь…
  • eexproducer
    07 апреля 2011, 19:33
    Александр, привет!
    Очень интересная инфа, продолжай писать!

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

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

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

    спс)
  • eexproducer
    07 апреля 2011, 22:11
    просто я пытаюсь тестить в Metastock'e.

    а вот с DDE и Trans2quik — там задержек нет при передаче данных? или они несущественны
  • S.One
    07 апреля 2011, 22:38
    для Wealth-Lab какие недорогие и надежные способы получать датафид имеются? можно ли прикрутить к квику?
      • S.One
        08 апреля 2011, 02:49
        ну оттестировал, в том числе то, что невозможно реализовать — а потом что с ним делать, как автомат работать будет?
  • eexproducer
    08 апреля 2011, 00:29
    ну вот с финама в wealthlab сгрузить реально?
  • Flogging Molly
    08 апреля 2011, 12:37
    Хорошо, Александр, если вы говорите, что надо, то я прочитаю. Только я программировать не умею. Это, наверное, сложно? Может, вы дадите мне пару уроков в индивидуальном порядке? Я способная.
  • bank518
    08 апреля 2011, 18:40
    А нет готового привода для альфадирект? ну чтобы там свои данные можно было втыкать (разные индикаторы) и тестить на прошлом. Программировать неумею.
  • Apollo13
    12 апреля 2011, 15:50
    простые стратегии можно программировать в TSLab, с помощью кубиков. Научиться их строить можно быстро, там все понятно.
    TSLab в демо доступ на месяц дает Финам, берите и пробуйте.
  • DewDrop
    18 марта 2013, 10:46
    полезная статья, спасибо)
  • Александр
    27 марта 2014, 21:59
    Чушь больных! Завтра допустим война или экономика рухнет и в Жо… все твои роботы и твои домыслы… И людей только путаешь навязиваешь ахинею
      • Александр
        28 марта 2014, 16:47
        Александр Муханчиков, Я в блоге ничего не пишу, мой блог взломал Муха… и теперь там пишет что хочет

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

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