Не знаю, задумывался кто-либо из вас о создании собственного «чудо-робота» для торговли, а у меня такая идея возникала неоднократно. Единственное, что останавливало – незнание основных принципов создания алгоритма, да и с программированием как-то не очень сложилось. Но если цель поставлена – ее необходимо реализовать.
Мы знаем, что сегодня есть несколько вариантов создания робота для торговли – на базе торговых площадок (некоторые из них позволяют разрабатывать свои алгоритмы торговли), на базе хорошо известного Excel, с помощью специального ПО вроде WealthLab или MetaStock и, конечно, написание программы на одном из языков программирования. Выбор здесь действительно широк - C++, Delphi, Java, VB, C# и прочие. Но какой язык больше всего подойдет для создания качественного робота?
На самом деле, вопрос уже поставлен неправильно. Идеального языка программирования для написания программы алгоритмической торговли не существует. Очень важно при создании своей системы ориентироваться на целую группу факторов, о который пойдет речь ниже. Только путем глубокого анализа можно подобрать для себя наиболее подходящий инструмент. В данной статье мы кратко пройдемся по ряду основных тонкостей создания советника.
Что должен делать ваш робот?
Перед созданием алгоритма вы должны четко понимать функции будущего робота. Определитесь, какие задачи будут возложены на систему: необходим ли учет риска менеджмента, понадобится ли модуль конструктора портфолио, будет ли предусмотрено тестирование и так далее. Только после составления полного перечня задач можно переходить к дальнейшему шагу.
Виды стратегий
Учтите, что стратегии делятся на два основных вида – те, что генерируют сигналы, и стратегии исследовательского характера. В первом случае алгоритм программы должен четко знать, когда производить покупку, продажу, посылать приказы и так далее. Для такой стратегии может понадобиться высокий уровень производительности, хорошая ширина канала, отсутствие различных задержек.
В случае с исследовательским алгоритмом основной упор необходимо делать на исторических данных. Такой метод часто называется бэктестингом. При формировании данного модуля необходимо учитывать две составляющие – алгоритмическую сложность программы и объем информации. В некоторых случаях эффективность исследовательской стратегии зависит от числа ядер процессора и его производительности.
Тип стратегии
Определитесь, на каком рынке вы будете работать, потребуется ли подключение внешних поставщиков, какой будет частота операций и их объемы. К примеру, для работы с акциями низкой ликвидности на американском рынке необходимо использовать совершенно иные принципы, чем в случае с высокочастотным алгоритмом при работе на
рынке фьючерсов.
Проанализируйте доступность подключения к системе поставщика, скоростной режим передачи данных, структуру АРI, возможности сохранения важной информации и так далее. Если организовать доступ к нескольким системам одновременно, то это только плюс.
Учтите, что для качественной обработки большого объема данных понадобится надежный торговый «двигатель» и бэктестер. В этом случае идеальным вариантом будет С++, а в некоторых случаях и вовсе можно использовать возможности доступного Assembler.
Создаем исследовательскую систему
Создание такой системы – довольно трудоемкий процесс и здесь без IDE вроде R Studio или MathLab будет сложно обойтись. Важно выбрать язык, который позволит проводить полноценное тестирование кода и даст необходимое быстродействие. В этом отношении есть два достойных языка – С# и С++. Их преимущество – наличие достаточного объема инструментов для полноценной отладки готового алгоритма. Есть также вариант с использованием MathLab или R Studio, созданного на базе языка R.
Если количество параметров при бэктестинге очень большое, то хорошо себя проявляет С++. Возможен вариант с использованием Python, но в этом случае необходимо использовать библиотеки NumPy/pandas.
Конструктор портфолио
При создании своей системы не стоит забывать о важности конструктора портфолио, который позволяет выделить наиболее важные сделки и совершать только те из них, которые приносят максимальную
прибыль. Чтобы этого добиться, алгоритм должен учитывать целый ряд нюансов – класс актива, тип компании, особенности акций,
волатильность и так далее. Здесь удобнее всего применять библиотеки для С++ - LAPACK, uBLAS и NAG.
Торговый движок
При выборе языка программирования с учетом особенностей будущего движка необходимо исходить из основных задач – получения «чистых» торговых сигналов, риск-менеджмента, конструктора потфолио и так далее. Чаще всего необходимо АРI или работа через протокол FIX. Следовательно, при выборе необходимо провести хотя бы небольшой анализ качества АРI – производительности, объема документации, необходимости применения дополнительного софта и так далее.
Многие брокерские АРI работают на Java или С++. Но даже при работе на этих языках систему желательно тестировать перед применением. В случае если есть ошибки в реализации системы, могут возникнуть проблемы с производительностью, что в случае с данным видом торговли очень критично. Таким образом, при написании торгового движка лучшим вариантом будет применение Java или С++.
Производительность
Ключевым аспектом для любой торговой системы является ее производительность, под которой понимается целый ряд факторов – скорость выполнения, качество канала связи, наличие сетевой задержки, масштабирование и так далее. В этом отношении отличный вариант применение таких языков, как MatLab, Python, C++, Java и R. Их преимущество – наличие высокопроизводительных библиотек.
При создании качественного робота необходимо сразу решить проблему задержек, которые могут иметь место при обращении к базе данных, генерации торговых сигналов, проставлении приказов и так далее. Чтобы исключить неприятные моменты, желательно провести оптимизацию на уровне ядра. Нельзя забывать о важности кэширования и динамического выделения памяти (на Java и С# с этим проблем не возникает).
Отладка
Еще один важный момент – возможность полноценной отладки уже готовой программы. Здесь выделяются два языка – Java и С++. В них вопросы отладки и тестирования раскрыты лучше всего.
Выводы
Таким образом, выбор языка программирования для торговой системы – это трудоемкий процесс, где не существует ни одного на 100% идеального варианта. Здесь важнее всего с умом подойти к выбору, учесть поставленные задач, построить качественную систему и, конечно, изучить язык (если это необходимо). Удачи.