Алексей Ван <o-s-a.net>
Алексей Ван <o-s-a.net> личный блог
04 сентября 2014, 17:30

Древо знаний трейдера и алготрейдера. Версия 2.0 Часть 2

 Начало статьи: http://smart-lab.ru/blog/202392.php
 
5 Роботостроение
 
    Инструмент, при помощи которого алготрейдер создаёт своих роботов.
 
 Древо знаний трейдера и алготрейдера. Версия 2.0 Часть 2
 
    Рис.12 Способы создания МТС
 
 

    Основных способа три:
 
1 При помощи специальных визуальных редакторов;

2 При помощи языков, встроенных в торговые платформы;
3 Создание собственных приводов и платформ.
 
    Существуют также несколько гибридных способов написания роботов, вimg title=роде написания скриптов в Excelи использования библиотек, таких как StockSharp.
 
 
 
5.1 Языки встроенные в торговые платформы
 
    Способ создания МТС, некогда выведший алготрейдинг в массы. Во время создания робота предполагается использовать встроенные в платформы скриптовые языки.
    Qpile, Lua, MQL, EasyLanguage — наиболее популярные языки.
    Не очень технологичный способ создания МТС, обладающий множеством ограничений: по скорости исполнения, ограничению на кол-во заявок в секунду, одновременному просмотру многих переменных (отсутствует многопоточность), проблемам при тестировании и т.д.
 
5.2 Визуальные редакторы
 
    На сегодняшний день самый популярный способ создания МТС. Во время создания робота предполагается использовать некие визуальные способы проектирования роботов. Путём перетаскивания «кубиков» логики в панели управления платформы-каркаса.
 
5.3 Программирование
 
    Способ создания МТС, предполагающий написание собственных библиотек и каркасов для создания роботов.
 
    Процесс разработки торгового робота мало чем отличается от создания любой другой программы и включает в себя следующие этапы:
 
1.       Проектирование
2.       Программирование
3.       Тестирование
4.       Поддержка
 
    В большинстве случаев во время создания сложных платформ и программ, вроде Торговых роботов, эти вещи делают разные люди. Т.е. проектированием занимается один человек, а тестированием другой. Но в нашем случае все эти функции придётся взять на себя...
 
    Исходя из этого посмотрим из чего состоит программирование Торговых роботов, если исключить предметную область и по возможности отсечь всё лишнее:
  • Знание одного из языков программирования (С#, C++, VBA, Delphi...).
  • Знание одного из Пользовательских интерфейсов (UI).
  • Знание алгоритмов (в программировании это такие стандартные способы решения различной сложности задач).
  • Знание структур данных (это те которые списки, деревья и т.д., а не тип данных struct).
  • OOP (Объектно-ориентированное программирование).
  • OOD (Объектно-ориентированная архитектура приложения).
  • TDD (Разработка через тестирование).
  • Apiдоступа к торгам (штука, через которую так или иначе можно программно получить доступ к торгам).
 
Вот так это выглядит в кубиках:
 
Древо знаний трейдера и алготрейдера. Версия 2.0 Часть 2 
 
Рис. 13. Набор каких-то аббревиатур 
 
И обо всём по порядку.
 
Язык программирования. 
 
    Ну, тут всё просто. Для того чтобы писать торговых роботов подойдёт практически любой язык программирования. Единственное ограничение это возможность доступа из программы к APIдоступа к терминалу/бирже.
    Самым разумным выбором по моему мнению будет С#. Он невероятно прост в освоении и по скорости исполнения уже практически не уступает С++.
Моя статья о выборе языка: sib-algo.ru/?p=59.
 
UI(пользовательский интерфейс)
 
    Хороший интерфейс торгового робота должен содержать графики, всплывающие меню, панели с вкладками, диалоговые окна, тысячи кнопок и ещё много чего. Для этого существуют специальные Frameworkи которые позволяют делать интерфейсы быстро и эффективно. Для C# и других языков поддерживаемых .Netэто WindowsForms, WPFи ModernUIRuntime.
 
    По мне предпочтительнее WindowsForms. Дёшево и сердито. Первая технология для создания интерфейсов в .Net. Отсюда много книг и хорошая поддержка.
 
    Для WPF придётся выучить язык XAML, а у ModernUIRuntime (оно же Metro) отсутствует поддержка, т.к. технология новая, так же как есть вопросы к её скорости и приспособленности к этой задаче.
 
    WPFбыстрее обрабатывает графику, что по идее должно бы давать некоторое преимущество перед WindowsForms. Хотя профит этот не очень очевиден, т.к. модель по хорошему не должна во время торговли тормозиться об прорисовку интерфейса. Между тем при визуализации тестирования в WindowsForms  всё жутко упирается в прорисовку графика. Пытался перейти на WPF одно время, но забил, даже уже и не помню из-за чего. Из проблем вспоминается отсутствие стандартных richсредств работы с биржевыми графиками (если есть поправьте меня). В  WindowsFormsесть чудесная для этого штука: Chart. Вроде можно её интегрировать в WPFчерез окостыливание, но опять же это снижает скорость.
 
Алгоритмы и структуры данных
 
    Для того чтобы писать свои мудрёные, сложные и эффективные алгоритмы, надо сначала пописать простые и банальные. И уделить этому очень много времени. Частично этот вопрос разбирается во время обучения языку, однако далеко не полностью. Поэтому придётся отдельно качать несколько специальных книжек и писать сортировки пузырьком и расстановку ферзей...
 
OOPОбъектно-ориентированное программирование
 
    Данная концепция позволяет ускорить процесс разработки, а заодно меняет представление о мире, вселенной, второй мировой, Путине, будущем программировании и алгоритмах. На самом деле это очень важный момент не только для алготрейдера, но и программиста в целом. Видеть, писать и проектировать программу не в функциональном, а объектном ключе. Собирать программу не из методов, а из классов. 
 
OODОбъектно-ориентированная архитектура приложения


    После освоения OOPлогичным продолжением является изучение объектно-ориентированного дизайна. Данный скилл позволяет масштабировать и усложнять программу в любой её части, до бесконечности.
Моя статья рецензия на DesignPattern: smart-lab.ru/blog/164107.php
 
 TDDРазработка через тестирование
 
    Одна из «гибких» методологий разработки ПО. Поскольку ошибки в коде робота могут принести не иллюзорные проблемы. Придётся привыкнуть тестировать модули, прежде чем подключать их к работающим системам. Конечно, это довольно банально звучит, да и чего уж там, и сам иной раз рвусь испытать новую функциональность сразу в боевой системе. Но по-хорошему надо именно так делать.
 
 APIИнтерфейс программирования приложений
 
    Для того чтобы из своего робота посылать заявки на биржу и получать информацию о торгах, существуют специальные библиотеки / платформы / программы. Которые, не смотря на свои возможные отличия по замыслу, скорости и реализации, все называются API. По русски: Передаст. Их надо разобрать, изучить и понять, как это всё работает.
 
Моя статья о ApiQuikи SmartCom: smart-lab.ru/blog/199423.php
 
6 Заключение
 
 Древо знаний трейдера и алготрейдера. Версия 2.0 Часть 2
 
Рис. 14. Древо знаний трейдера и алготрейдера ещё раз
 
    Многие пункты конечно не равнозначны по глубине и сложности, но думаю общее направление и «опасность» задачи передать удалось.
 
    Жаль, что многие люди начинают изучение трейдинга, с мыслями о скорой прибыли и, надеясь получить что-то из рынка раньше 5 лет пребывания на нём. Надеюсь, этот пост поправит кое-кому его завышенные ожидания, а кого-то убедит в бессмысленности этого начинания.
 
    Напоминаю что это не истина в последней инстанции. Я простой человек однозначно супермен, но мог что-то забыть, а чего-то и вовсе не знать. Профессионалов прошу в обсуждение. В следующих версиях (если они будут) адекватные мнения будут учтены.

17 Комментариев
  • SECRET
    04 сентября 2014, 17:33
    :DDD никогда не думал что простой процесс можно так замудрить.
    У меня примерно вот так выглядит:
  • Сергей Гаврилов
    05 сентября 2014, 02:42
    Ахренеть…
  • Сергей Гаврилов
    05 сентября 2014, 05:15
    То что Вы написали, хорошо для диплома и т.п. Даже для практического применения полезность этих таблиц сомнительная, а уж для чтения на Смарте…
  • Николай Лазарев
    05 сентября 2014, 11:21
    Хорошо написано. Но практической пользы роботорговцам ноль.
    В качестве статьи в профильном журнале очень даже ничего и добавит автору «веса» на ниве специализированной журналистики.
      • Николай Лазарев
        05 сентября 2014, 17:12
        Алексей Ван, Скорее «курилка трейдеров», чем специализированный ресурс.
  • Анзорик
    05 сентября 2014, 11:58
    Хочу написать робота для сервера под линуксом. Квик и смартком сразу получается отваливаются. А plaza говорят стоит жутких денег.
    Какие-нибудь еще есть варианты?
    • professor facepalm
      05 сентября 2014, 12:18
      Анзорик, можно написать небольшой проксик под винду, который будет транслировать данные и команды между линуксом и квиком-смарткомом.
    • SECRET
      05 сентября 2014, 12:57
      Анзорик, 4000р/мес для вас много?
      • Анзорик
        05 сентября 2014, 13:25
        SECRET, так в нашем ауле это завидная зарплата же.
  • SoftAlgoTrade
    05 сентября 2014, 15:03
    Доброго времени суток.
    Алексей Ван, мне кажется, что Ваша классификация не совсем корректна.
    Наверное, нужно начать с того, что считать торговым роботом?
    Скрипт из 3 строк на VBA, Qpile или 20 тысяч строк кода на С++? Мне кажется такое сравнение не уместно. Поэтому я вообще не воспринимаю языки встроенные в торговые платформы и визуальные конструкторы.
    Почему Вы ставите Excel+VBA на один уровень с S#? Это огромная разница, даже если учесть, что S# так себе платформа.
    На текущий момент ни одна платформа не имеет нормально работающую гибридную структуру или визуальные конструкторы. Проектирование роботов в них это скорее борьба с багами и навязанными стандартами нежели роботостроение. Это попытка найти компромис между нехваткой знаний программирования и желанием алготорговать. В итоге ни то ни се.
    Я бы все вышеописанное отнес к блоку — поиграть в алготрейдинг.
    Тру алготрейдинг это только чистое программирование, максимум низкоуровневые оболочки.
    По программированию. Ваше деление на подклассы также не очевидное. В алготрейдинге вообще не обязательно иметь UI. Оно скорее уместно в теханализе.«Объектно-ориентированная архитектура приложения» — на мой взгляд это большое зло в алготрейдинге. По этому пути, к примеру, пошел S#. В итоге получается огромная грамоздкая хреновина. В алготрейдинге не стоит жертвовать скоростью ради красивой архитектуры. Трейдинг на столько разнообразен, что одной грибенкой его не причешешь.
    И почему API к торговым платформам вынесено в отдельный пункт? К ним как правило и осуществляется присоединение кода алготрейдера. Порой это неотъемлемая часть робота.
    Я бы на Вашем месте еще проработал классификацию. Как минимум в части роботостроения.
  • SoftAlgoTrade
    05 сентября 2014, 15:53
    Видимо мы говорим о разных понятиях API и требованиях к качеству софта. Как Вы верно заметили это всего лишь моя точка зрения) Удачного дня!

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

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