Сейчас выдалась свободная «минутка», и я решил попробовать принести немного пользы начинающим трейдерам-программистам.
Кто является целевой аудиторией данного топика?!
1. Вчерашние студенты IT-специальностей
2. Уставшие или выгоревшие IT-специалисты с опытом
3. IT-специалисты-пенсионеры, для которых садовый сезон подошел к своему логическому завершению
4. Остальные, кто имеет навыки программирования и интересуется трейдингом
Теперь, кто не является целевой аудиторией.
1. Опытные трейдеры-алгоритмисты
2. Инвесторы — те, кто покупают активы и держат
3. Трейдеры-фундаменталисты и теханализаторы
Это не потому, что я считаю их способ торговли ошибочным или сомнительным, а потому, что для одних это будет банально, а для других мало интересно в принципе.
Кроме того, хочу отметить, что это лишь один из подходов к автоматизации торговли, но далеко не единственный.
Шаг 1. Самоопределение.
Если инвестирование вам не очень интересно, но у вас есть некий капитал, то просто отнесите средства в банк под процент.
Если для вас актуален вопрос сохранения нажитого непосильным трудом, то купите объект недвижимости.
Если вас интересуют вопросы инвестирования на долгий срок, то купите акции или облигации и держите, получая купоны и дивиденды.
Если у вас мало свободных средств, но есть навыки программирования, то попробуйте себя в автоматизированной торговле. Что значит попробуйте?! Это означает, что есть естественные причины, которые этому могут препятствовать. И первая из них — свободное время. Большую часть своего времени мы тратим на работу и сон. Остальное на семью — детей, жену, родителей. Еще какую-то часть на еду, друзей и совсем немного на себя.
Алгоритмический трейдинг требует времени. Сколько?! Много. Точно не скажет никто. У всех разные стартовые возможности — уровень образования и интеллекта. Но времени потребуется все равно много. Если вы не обладаете свободным временем, значит сразу идем в инвесторы и пытаем удачу там.
Если вы относительно молоды (хотя это совсем необязательно), у вас нет семьи, вы можете после работы позволить себе «вторую» смену… Или если вы готовы посвятить свои выходные кодингу или чтению техлитературы… Или сделать паузу по вашему основному месту работы (что не рекомендую, но делал неоднократно сам)… Или если вы пенсионер и мозг ваш еще не раскис и сохранился хоть какой-то интерес к научным (или псевдонаучным) изысканиям… то можно попробовать себя в алгоритмической торговле. Если у вас на работе есть временные «окна», то тоже можно попробовать, но как правило, продуктивность таких попыток не впечатляет, а вот на основной работе точно скажется негативно.
И важный момент! Не думайте о профите. Думайте о системе и ее будущей технической реализации. И не торопитесь!
Шаг 2. Выбор брокера?!
Это не значит, что вы должны бежать и открывать брокерский счет, но вы должны получить начальное представление о том, какие бесплатные (это важно) интерфейсы к биржевым торгам они предоставляют. Оценить их тарифы и комиссии на разных рынках (основной раздел счета у брокера — фондовый, долговой, валютный и, особняком, срочный). Ну и понятное дело — если вы хотите провести такой анализ, то какой-то бэкграунд того, как устроена торговля на бирже, чем торгуют и т.п. должен все-таки быть. То есть какие-то книжки должны к этому моменту быть прочитаны, а также желательно, но необязательно, чтобы был небольшой торговый опыт (почувствовать что значит выставить заявку, снять ее или исполнить).
То есть цель этого этапа выбрать тариф без абонентской платы и бесплатный торговый терминал. При выборе терминала важно уделить внимание, чтобы он поддерживался разными брокерами и уже продолжительное время. Это позволит в будущем легко переходить от одного брокера к другому, при желании.
Так ли нужен брокер, чтобы начать?! На самом деле нет. Например (не в целях рекламы), компания ARQA предоставляет доступ к демо-торгам через торговый терминал QUIK, который поддерживают многие брокеры и который уже существует и развивается (ну не особо развивается, конечно, но это даже в плюс — стабильность) продолжительное время. Скачать дистрибутив у них можно на сайте, а затем и получить доступ (ключи). По другим терминалам не скажу. Не исключаю, что есть нечто подобное и у других производителей.
В общем начинать писать свою торговую систему можно и без счета у брокера. Здесь же можно получить и навыки выставления заявок в ручном режиме. Я бы даже рекомендовал начинать именно с этого, а затем уже плавно переходить на терминал брокера. Демо-торги у ARQA отличаются от реальных торгов набором инструментов, их параметрами, интенсивностью, временем проведения. Даже перейдя на терминал брокера совсем необязательно заключать реальные сделки. Вы можете предусмотреть в своей будущей системе возможность заключения виртуальных сделок на основе реальных данных.
Шаг 3. На чем писать?!
Это ответственный момент. Неверный выбор инструментария может привести к потере времени и полному сворачиванию трейдерских потуг. Если вы пишете на основной работе на высокоуровневых прикладных языках (например 1С, SQL, Java-фреймворки под web-разработку и т.п.), то лучше приготовтесь освоить что-нибудь пониже. Опускаться до C или C++ острой необходимости нет, но что-то C#-подобное или Java-подобное имеет смысл рассмотреть. Есть и специализированные языки. Например, многие используют язык и библиотеки самого терминала. В упомянутом выше QUIK-е это LUA. Но любой встроенный язык — это всегда потенциальные ограничения, с которыми рано или поздно приходится сталкиваться. Кроме того, не стоит забывать, что в идеале ваша торговая система должна быть независима от терминала или относительно легко переносима на другой (ну это в идеале).
Глубокое освоение нового языка не требуется. Например, в C# достаточно освоить базу (классические конструкции процедурных языков, классы, коллекции, события). Ну и важная часть — потоки. Вы должны понимать суть работы потоков и управления ими. Как частный случай, понимать принцип работы однопоточного аппартамента (это когда методы класса вызываются самим экземпляром в своем потоке и ни один поток извне не может обратиться к методу напрямую, только через proxy-вызов). Плюс немного знаний по интеграции DLL-библиотек в свои приложения (примеров в сети достаточно).
Можно ли писать на современных и модных языках?! Смотря какая цель. Я подразумеваю, что начинающий алгоритмист не имеет четкого видения стратегии будущей торговли. Если попытаться взять условный Python и задаться целью прикрутить AI к своей системе без понимания того, на чем, собственно, и как будем зарабатывать, то это кажется бессмысленной затеей. Можно ли скачать исторические данные по инструменту и на них натравить умные библиотеки AI с целью выявления закономерностей? Можно. Здесь не к языку или библиотекам вопросы, а к вашему опыту. Достаточно ли вы подкованы математически, интеллектуально, и обладаете пониманием того, что ищете и что делаете. Я вот, например, не специалист. Для меня AI — апроксиматор и не более того. И если бы мне пришлось осваивать сначала все прелести AI-библиотек для поиска закономерностей, а потом еще писать торговую систему, то процесс явно затянулся. Мы же сейчас пытаемся пройти коротким путем, проторенной дорожкой.
Следует понимать, что в процессе создания торговой системы (не путать с торговой стратегией) вы можете (но не обязаны) параллельно исследовать исторические данные (не важно на чем, на VBA for Excel, Python, или более специфических языках/платформах), читать спецификации на инструменты, правила выхода на исполнение контрактов у вашего брокера, строить и проверять гипотезы. Но если у вас не будет работающего приложения (торговой системы), способной проверить вашу гипотезу на реальных торгах (выставлять и снимать заявки, проще говоря), то ваши многочисленные изыскания на «свечках» так и останутся гипотезами. К тому же, как показывает практика (моя, не ваша), очень многие гипотезы, не имеющие строгого математического обоснования, не более чем выдавание желаемого за действительное, иными словами — подгонка.
Шаг 4. Как писать?!
Начинать от частного к общему. Например, сделать акцент на приеме данных из терминала. В моем случае это был QUIK и DDE-протокол. Торговый терминал состоит из окон, которые вы создаете и настраиваете сами. Чтобы ваше приложение (торговая система) могло оперировать этими данными, нужно научиться получать их из этих окон в режиме онлайн.
Далее можно заняться выставлением заявок из вашего приложения в QUIK и получением реакции (событий) на их исполнение (или не исполнение).
В итоге вы получите два разрозненых кусочка условно полезного кода, каждый из которых состоит из нескольких классов. Следующим этапом будет оформление их в некий промежуточный
слой обмена данными с терминалом. По сути, это сведение и «причесывание» того, что уже сделано.
Над слоем обмена данными с терминалом надо построить
интерфейсный торговый слой. Название может быть не самым удачным, но смылс этого слоя заключается в создании интерфеса, независимого от терминала, в который войдут методы выставления заявок, их снятия, события на заключенные сделки, снятые заявки, события на изменение котировок, баланса торгового счета и прочее.
Затем необходимо создать
интерфейс для торговой стратегии. Реализацией этого интерфейса может быть абстрактный класс с условным названием
Алгоритм. Все методы этого класса должны вызываться в его родном потоке, то есть экземпляр класса создает поток, в который любой другой поток (например, с уровня интрефесного торгового слоя, но не он один) может передавать данные только посредством прокси-вызовов. Этот процесс называется маршалингом. Я, например, не использолвал какие-то стандартные средства для маршалинга, а реализовывал свой (классическим способом — через очередь). Каждая реализация класса Алгоритм имеет собственный список инструментов, собственный список заявок, сделок и т.п. Алгоритмы друг о друге ничего не знают.
Поскольку торговая система — это приложение, то самым простым способом его реализации является консольный вариант (мы хоть и не торопимся, но хотим увидеть результат побыстрее). Консольное приложение подразумевает некий способ взаимодействия с ним. Самым простым способом взаимодействия является командная строка. Поэтому необходимо создать еще один
интерфесный слой контроля над алгоритмами. Этот слой ответственен за запуск алгоритмов, их остановку, мониторинг за их активностью, а также имеет набор сервисных функций, которые позволяют получать статистические данные по инструментам и о ходе торгов. Этот слой также интегрируется с другими сервисными слоями для логирования хода торгов (файл) или сохраниния результата торгов (инструментов, заявок, сделок, и прочего) в локальной базе данных в разрезе каждого алгоритма. Вся интеграция осуществляется посредством межпоточного взаимодействия, аналогичного описанному ранее для класса Алгоритм.
Естественно, необходимо предусмотреть сервисные классы по разным классам инструментов, заявкам, сделкам, в которых реализуется базовая логика расчета доходности, комиссий, открытых позиций и прочего, но все это уже помещается, как в контейнер, в класс алгоритма. Если вы собираетесь получать данные по свечкам и анализировать бары, то вам придется тоже создать свой сервисный класс и обеспечить всю расчетную часть. В этот момент может возникнуть вопрос, а может надо было все-таки изучать LUA и не городить огород?! Этот пост в целом предлагает читателю подумать и принять правильное (или неправильное) решение. Мне, например, анализ свечек пока не был нужен в торговой стратегии. Анализ свечек можно проводить на исторических данных в других инструментальных средах, то есть это отдельная исследовательская работа, которая позволяет сформировать некую идею. Но проверять эту идею придется в торговой системе. Например, можно взять два инструмента, акцию и фьючерс на нее, и визуально исследовать их график на разных тайм-фреймах, почитать спецификацию, почитать регламент брокера. Из спецификации понять, что к моменту экспирации цены сходятся. Из регламента — что ваш брокер не даст вам выйти на исполнение контракта. Из графика — убедиться, что цены при экспирации сходятся, но бывают и расхождения. Подумать и логически объяснить причину такого поведения. Посмотреть каким образом можно уменьшить риски — возможно стоит сменить брокера на другого, который предоставляет более удобный способ торговли фьючерсами и акциями с одного счета и т.д. Из приведенного примера понятно, что речь идет об арбитражной стратегии и для ее простой версии реализации свечки не нужны (и спички тоже).
Что касается производительности и нагрузки на компьютер. В свое время запускал около 20 алгоритмов одновременно и нагрузка на систему составляла не более 3-5% на слабеньком компе не помню даже какого года. Потребление памяти тоже было минимальным (ну тут все зависит от того какую логику накрутить и сколько данных напихать).
Шаг 5. Как использовать?!
Когда все необходимое написано можно приступать к опытной эксплуатации. Для этого следует создать новый класс, наследуя классу Алгоритм. На начальном этапе для проверки достаточно реализовать какой-нибудь простенький вариант алгоритма усреднения для нескольких заранее отобранных акций. Основная задача не получить прибыль, а совершать в автоматическом режиме сделки и наблюдать за системой. Не исключено, что и появится первая прибыль (или убыток). Разумеется будут возникать различные траблы, вы их будете решать, но в конце концов все начинает работать стабильно (если написано без спешки и продуманно).
Затем приходит черед создания второго алгоритма, посредством копирования первого. Вносим некоторые корректировки в параметры и получаем две работающие параллельно стратегии, но немного отличные друг от друга. Когда их становится *цать, приходит понимание ради чего все это затевалось.
Дальшнейшие, более «умные» стратегии и усложение самой системы сугубо зависит от вас. Но могу сказать, что создание простых алгоритмов и проверка их жизнеспособности в работающей торговой системой занимает не очень много времени, чем когда системы нет вообще.
Шаг 6. Тотальная автоматизация
Если вы работаете по основному месту, и ваша работа мешает торговому процессу, то автоматизируйте торговый процесс. Для вашей торговой системы необходимо создать оболочку на любом скриптовом языке, который будет запускать терминал, ваше приложение, связывать их вместе, запускать прием данных (начинать торговый процесс), останавливать торги в конце сессии, сохранять результаты торгов в локальной базе данных, перезапускать все это в случае сбоев (в основном сбоит канал связи и QUIK).
И да, не пользуйтесь Yota.
Никогда, никогда, ни при каких обстоятельствах, не пользуйтесь Yota-модемом. Не повторяйте чужих ошибок. Да, я пользуюсь, но давно хочу «завязать».
В идеале иметь оптику. Ну а если уж так сложились звезды, что нужен мобильный инет, то выбирайте других операторов.
Шаг 7. Вывод
То, что написано выше — не панацея. Можно взять Python или что-нибудь еще более заточенное под биржевые торги, выкачать данные с Финам или из того же QUIK-а и сидеть «шаманить» над ними, искать корреляции, раскорреляции и прочие фелляции. После чего взять за правило каждый день выгружать данные по интересующим инструментам, получать торговые сигналы и выставлять на их основе заявки (возможно даже вручную) в торговый терминал. Тоже вариант. Но вот меня такой расклад не устроил. Я за полную автоматизацию с возможностью находиться в рынке ежесекундно, чтобы можно было забирать случайные неэффективности. И помните, для создания прибыльных стратегий нужны две вещи — умение читать (спецификации, регламенты брокера, тарифы) и здравый смысл. Обилие умных книжек только отнимет у вас время — в них красивые формулы, но у вас вполне возможно не хватит понимания как их применять в биржевой торговле и где конкретно.
PS: Как там пишут в конце… все описанное выше не является торговой идеей. Так вот… как раз все, написанное выше, является торговой идеей. За вами остается лишь ее реализация.
PS2: Насчет моей торговли и ее прибыльности. Торговля ведется в автоматическом режиме, прибыль есть, но весьма скромная
Первое — полный фуфел! Второе — это дополнение к… РАБОЧЕМУ алгоритму!!! Вопрос тот же: где ЕГО взять?!