На чем чем только не писал стратегии — На VBA Excel, VB.NET (тогда еще так назывался), C#, C++. Не обошлось и без участия скриптовых языков Java Script, Lua. Не обошлось и без специализированных языков, R, например — вот где тягомотина по исполнению и большая помойка пакетов. Мож там и есть бриллианты, но кто будет искать бриллианты в помойке.) MQL4 -5 — эти, г… но полное — это не делай, туда не ходи — нах такие языки. Еще и другие были, всех и не перечислишь.
Лет, этак 5-7 тому перешел на Python (С++ тоже не забываю)). Python понравился резко и сразу. Стратегий на нем пока не писал, но моделировал много. Сейчас планирую сделать первую, для Binance. Ага, криптой торговать собираюсь. Я, так полагаю, что МОЕХ умер (или почти), и делать там абсолютно нечего. Умирал он долго и мучительно, аж с 14-го года. Жаль, вообще то, неплохой был рынок.
Итак, чем хорош Python. Это, в первую очередь, нулевой порог входа — вчера вы еще ничего не знали о нем, а сегодня уже нейросети и прочие machine learning применяете для своих задач. Да, с переменным успехом, но, ведь, применяете.) Не, ну, для тех, кто не в ладах с обычной логикой, любой язык программирования противопоказан, но не о них речь.
Всяких пакетов с самой разнообразной математикой море, все структурировано, все описано — бери, пользуйся. Такого количества и разнообразия библиотек на любой вкус и цвет ни для одного языка нет. Многие пакеты — это скомпилированные С++ программы, и о их быстродействии можно не беспокоится. Python здесь используется как язык сценариев, и его вклад в быстродействие минимален. Само совершенство. ©
Где-то читал, что в NASA Python основной язык программирования, а то, что критично для быстродействия, вначале моделируется и отрабатывается на Python, а потом отдельные куски кода переписываются на С++.
Многие причитают — ах, на питон нет тестера стратегий. Окститесь, ребята. Тестер стратегий не более чем цикл вида:
while(i < Iend):
# ваша стратегия
i = i +1
Все. Больше в тестере стратегии ничего нет. Получить любые данные из стратегии и потом посчитать нужные вам параметры, я полагаю, вообще не проблема. Я, скажем, получаю по каждой сделке больше 10--ти параметров. потом обрабатывайте как душе угодно, стройте графики (графики построить в Python тоже не проблема)) + вывод на экран массы параметров теста — тоже не меньше десятка. Короче, делайте что хотите.
Вот примеры графических результатов.
Это все перед и по результатам тестирования. У меня этих графиков море, с каждого теста. Здесь случайно выбранные.
Тест на ~200 тыс свечей пролетает за несколько секунд, включая все — компиляцию, получение данных из базы данных, построение индикаторов и, вестимо, работу самой стратегии + печать параметров и вывод графиков на экран. Быстродействия им мало.)) Смешно.
Теперь о быстродействии Python.
Первый вопрос — а на хрена вам быстродействие?
Если у вас HFT, вопрос отпадает — у вас арендованный или свой сервер на самой бирже, прямое подключение к бирже без инета по локальной сети, программа на С++ или Ассемблере, обработка видеокартой или даже своем процессоре, и прочие радости. Нет? Тогда быстродействия Python за глаза хватит.
Допустим, у вас интрадей и сделки по несколько минут. Так подать заявку из Python — это микросекунды, идти до биржи и обрабатываться биржей будет дольше. Сделка от нескольких минут? — и чего вам тогда миллисекунды? — опять до биржи будет идти дольше. Вклад в ваши прибыль/убыток мизерный.
Хорошо, вы играете на 5-15 минутах или на часах-сутках — здесь вообще миллисекунды не играют никакой рояли.
Если вы считаете иначе — ну, ну, ваше право, разумеется. Но если вы все-таки считаете иначе, то скорее всего, дело не в задержках, а в самой стратегии. Отсутствие задержек вас никак не спасет.
В общем, Python — это лучший выбор как для моделирования, так и для реализации торговых систем. За очень редкими исключениямя.
Че-то я еще хотел написать в защиту Python от нападок лохов, но пока писал, забыл. Если что, дополню.
PS Да, Python достаточно быстр, но если вы хотите по ходу пьесы выводить на экран много данных и еще и графики, то операции ввода/вывода в любом языке занимают много времени — самые длительные по времени процедуры. Их следует по возможности избегать в любой ТС на любом языке.
Python не только многопоточный, но еще и много пооцессорный (от слова процесс).
Кстати, прибыль, только один из многих критериев для ТС. И как оптимизировать?
надо считать форвард тесты.
лесенкой...
а возможно оут оф сампле собирать определенным образом)
Ну, в общем, да. Не на пустом же месте.
и это статистически доказуемо.
но конечно не идеально)
есть лучше способы нахождения out of sample.
форвард не лучший но статистически работающий.
и понятный обычным людям — заказчикам, начальникам.
У меня, слава Богу, нет клиентов и я не включен в клиентский бизнес.
еще +100..200% к питону.
и практически 50% от с!!! голого си без плюсов.
а еще он совместим прилично.
а еще оптимизация если вы немного через математику на нее смотрите то это разряженные матрицы и какой-то доводчик типа генетики или нейронки.
а это cuba и снова питон только теперь с видеокартой
Если нужно что-то ресурсоемкое, то добро пожаловать в С/С++, что Python по возможности и делает. Запустите это С++ из потока, и GIL вам без разницы.
Я писал, 200 тыс свечей, чтение данных + построение индикаторов, вывод картинок и числовых данных на экран пролетают за несколько секунд.
Ну, если вам потоки нужны, то большую либу Питон запустите в потоке, она наверняка на С++ сделана.
Вообще-то, если стратегия нормальная, то она малочувствительна к параметрам и оптимизировать особо нечего. Должна быстро пролететь.
а еще есть pipe name — именованные каналы в памяти как файлы.
только в памяти.
так они вообще при должном навыке на кластер распараллеливаются даже в винде 2000+ )
и еще от языка не зависят. записал на питоне а прочитал на с и результат в канал ответа другой)
а еще из другой машины доступны.
(виртуалки\докера\етс)
а это отделения генератора сигнала от исполнителя.
а это важно.
— доб проверки сигналов — они универсальны
— можно один раз написать фильтр на частоту сигналов,
… на все)
… на убытки, на размер позиции.
— ключи от аккаунтов
— разная отвественность\собственность генератора сигнала и исполнителя.
но и sql тоже подойдет.
по факу это копировщик сделок, только не с реального счета а с виртуального.
(а значит и с реального в комплекте если решатель читает чужой счет или сумму счетов)
и он разы быстрее самого питона.
www.pypy.org/
как раз там где нужна строгая типизация.
и хорошее распараллеливание.
ну и да голый с будет все равно быстрее.
но уже не в несколько раз. а раза в два. не более.
но разрабатывать то на питоне быстрее.
из коробки один поток это да.
распараллеливается на ядра процессора хорошо.
так что не только)
сама по себе?
вот ее и нужно структурировать перед этим.
или в процессе.
а это уже другой код.
Если нужна скорость, тогда идут плаза или фикс, коллокация биржи и пошло-поехало.
А так люто плюсую. Там где ХФТ — суровая оптимизация вообще всего, а для домашнего лампового бота скорости питона за глаза хватает.
— полученное нужных биржевых данных в режиме онлайн;
— выставление-снятие заявок;
— отслеживание позиций, как теоретических самой системы, так и в биржевой системе.
А просто получить эквити для перебираемых параметров и отобрать интересную и полезную — это все равно на каком языке высокого уровня программировать, если имел опыт хоть на одном. Причем быстрее всего это сделать на том, на котором был опыт.
Я дольше разбирался с адресацией двумерных массивов в VBA под Excel, чем писал собственно торговый алгоритм, а в C# перенес вообще быстро после того, как нашел alglib, заменивший мне расчет значений в VBA+ Excel по формулам, встроенным в последний. А почему быстро? Потому что опыт кодирования на С++ под DOS был.
Причем новые возможности по графике, интерфейсам и т. п. вещам даже не изучал — они мне не нужны. Разве что работой с базами данных озаботился, так как обмен с Excel чисто по кодированию показался сложнее.
Почему C#? Да потому что к нему написали (спасибо добрым людям) загрузку данных из любых таблиц квика по DDE. А перед этим я и выбрал Excel только потому что эта процедура для Excel делается нажатием пары кнопок в квике и нетинвесторе, который был моей программой интернет-трейдинга.
Самое смешное, что первого «исполнителя» заявок из VBA+Excel я написал через обмен с квиком через текстовые файлы (есть такая опция в квике). Но когда переписывал на С# решил «сделать круто» и потратил неделю на написание исполнителя с использованием транс2квикдлл. Но при переходе квика с 32-х битной версии на 64-х битную он сломался и я за полдня написал исполнителя через старый добрый обмен текстовыми файлами. Все работает, как часы. Возникла необходимость торговать через Транзак: узнал, что и там есть обмен через текстовые файлы: изучение синтаксиса и вписывание допстрок в существующий исполнитель заняло 1 день. И опять все работает, как часы. Понял одно: чем «кандовее», тем проще и быстрее пишется и работает надёжнее.
Питон только начал изучать и сразу скажу — мне нравится. А что до быстродействия, то (не считая ХФТ) не вижу, зачем оно мне нужно в области трейдинга. Квик точно более тормозной, чем питон или VBA.
Качаем из квика (нетинвестра) нужные данные-->обрабатываем в программе->посылаем команды в Квик (нетинвестор).
А чтобы не переписывать код алгоритма, для разработки и тестирования пишем в той же среде, в которую грузим данные.
Так как, кроме Excel, я другой связки для первой стрелки не знал (скрипты Метастока, Вэлслаба тех времён и Амиброкера не для моих систем), то и возник VBA. Вторую связку через текстовые файлы и аналог Трастменеджера мне вообще первый раз приданный мне трейдер написал под VBA летом 2008-го. А в Риск-Инвесте ее написали программисты и не для меня, а для отдела трейдеров. С той программой я только как пользователь знаком и вообще не знал на чем она написана и как осуществляет обмен. А в Интрасте и поначалу в Риск-Инвесте и Фросте (куда ушел из Риск-Инвеста в сентябре 2007-го) вторая стрелка вообще была «ручной», упомянутый трейдер был взят на работу только в июле 2008-го.
Это я зачем-то связался с транс2квикдлл, когда в уже в Форуме переходил на C#. Сначала под давлением с подачи Арсена, а потом, когда нашел DDE-сервер от Морошкина, и самому понравилось. Почему вернулся к текстовым файлам, уже написал, но оказалось, что и в Транзаке это пригодилось. Пустячок, а приятно.
А если мне понадобится hft, то первым делом я во второй стрелке озабочусь заменой квика на твайн и подбирать язык буду исходя из этого.
У меня многие знакомые до сих пор на фортране пишут (я закрыл для себя тему фортрана в 1994 году), и прекрасно себя чувствуют. Физики, что с них взять.
Пайтон крут. python-binance, binance-futures-connector, pandas, numpy, threading (здрасте многопоточность), asyncio, websockets, ну и matplotlib - классический набор для криптотрейдинга на бинансе. Ну а если заморочиться, то и tensorflow, sklearn
ПС: Простите за сарказм😎
Все написанное ниже — чистое IMHO, конечно
1. Крайне желательно моделирование и тесты писать на том же языке, что и код для продакшн — меньше будет ошибок при переносе. Про моделирование эквити в одном простом цикле — это только для очень простых алго (без лимиток, синтетического портфеля, ММ и т.д.)
2. Если алго сложные (хотя бы тестовые), то крайне желательно, чтобы код максимально (визуально) соответствовал математической формуле. Поэтому я использую Matlab. Векторизованный код на python при использовании numpy выглядит весьма коряво на мой вкус
3. Для целей стабильности и безопасности следует отделять торговый терминал от логики алго. Так что в моем случае к торговому терминалу на c# просто коннектятся матлабовские dll. Освежение и/или замена логики требует просто перекомпиляции dll и перезапуска одной программы — провайдера торгового сигнала. Сами торговые боты вообще не замечают подмены логики.
Как-то так
С уважением
Но это провайдер сигнала — он работает на некоей виртуалке и выгружает сигнал в условленный порт
А торговый терминал работает на другой виртуалке и опрашивает нужный порт
С уважением
Не умеешь — не пиши, или учись.
Как по мне — главное, чтобы стабильно работало (месяцами без перезагрузок). И чтобы восстановление после сбоя было быстрое.
А учиться поздно — для этого есть специально обученные программисты
За мной математика и генерация сигнала. Все.
С уважением
Просто периодически публикую размышления о возможных методах. Если народ их не понимает и/или считает ерундой — это очень хорошо. Значит, не перевелось еще мясо на бескрайних просторах планеты)
С уважением
Кстати, есть индивиды, которые получили и нобелевку и шнобелевку. И такое бывает.
Пока все считают это х@ней — я могу спать спокойно)
Если кто-то задаст хотя бы один умный вопрос — это повод напрячься)
Во всяком случае мне неизвестен ни один человек (кроме меня), который может объяснить (и статистически доказать), почему такой-то алгоритм будет работать в плюс.
Ну если не считать традиционных рассуждений: «Представим себе сферического коня в вакууме...», «Пусть рынок — это зашумленная ломаная...» и т.д.
С уважением
Не, каждый играет как может. Стрелять в пианиста не будем.)
Когда появится какой-нибудь чел, поднявший много бабла на простых индикаторах, тогда и поговорим)
Пока наилучшим кандидатом был Ларри Вильямс — так он уже 3 раза разорялся...
С уважением
Ну, я стандартные не использую. Binance на минутах уперся, пробую на бОльших интервалах, но по прежнему на минутах. Часов в сутках 60*24.))
1440 — магическое число)
Кстати, бро, почти 2 года активность на выхах была маленькая. Сейчас уже 3-ю неделю значимый рост в ночь с Пт на Сб. Не пропусти)
С уважением
Binance API уже освоил.)
Т.е. ты скачиваешь исторические данные для моделинга с каким-то дробным смещением от стандартной сетки GMT?
Эстет, б@ядь...
С уважением
Кстати, сейчас, ML на Binance пробую, но мне нужно от ML cовсем не то, что ты думаешь.)
Жаль, дружище, что я сам не понимаю, что тебе нужно от ML...
Мне — тем более...
Пока все, что я уяснил для себя, что для качественного обучения потребуется нев@ебенно большая выборка паттернов — сильно больше, чем на диск поместится, тем более в оперативу. Ну и не посчитает она все это никогда гарантированно...
С уважением
Но есть рекомендованный выход — разбиение задачи на более простые и решение их по отдельности.
Спасибо за дружеский совет)
Видимо, телескопом забивать гвозди еще хуже, чем микроскопом)
С уважением
Самая мощная модель на нейросети после обучения будет выдавать ответ на каждый новый входной сигнал в микро-секунды. Это цепочка матричных умножений. Все математические библиотеки, в том числе и в Питоне срабатывают в момент.
Реализация в Quik Lua элементарна.
Типичная нейросеть в несколько слоёв M с несколькими узлами N в каждом слое. Это M повторов перемножения N матриц размера N. Быстрее мысли.
«Deep Learning with Python 2nd Ed» FRANÇOIS CHOLLET
для хабра статья если честно
там в за питон люлей получите )
Всякое бывает
В TSLAB можно например с сайта Finam свечи скачивать и анализировать.
Для Python где данные берете для тестирования стратегий?
Какие библиотеки чаще всего используете?
Библиотеки: numpy (эт понятно), scipy, scikit-learn, statistic, еще что-то.
Данные: раньше Финам (сейчас на МОЕХ не работаю). Сейчас Binance — пробую что-то на крипте.
Комп нормальный — все ОК будет. Ну, а с 600 инструментами мало кто работает. Бабла на все не хватит.)
Да, переходить всегда сложно и долго. Я наверное пару лет переходил с Альфа 3.5 (все под него было заточено) на Quik-Lua. Что-то так и было брошено и не переписано. Иногда жаль.)
И неправомерно считать таких оценщиков какими-то неадекватами, «мясом».
Да, я неплохо программирую, и даже знаю несколько языков программирования, но программистом я отродясь не был. Упаси Боже.)
его разработчикам зарезервирован отдельный котел в аду за полное отсутствие обратной совместимости
Как результат по библиотекам тысячи страниц документации и тысячи вопросов на форумах.
В поддержку Питона.
Сам я не программист. Питон изучаю меньше года, кстати, во многом благодаря статьям уважаемого 3Qu, за что ему большое спасибо!
Раньше ковырялся на C#, это Тслаб и другие известные проекты.
Из последних «достижений» — за две недели сделал для себя проект — сканер для акций на американском рынке. Примерно 11 тыс. тикеров получаются и обрабатываются (датафрейм, запись в файлы, сортировки и прочее) с частотой 1 раз в 15 сек. Работает стабильно.
Мое мнение, что для не профессионального программиста — питон идеальный инструмент.
Хотя, спецы пишут, что Go и др. языки лучше подходит для современного трейдинга. Посмотрим, что через пару лет будет.
Кстати, питон еще хорош тем, что можно быстро собрать прототип «на коленке» и грамотно написать ТЗ для профи, оценить сложность и трудозатраты и т.д.
2) Пайтон отличный язык.
2. Если вам охота и доставляет радость процесс бай/селл, то не вопрос. Мне тоже когда-то, первые несколько лет, нравился сам процесс. Но если торговля так примитивна, то зачем пялится в монитор. Этим вполне может заняться сам компьютер с минимальным моим вмешательством.
3. Кроме того, есть возможность создать массу помощников и для ручной торговли. Для любителей ручной торговли.)
он позволяет «лохам» вроде меня (не программист я), создать свое нечто для торговли опционами с функционалом гораздо лучше квиковского
lurklurk.com/Python