До недавнего времени я испытывал торговые стратегии в программе WealthLab. Но на днях возникла потребность проверки её результатов. Поэтому состряпал частичный аналог на C++.
Проверка показала значительное превосходство самоделки по быстродействию и полное совпадение результатов с фирменной системой — до копейки.
Вот как выглядит скрипт на C# в WealthLab
for (int bar = 1; bar != Bars.Count; ++bar) {
if (IsLastPositionActive && (bar == Bars.Count-1 ||
Close[bar] > Open[bar])) {
while (ActivePositions.Count > 0)
ExitAtClose (bar, ActivePositions[0]);
} else if (bar < Bars.Count-10 && Close[bar] < Open[bar])
BuyAtClose (bar);
}
и его аналог на C++
for (unsigned bar = 1; bar != Count; ++bar) {
if (IsLastPositionActive() && (bar == Count-1 ||
Close[bar] > Open[bar])) {
while (ActivePositions.size() > 0)
ExitAtClose (bar, ActivePositions.front());
} else if (bar < Count-10 && Close[bar] < Open[bar])
BuyAtClose (bar);
}
На всё-про-всё ушла рабочая неделя — годы уже не те.
Правда, импорто-замещение не совсем полное — Microsoft Visual C++ всё-таки импорт. Более полное замещение было бы на открытом дистрибуте Liberica JDK (Java) или на совместимом с Java языке Kotlin. Выбор C++ обусловлен лучшей связью с Lua из Quik'а.
Почему самоделки так необходимы? — В сравнении с мощными фирменными продуктами самоделки дают наиболее полное управление расчётами. При любом сомнении можно разобрать алгоритм по самым элементарным шагам. В закрытом фирменном продукте такое невозможно и окончательный результат придётся принять на веру.
Выбор наиболее подходящего инструмента, такого как C++, Java-Kotlin или C#, даёт более высокую скорость счёта, необходимую при оптимизации параметров торговой системы. Полное управление распараллеливанием счёта, чтобы использовать все ядра процессора.
Авторитетнейший псевдоним А.Г. выбрал среду C# (Си-шарп).
PS Модный ныне Python имеет ничтожное быстродействие, а использование библиотеки Numpy, написанной на С, требует противоестественного подлаживания под его структуры. Простые в универсальном языке конструкции в Numpy могут требовать чрезвычайных усилий.
PPS Главный козырь Python — весьма удачная библиотека Keras-TensorFlow для построения нейросетей.
Начало ссылки
sourestdeeds.github.io/pdf/Deep Learning with Python.pdf Конец ссылки
«Deep Learning with Python 2Ed» Fransois Chollet
Однако, в прогонозировании временных рядов и биржевых цен нейросети работают хуже стандартных статистических методов
Начало ссылки
www.inf.u-szeged.hu/~korosig/teach/books/Jason Brownlee — Deep Learning for Time Series Forecasting — Predict the Future with MLPs, CNNs and LSTMs in Python (2018).pdf Конец ссылки
А самые усовершенствованные сети хуже более простых многоуровневых персептронов MLP.
Ахтунг! С-Л в интернет-ссылках заменяет дефис "-" символом тире!
А вспомогательные приложения — для вспоможения. Отладка стратегий или трудоёмкая оптимизация на лету по запросу из Quik через Lua-робот.
Как это можно соединить с Lua из Quik'а?
В сравнении с протоколом TCP/IP в программе-сервере не требуется явно заводить параллельный поток (thread) для связи с клиентом из Quik'а.
А связь через COM-интерфейс, как в AMI-broker, это вообще архаизм для 32-битовых систем.
Обычно базовый флоу бэктестинг простых стратегий и прочее запилить не сложно и не сильно долго. Но потом оказывается, что тебе ещё вот это нужно и вот это и вот это. И оно уже в сильно большее время на имплементацию выливается.
А какая в итоге разница в скорости работы?
Но никто не мешает реализовать параллелизм и более изощрённые методы.
А написание самого кода — те же усилия.
Полностью согласен! Базовый бэктест — это только вершина айсберга, а потом начинается самое интересное: нюансы учета комиссий, спредов, ликвидности, управление капиталом, стресс-тестирование на редкие события… и вот тут самописные решения проявляют себя на 100%.
По поводу скорости: если сравнивать со стандартными инструментами типа WealthLab, самописные решения на C++ действительно могут дать прирост в разы, особенно при брутфорс-оптимизации. Но параллелизм и алгоритмические оптимизации — это ключ. Вопрос в том, какие задачи в приоритете: максимальная гибкость или удобство работы.
Наша команда занимается алготрейдингом, алгоритмическим программированием и бэктестингом, поэтому можем закодить любые идеи, адаптировать их под нужный рынок и платформу. Если есть интерес и готовые тоговые идеи — можем обсудить детали!
4you.us/cdzv готовые торговые стратегии
4you.us/vytcdzvr закодим ваши торговые идеи