Хакерские Инструменты Для Торговли

Для того, чтобы провести наш хакерский финансовый эксперимент (а также заработать на нем деньги), нам понадобится программа, которая сможет проводить исследования, тестирование, обучение и торговлю по алгоритму.

Ни одна существующая сегодня программа не охватывает все эти области.

Однако можно объединить разные системы и попытаться решить проблему.

К счастью, есть пара подходящих инструментов.

По большому счету я буду использовать Zorro Trader и язык R, но иногда и другие инструменты.



Хакерские инструменты для торговли



Выбор языка

Диапазон языков программирования не так широк, как может показаться изначально.

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

Для реальной работы и исследований вам придется научиться программировать по-настоящему.

Еще меньше свободы в выборе языка программирования.

Всегда хочется взять язык с простым и красивым синтаксисом.

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

Однако все они в конечном итоге удивляются медлительности разработанной ими программы.

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

По сути, скорость алгоритма зависит от того, компилируется или интерпретируется язык, на котором он написан.

Например, C, Pascal или Java являются компилируемыми языками программирования.

Это означает, что программный код будет выполняться непосредственно на процессоре (в случае C, Pascal) или на виртуальной машине (в случае Java).

При этом интерпретируются языки Python, R, MATLAB, то есть код не будет работать сам по себе.

Это потребует своего рода переводчика.

Интерпретируемый язык намного медленнее и требует больше ресурсов ЦП и ОЗУ, чем компилируемый язык.

Но при этом они интерактивны, то есть вводить команды можно прямо в консоль.

Существуют также компромиссные языки.

Например, C# — это промежуточный язык между компилируемым и интерпретируемым.

Программа C# будет скомпилирована в промежуточный аппаратно-независимый код, который затем будет либо интерпретироваться, либо конвертироваться в машинный код, в зависимости от реализации.

C# примерно в 4 раза медленнее C, но в 30 раз быстрее Python. Ниже представлена таблица производительности двух тестовых программ, написанных на нескольких языках: решатель судоку и цикл умножения матриц размером 1000 на 1000. Результаты в секундах:

Язык Судоку Матрицы
С, С++ 1.0 1.8
Джава 1.7 2.6
Паскаль 4
С# 3.8 9
JavaScript 18.1 16
Эрланг 18 31
Питон 119 121
Рубин 98 628
Матлаб 621
р 1738
Почему скорость выполнения программы так важна для торговых систем? Разработка стратегии часто происходит эмпирически.

То есть вы ищете из множества вариантов подходящие параметры системы и каждый раз тестируете.

Предположим, что проверка одного параметра программы на языке C занимает 1 минуту.

В этом случае та же стратегия, но уже написанная на EasyLanguage, потребует на тест около 30 минут. На Python — 2 часа, а на R — 10 часов! Если бы я делал тест для своей статьи Трендовый эксперимент , тогда я бы еще ждал результатов.

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

Однако стратегии высокочастотной торговли обычно реализуются на языке C или непосредственно на машинном языке.

Даже компилируемые языки имеют большие различия в скорости из-за различий в реализациях торговли и синтаксического анализа.

Для примера я взял самую простую стратегию отсюда и протестировал его на разных торговых платформах (10-летний бэктест на тиковых данных) и получил совершенно разные скорости.

Zorro Traid: ~4 секунды (Lite-C, вариант C) MT4: ~110 секунд (на mql4, другой вариант C) MultiCharts: ~ 155 секунд (EasyLanguage, смесь C/Pascal).

Однако эти различия не столь критичны.

Есть один трюк, позволяющий преодолеть медленную скорость языка.

Даже интерпретируемые языки имеют библиотеки функций, часто написанные на C/C++.

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

Действительно, некоторые торговые системы могут быть запрограммированы с использованием этого так называемого векторного метода (вы увидите это ниже в примере кода R).

К сожалению, этот метод работает только с простыми системами и только для тестирования; он неприменим для разработки стратегии боевой работы.



Выбор инструментов

Zorro-Trader — программное обеспечение для финансового анализа и алгоритмической торговли.

Что-то вроде швейцарского армейского ножа, так как его можно использовать для всевозможных быстрых тестов.

Я выбираю его, потому что:

  • Это бесплатно (если ты богат))
  • Сценарии на C легко писать и выполнять очень быстро.

    Реализовать систему или идею можно буквально за 5 минут.

  • Открытая архитектура — вы можете добавлять все, что захотите, используя DLL.
  • Минимализм - только интерфейс для языка программирования
  • Позволяет автоматизировать эксперименты
  • Очень точный и реалистичный механизм, имитирующий реальную торговлю.

  • Встроенное управление портфелем
  • Есть все основные функции для обработки данных и статистические функции (большинство с исходным кодом).

  • Продукт постоянно развивается и поддерживается (новые версии обычно выходят каждые 2-3 месяца).

  • И последнее, но не менее важное: я досконально знаю эту платформу, потому что написал по ней учебник.



Хакерские инструменты для торговли

Пример стратегии, написанной на C — классическое пересечение простой скользящей средней (SMA):
   

function run() { vars Close = series(priceClose()); vars MA30 = series(SMA(Close,30));

Теги: #Финансы в IT #торговля на бирже #zorro #mt4
Вместе с данным постом часто просматривают: