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

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

Итак, долгожданное продолжение первой части.



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

Что делать дальше, как поскорее начинать заполнять чемоданы деньгами?
Как запустить стратегию на биржу?

Здесь, как обычно, вариантов несколько.
1) Вы тестировали стратегию в тестере, который поддерживается вашим брокером — TS Lab (АйтиИнвест, Алор, Финам), Wealth Lab (Церих),… — просто напросто пользуясь средствами программы и вашего брокера посылаете приказы на биржу.

Этот вариант очевиден своей простотой.
На мой взгляд, все плюсы на этом заканчиваются.

Минусы:
1) зависимость от стороннего софта;
2) зависимость от адаптера между программой и брокером;
3) неспособность глубоко воздействовать на робота.
По сути — кроме самой стратегии вы ничего редактировать не можете. Ни как часто стратегия обрабатывается, ни как часто надо проверять переподключение, ни подключение к другому серверу в случае разрывов — Н И Ч Е Г О!;
4) порой большая ограниченность в стратегиях.
Попробуй на Wealth-Lab напиши стратегию на тиках, которая будет хранить дневную историю и считать определённые значения по объёмам / дельте / хреньте /… Мой компьютер начинал жестоко тормозить, стратегии тормозились, не было лёгкости в управлении.
Я знаю, что многие под TS Lab покупают сервера отдельные с 8 ядрами процессора и 8 Gb оперативки. Моё мнение — бред.

Первый пункт я никогда не приветствовал. Может после более глубокого изучения TS Lab моё мнение изменится.


2) Программирование стратегии.
Большой пункт.
Есть 2 варианта:
a) о чудо, в школе / институте вы изучали Basic/Pascal/C/… И вы умеете программировать на одном из современных языков — С++/C#.
b) вы программировать не умеете.
b1) учиться хотите — берёте книжку из первого поста и вперёд, постигать практикой азы.
b2) учиться не хотите. Пишите ТЗ стратегии. Как можно лучше расписывая детали о том, как должны задаваться параметры, что должен робот уметь, какие кнопки должны быть помимо кнопки «Рубить бабло», «Вывести бабло» и так далее и как можно подробнее. И в общих чертах, без мелких деталей, описываете свою стратегию. Далее с этим ТЗ обращаетесь к программисту (ко мне, к примеру :D ) c вопросом сможет ли он и если да, сколько по времени / деньгам это займёт.


Если вы всё же решили всё запрограммировать сами, то есть следующие варианты:
1) у вас простейшая стратегия на скользящих средних, которая не требовательна к скорости, которой задержки по 2-3 секунды ничего не значат. Берёте Qpile (встроенный язык в квик) и реализовывайте стратегию на нём. Подробная документация прилагается к квику; квик есть почти у каждого брокера — проблем быть не должно.
Замечу, что первые 4 стратегии, которые у меня зарабатывали, были написаны именно на Qpile. Сейчас на Qpile ничего не работает, всё переписано.

Минусы — скорость; невозможность реализации сложных стратегий.
Плюсы — простота.


У вас продвинутая стратегия и хочется реализовать её максимально удобно / продвинуто. Чтоб управление соединением, котировками, обработкой стратегии было полностью на ваших плечах.
2) SmartCom
не стоит, см. пункт 4
3) Plaza2
не стоит, см. пункт 4
4) Stock#
Библиотека, которая позволяет подключаться напрямую к терминалам / шлюзам / API брокера, минуя сторонние программы.
Всё что надо — находится под вашим полным контролем.
Доступны: SmartCom, Quik, Alpha Direct. В ближайшее время будет доступна и Plaza2.
Самое главное — не надо переписывать стратегию, если переходите от Альфы в Открытие или из Алора в Айти. Всё что будет необходимо — заменить пару строчек кода.
Более того — доступно тестирование на истории.

В общем уверен на 100%, что на российском рынке именно за этой библиотекой будущее.
Именно её простота, но в тоже время и глубина, позволяет писать абсолютно любые стратегии которые приходят в голову.
На моей машине работают одновременно порядка 12 стратегий с 4 квиками — всё реализовано в одной программе, процессора всё это есть порядка 5-10% — большинство едят квика, по 0-2%.

Почему Stock#, а не SmartCom или Plaza2? Доступны удобные интерфейсы, многие ошибки исправлены / обработны именно внутри Stock#, нет необходимости обрабатывать их самому.
В общем луче один раз увидеть / попробовать.


Минусы — необходимо время, чтоб разобраться / написать свою архитектуру; сложность не для программиста.
Плюсы — скорость, удобоство, платформонезависимость, возможность тестировать стратегии, множество удобных вспомогательных функций — реализована отправка смс, e-mail, .....

Именно здесь всё лежит в ваших руках.

Нетрудно догадаться, что именно через Stock# в настоящее время у меня и реализованы все роботы. :)


Пост получился небось опять сумбурным и очень длинным. Спасибо тем, кто дочитал. :)

Продолжение следует… (а надо ли? :) )
64 Комментария
  • rusalgo.com
    13 апреля 2011, 22:26
    отличная статья!
  • dk777
    13 апреля 2011, 22:30
    конечно давай продолжения, неплохо было бы какие нить простенькие уроки показать))
  • Вадим
    13 апреля 2011, 22:31
    Сам ниписал бота именно с помощью Stock#.
  • Deleted
    13 апреля 2011, 22:36
    >Я знаю, что многие под TS Lab покупают сервера отдельные с 8 ядрами процессора и 8 Gb оперативки.
    А еще бабки на лавке много чего говорят.

    Вообще, из аргументов что надо писать робота полностью самому(без среды) принимается только аргумент что надо работать с очень высокой скоростью. В TSLab будет некоторый оверхед. Я правда тиковых стратегий еще не реализовывал, поэтому скажем так, аргмуент потенциально весомый. Но надо сделать бенчмарки прежде чем утверждать, что это не возможно. У вас этих бенчмарков, я так понимаю — нет.

    Кстати, пересчет в TSLab гибко настраивается. Есть режим пересчета по сделке, а не по интервалу.

    Я писал голого робота на c# под АльфаДирект. Это сложнее, а главное нету никакого смысла все усложнять.

    Аргумент привязки к TSlab тоже не выдерживает критики. Портирование робота под другую платформу со сходными влзможностями занимает несколько дней вместе с тестированием.

    Stock# в принципе неплоха, но лишняя абстракция — это потенциально лишние баги. И снова усложнение.

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

    «Роботов» которые используются большими организациями типа инвест-банков мы не берем. Это частному трейдеру просто не потянуть.

    У меня работают две стратегии сейчас под VirtualBox: 1 ядро, 1 GB памяти. Нагрузка минимальная.

    В TSLab например вполне себе полноценный c# и возможность цеплять любые готовые библиотеки. При этом вы имеет среду запуска, отладки, тестирования и эксплуатации. Плюс у вас уже есть GUI для графиков и прочего.

    Вот простой пример. TSlab предоставляет thread-safe среду для вашего робота. Когда же выпишите сами, то вам надо быть приличного уровня программистом, чтобы управляться с несколькими потоками, синхронизацией, обработкой сетевых ошибок и т.д. и т.п. Как правило среди программистов-прикладников, которых большинство среди тех кто делает роботы, таких не очень много(их и в профессии то немного).

    Кстати, еще один минус stock# что оно требует еще и терминала. TSlab, например, не требует. Это еще минус один уровень сложности и багов.
  • Deleted
    13 апреля 2011, 22:40
    Кстати, а в чем проблема прикрутить внешний storage для тиковых данных в TSLab/WealthLab?
      • Deleted
        13 апреля 2011, 22:53
        Ну значит я не понял смысла этой фразы:

        >Попробуй на Wealth-Lab напиши стратегию на тиках, которая будет хранить дневную историю и считать определённые значения по объёмам / дельте / хреньте /

        В чем тут bottleneck?
          • Deleted
            13 апреля 2011, 23:04
            Вы так и не сказали в чем bottleneck TSLab?

            Во что вы упираетесь при использовании TSlab? В диск, в память, в процессор?

            >Всё сравнивалось и тестировалось — то что есть у меня сейчас работает в сотни раз быстрее.
            Покажите бенчмарки общественности тогда и код бенчмарков(без алгоритма).
              • Deleted
                13 апреля 2011, 23:23
                Ну а с чего вы взяли что это TSlab виноват?

                Я не знаю ни одной стратегии на тиках. Я вам еще раз предлагаю. Давайте алгоритм, вы пишите его на stock#, я на TSLab. Потом делаем бенчмарки и смотрим в чем затыка :-)
                • Евгений
                  13 апреля 2011, 23:24
                  > Я не знаю ни одной стратегии на тиках.

                  Это не говорит о том, что их не существует)
                  • Deleted
                    13 апреля 2011, 23:26
                    Да нет, вы не поняли. Мне просто предлагают реализовать такую стратегию, а я просто их ни одной не знаю. Предлагайте алгоритм, я реализую и можно будет сделать бенчмарки.
                    • Евгений
                      13 апреля 2011, 23:39
                      Я не смогу составить конкуренцию, поскольку не программирую на Stock#, но стратегию могу подсказать показательную и ресурсоемкую. Если Саша захочет, то пусть попробует посоревноваться)
                      Стратегия заключается в том, чтобы торговать пересечение 2х скользящих средних по свечам, построенным не на привычном нам времени, а так — допустим в каждой свече 1000 проторгованных контрактов, Open — цена первого контракта из тысячи, Close — последнего, при этом если Close свечи n-1 и Open свечи n приходятся на одну и ту же сделку, то весь объем достается свече n-1, а n-ная свеча начинается со следующей по порядку сделки. То есть в свече может быть больше, чем тысяча контрактов. High и low определяются как обычно.
                        • Евгений
                          13 апреля 2011, 23:48
                          Ну это только под плазой наверное будет преимуществом)

                          Я просто предложил что-то, что будет жрать ресурсы для просчета. Ну и ты учитывай, что у тебя опыт уже в деле реализации по объемам) Скажешь потом какие параметры понравились, если что)
                      • Deleted
                        13 апреля 2011, 23:46
                        То есть здесь надо мониторить тиковые объемы и делать из них свчеи на лету по описанным правилам?

                        А можно пример?

                        Вот например, есть такие тики:

                        194.020 — 1001
                        193.000 — 100
                        193.004 — 200
                        193.006 — 999
                        193.007 — 2000

                        Какие тут будут свечи в формате OHLC?
                        • Евгений
                          13 апреля 2011, 23:55
                          194020 194020 194020 194020
                          193000 193006 193000 193006
                          193007 193007 193007 193007

                          Это гэп. Для того, чтобы быстро избавить задачу от таких проблем можно на самом деле либо увеличить объем до 50 000 или 100 000 например, либо ограничиться интрадеем. Первое лучше на мой взгляд из-за влияния на ресурсы)
                          • Deleted
                            13 апреля 2011, 23:58
                            Я вижу потенциальную проблему с тиками в TSlab только в том, что там тупо будет out of mem. Я не очень хорошо знаю dot net, но думаю что оно сильно на java/jvm похоже в плане потребления памяти. Поэтому я и предположил выше, что возможно надо будет сделать свой storage который будет хранить данные в более компактном виде.
                          • Deleted
                            13 апреля 2011, 23:59
                            Спасибо за стратегию. На днях поковыряю ее на предмет использования в TSlab. Сделаю отдельный пост по итогам.
                            • Евгений
                              14 апреля 2011, 00:16
                              Незачто, было бы действительно интересно если бы вы и Саша написали пост об итогах)
  • Евгений
    13 апреля 2011, 22:44
    «Смотрите. У вас может быть баг в алгоритме, а среде запуска, в слое между средой и брокером, у брокера, на бирже. Зачем еще больше усложнять?»

    А можно как-то перепечатать эти буквы, а то мысль не ясна совсем)

    Stock# в любом случае будет выигрывать у любого решения, которое привязано к конкретному брокеру, поскольку у любого брокеры бывают разрывы) А то, что что-то проще на финансовых рынках преимуществом не является совсем, потому что СРАЗУ лишает преимущества))) Поимте, для того чтобы много зарабатывать на рынке нужно быть одним единственным кто знает фишку!
      • Евгений
        13 апреля 2011, 22:50
        А интерес у нас один — купить остров)
    • Deleted
      13 апреля 2011, 22:51
      Stock# добавляет еще один уровень абстракции, а значит и вероятность ошибки больше. Принцип KISS вам что-нибудь говорит?

      А при чем тут разрывы-то? Как Stock# помогает их избежать?
        • Deleted
          13 апреля 2011, 23:01
          Я не пропагандирую, я веду дискуссию.

          >позволять:
          >2) перегружать роутер если он завис;
          >3) разрывать интернет соединение если оно висит и подключать другое;

          Это не задача торгового робота или алгоритма. Это задача иного уровня ответсвтенности. Может быть вы еще в роботе будете мониторить состояние железа? :-)

          По-поводу организации failover я тоже расстраиваюсь. Пока вот достаю разработчиков TSlab на эту тему. Но в принципе сделать оповещалку о том что произошло что-то плохое на смс я могу хоть сейчас. И даже могу организовать схему переключения интернет канала(сложно но могу). Просто это не задача робота еще раз. Это задача _инфраструктуры_. Робот должен просто корректно возобновлять работу, с чем собственно TSLab вполне справляется(можно перезапускать программу в любой момент).
            • Deleted
              13 апреля 2011, 23:10
              >TS Lab — не ещё ли один уровень абстракции, от которого вы хотите уйти?
              У вас есть TSlab и есть брокер, между ними исопользуется тот или иной интерфейс. Например transaq. Терминала не надо.

              >2) Программа TS Lab если зависнет сама перезагрузится и сама перезапустит роботов?
              Есть перезагрузка по расписанию. Но еще раз failover — это не задача торгового агоритма. А создание железобетонной инфраструктуры — это отдельная тема, которую можно обсуждать, но отдельно.
                • Deleted
                  13 апреля 2011, 23:22
                  >Вопрос «Чем TS Lab лучше своей программы + использования библиотеки Stock#?» остался без ответа :)
                  Связка проще и требует значительно меньше времени и денег, чтобы запуститься в production.

                  Если бы у меня были миллионы в роботах, наверное failover я бы сделал. Но для этого не обязательно сразу бежать и переписывать все на stock#. Сейчас у меня идет стадия бета тестирования, поэтому сумма пока не большая. Пока, мои алгоритмы не могут переваривать больше 20-30 контрактов в сделке(есть еще над чем поработать).
                    • Deleted
                      13 апреля 2011, 23:33
                      Без бенчмарков и конкретики далее дискутировать не вижу смысла.
          • Евгений
            13 апреля 2011, 23:09
            Если возлагать задачу восстановления соединения на инфраструктуру, то в инфраструктуре возникает дополнительный блок, который может нарушить принцип KISS уже на инфраструктурном уровне.
            Ответ как обычно — единого решения нет. TSLab скорее подойдет для тех у кого меньше экспертизы в C# и нет желания развивать данный навык.
            • Deleted
              13 апреля 2011, 23:17
              Не нарушает, потому что принцип говорит делай просто, но не проще чем нужно :-)

              Я не видел ни в одном профессиональном трейдерском продукте в инвестбанке, где я работал, чтобы вещами типа пропадания интернета или падения программы или недоступности того или иного сервиса занималась программа-клиент. Это нонсенс. Если вам надо построить инфраструктуру 24/7, то это делается на уровне ниже.

              Теперь по-поводу TSlab. Я бы сам не отказался от обработчика разъединения с сервером брокера. По этому поводу как раз и пинаю разработчиков, как и по-поводу встроенного failover. Но в прицнипе его можно сделать и самому.

              Простой гипотетический вариант.

              Держать на соседнем компьютере копию образа с TSlab. И при отваливании TSlab и долгом не подключении запускать копию, настроенную например на другого брокера.
      • Александр Житницкий
        13 апреля 2011, 22:55
        думаю он имел в виду не в сымсле избежать разрывов
        а в смысле иметь возможность их обработать в своей программе
      • Евгений
        13 апреля 2011, 23:00
        KISS это группа такая, в которой участники себе лица побелкой мазали и у них видимо не было принципов :)
        Да, я понимаю, что это лишняя прослойка, но она оправдана и вот почему — Stock#, являясь платформой независимой от брокера позволяет запрограммировать автоматическое переключение на другого брокера во время сбоев у основного и захэджировать позицию. Только представьте себе хэдж Финама Открытием :) Или более сложные комбинации) Хотя конечно не у всех тут может возникнуть такая потребность, тут принято херачить на всю маржу;)
  • VpnS
    13 апреля 2011, 22:49
    думаю, главное, чтобы алгоритм работал.
    язык — дело десятое
  • eexproducer
    13 апреля 2011, 23:02
    Оч познавательно, продолжай еще!
    А спор послушать так вообще в тему — я как раз думаю куда переходить дальше с Qpile. И у меня как раз вариант, что С++ изучал в инсте. Правда на среднем уровне.

    А след часть будет?
    — типа примера простейшей проги, МА пересекает цену, со скринами как что выглядит, какой софт надо поставить, где скачать библиотеку, как взаимодействовать с quik'ом и т.п.?

    имхо, было бы очень актуально.
  • S.One
    13 апреля 2011, 23:08
    да, тема интересная и пост нужный. не бросайте это дело
  • Deleted
    14 апреля 2011, 01:43
    Кстати, почитай более подробно про архитектуру и посмотрев немного API я увидел, что stocksharp просто дает вам возможность создать упрощенный вариант инфраструктуры, которой по сути и является TSLab. Это конечно гибче, но и значительно сложнее. То есть даже для профессионального программиста реализовать все это с ноля, покрыть тестами и вывести в production — задача не тривиальная. Вопрос. Может быть уже есть open source реализация такой структуры, чтобы человек не начинал с ноля, а реализовал бы условно говория только интерфейсы, которое относятся к Strategy?
    • Deleted
      14 апреля 2011, 01:50
      почитав*
    • toyan
      14 апреля 2011, 03:19
      OpenQuant от SmartQuant ltd.
  • Deleted
    14 апреля 2011, 01:47
    И вот, кстати, можно вполне себе connection events отслеживать также:

    www.tslab.ru/docs/api/interface_t_s_lab_1_1_data_source_1_1_i_connectable.html
  • cyberpunk
    14 апреля 2011, 03:56
    Да, Александр — присоединяюсь с просьбой обрисовать на русском языке как это создается, очень помогла-бы блок схема всей связки с подпрограммами и примером кода и как это все соединить воедино.
  • Truman
    14 апреля 2011, 09:03
    Поддерживаю cyberpunk. Было бы здорово взять какую-нибудь простую стратегию, ну например, тупо EMA за 5 дней, клоза выше -> купили на 80% от капитала, клоза ниже -> продали на 80%. И вот бы с самого начала, от кода, теста до подключения к продакту.
    p.s. пост отличный, спасибо Александру.
    p.p.s Пожелание Марту -> вот бы сделать какую-нить кнопку — «пост в избранное»
  • xTestero
    14 апреля 2011, 12:56
    у S# код открытый?
  • Троль тролей
    11 мая 2011, 02:22
    да всё открыто.
    Вы на бумаге можете написать, как должно работать (как Вы бы в идеале работали)?
    Если нет не думайте о роботах. Вам надо сначала хотя бы в ручном трейдинге систему поиметь своей торговли.
    Если да — то стоит на бумаге распиать просто: всё основано на уловиях «Если Х, то У, иначе Z». и всё. Дискретно. ДА или НЕТ. Да и Нет вызывает новую цепь «Да и Нет» но уровнем ниже (если не предусмотрено возвратом на самый первый уровень определить ДА и НЕТ)
  • Popiros
    25 ноября 2020, 20:15
    Здравствуйте! Есть задумка автоматизировать торговлю по пересечению скользящих средних и есть много но. Поможете сделать робота на qpile или lua
  • Popiros
    26 ноября 2020, 15:59
    Может посоветуете кто это делает? Адрес ссылку.

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

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