Сейчас выдалась свободная «минутка», и я решил попробовать принести немного пользы начинающим трейдерам-программистам.
Кто является целевой аудиторией данного топика?!
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: Насчет моей торговли и ее прибыльности. Торговля ведется в автоматическом режиме, прибыль есть, но весьма скромная
Первое — полный фуфел! Второе — это дополнение к… РАБОЧЕМУ алгоритму!!! Вопрос тот же: где ЕГО взять?!
ну как где? Украсть же, еще Пикассо завещал: «Хорошие художники копируют, великие — воруют» ©
алготрейдеры периодически продают системы. Начиная от Силаева, заканчивая Пратрейдером. Старые продукты можно найти бесплатно или за совсем малые деньги.
Более того, есть изначально бесплатные варианты систем, как например в курсе у Жени Ни.
Я задавал вопрос про РАБОЧУЮ систему)))
то, что отдавал Женя Ни у него работает в Comon. Точнее является прототипом того, что работает сейчас. Да и у Силаева работает.
Если вы не в теме, не надо повышать на меня голос, минусить, писать капсом и ставить множество восклицательных знаков, иначе быстро уедете в ЧС.
Они конечно работают, НО периодически длинные периоды просадок, и это может быть и до 9 месяцев.
Но как исходный пример можно смотреть.
я знаю эти системы.
Кстати, длинные периоды просадок обычно неизбежная плата трендовых систем за неплохую долгосрочную доходность.
А нетупой подход заключается в диверсификации по активам и системам. Я больше времени, кстати, трачу именно на метасистемы, то есть системы управления портфелем систем.
Я писал что системы достаточно тупые и тем НЕ МЕНЕЕ зарабатывают.
А вообще, давно уже есть более современные варианты замены SMA/EMA ;
с min задержками и без необходимости иметь длинный массив предыдущих значений. Для SMA10 — надо иметь 10предыдущих значений цены, а для EMA10 уже надо примерно 27предыдущих значений.
И тд и тп.
Два значения это если у тебя есть предыдущее значение EMA, а если лет то N*2.7
Давай посчитай сколько будет EMA10 для ряда с 2мя значениями цены
Close=10
Close=20
ты же всегда по двум значениям считаешь
берем к примеру EMA5
для ряда
2
2
2
3
3
4
4
5
5
6
6
7
7
4
4
Посчитай для него EMA5 по всем 15 значениям
Так же посчитай EMA5 только по 5 последним значениям.
6
7
7
4
4
И сравни.
p.s
Не люблю душно-альтернативно одаренных.
все остальное это уже не EMA, а что-то другое.
Потом поймешь, пока почитай -> habr.com/ru/articles/850172/
Используя частичную сумму арифметической прогрессии.
Нужно взять новый отсчет, вычесть из него уходящий, разделить на число компонент SMA и прибавить к старому значению скользяшки.
Суммировать каждый раз все в окне, как обычно пишут в прогах для трейдеров, не обязательно.
а потом в реале один раз ошибка и вы тащите эту ошибку всю оставшуюся жизнь. надо периодически пересчитывать «традиционно», но это уже нюансы, из которых, собственно и складывается или НЕ складывается алготрейдинг.
Как-то обнаружилась неправильная обработка дивов. Но это, считай, мелочь. Вот то, что работающая система перестала работать (постоянно или временно, Бог весть) уже может быть реальной неприятностью. Так что диверсификация, вот что написано за знамени нашей дружины.
я до сих пор не могу понять что значит «перестала работать», это какая-то бинарная логика. В моей диверсификации система получает меньше денег при плохой работе и это процесс длительный. Конечно, если денег на систему по параметрам выделеяется настолько мало, что мне уже кажется нет смысла ее процессить, тогда принудительно аллокация становится нулевой, и то, какое-то время я еще буду следить за теоретической эквити.
спасибо, вы интересный собеседник, наверное единственный из нового поколения или не нового, но не вхожего прежде в местную тусовку. пишите, с удовольствием читаем! ;)
В моем албанском hft © именно диверсификация и решает. То есть на одном инструменте можно достаточно сильно уехать в просадку, но в обшей системе это не имеет значения. Но, в любом случае, на нашем рынке это вопрос малых денег. Как ни диверсифицируй, больше, чем 6/7-значную цифру рублей туда не засунуть :(
Здесь речь идет о системах с высоким количеством сделок и мелкой средней сделкой. В акции такие системы не засовываются, комиссия выедает всю прибыль.
медленные конечно интересуют и использую по полной программе. вот только рынок в этом году не дает заработать.
Первая десятка ПИФ дает плюс. Ну, Аленка с +28% уникальна, но и среди остальных не все результаты случайны.
Если взять пятилетний период, 2 фонда получили среднегодовую больше 20% и еще 2 ПИФ где-то рядом.
Но мы же не скованы жесткими ограничениями, можем хеджироваться фьючерсом, можем сокращать позицию в акциях хоть до 0. Тут есть неплохая альфа.
грустная правда жизни в том, что ноль по этому году будет где-то в районе плюс 20%, а все, что ниже минус. Поэтому приходится бежать ещё быстрее…
Инфляция 9-10, до этого было два хороших года, по мне, мало кто вообще плюсом закроется в этом году, кроме депозитчиков и любителей коротких облигаций.
Вообще, тема стопов и профитов раздута теми, кто торгует руками с частотой, позволяющей концентрироваться на одной сделке. Большинство из них без стопов весьма быстро вывалились бы в ноль. А так могут мучиться долго. И вот им кажется, что синяя птица прямо под рукой.
https://smart-lab.ru/blog/1070354.php#comment17389078
это все потому, что у вас в продакшне все системе с одинаковым коэффициентом, у вас и вариантов нет никаких, или +1 или 0.
Системы с минимальной задержкой и даже с предсказанием вперед я на модельной задаче легко нарисую. Но, увы, у нас не модельная задача. Так что топором, лопатой, тачкой. А не карьерным экскаватором. Увы.
Зачем объяснять элементарные вещи или в инете почитай там тоже про это много написано.
Не обязательно.
Только частично, есть другие варианты.
Но если взять к примеру мой пост — smart-lab.ru/blog/1069844.php
то ориентировочно это может торговать до 1-3млн — там тренд берется по кусочкам и стопы используются.
А если взять систему Евгения Ни — то до 2022 года вполне можно было торговать и 20млн.
Если у вас так много готовых копеечных систем которые могут торговать суммы только до 1млн но с доходностью 30%, так опишите их здесь на смарт-лабе, вам же они как я понимаю даром не нужны. Так запилите серию постов.
А потом и разговаривать можно,
а так «Нет тренировки, не вижу морковки!»
Я тебе написал, что торговал Si имея на счете 2млн и задействовал до 4плеча.
Я писал smart-lab.ru/blog/1072328.php#comment17408680
Научись внимательно читать, для особо непонятливых, написано что «Не обязательно иметь длинные периоды просадок»
Вот тебе, бот, три заявки за последние три дня. Иди, грызи
14.10 — 1199611595
15.10 — 1200066665
17.10 — 1200993850
Самая большая проблема — рабочий стабильно зарабатывающий алгоритм.
Yota — нормальный провайдер, надо просто использовать нормальный промышленный роутер, а не бытовые погремушки.
Алготрейдинг: Развитие, Финал. Придумать более креативные названия.
Папа у Васи силен в математике,
учится папа за Васю весь год,
Где это видано где это слыхано
папа решает а Вася сдает!"
— ниачём.
или вот
https://www.amazon.com/Portfolio-Selection-Efficient-Diversification-Investments/dp/1557861080
на худой конец хотя бы отсюда стоить начать https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/mit18_05_s22_probability.pdf
или отсюда https://www.amazon.com/Applied-Dynamic-Programming-Princeton-Library/dp/0691079137
здесь можно подсмотреть за тем у кого получилось https://www.economics.uci.edu/files/kassouf/pdfs/beatthemarket.pdf
Литература — это прекрасно и источников ее в инете море, и читать можно ее долго...
«
Читать и восхищаться,
Вздыхать и ковыряться,
Уставши — обессилить,
В Бозе коньки откинуть
»
Сигнал может быть тупым, как у черепашек — лонг выше хаевой средней (20) для тайма день и (10 ) для тайма неделя .
Правильный сигнал — свеча приседающий или приседающий угол. Это трудно алгоритмировать.