Сейчас выдалась свободная «минутка», и я решил попробовать принести немного пользы начинающим трейдерам-программистам.
Кто является целевой аудиторией данного топика?!
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# достаточно освоить базу (классические конструкции процедурных языков, классы, коллекции, события). Ну и важная часть — потоки. Вы должны понимать суть работы потоков и управления ими. Как частный случай, понимать принцип работы однопоточного аппартамента (это когда методы класса вызываются самим экземпляром в своем потоке). Плюс немного знаний по интеграции 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
Не люблю душно-альтернативно одаренных.
ЕМА используется как тема для оптимизации чтобы не хранить весь возможный «пи%дец» предыдущих значений. Чтобы её сделать аналогичной СМА нужно пооптимизировать веса чтобы они сходились со СМА. Поэтому посчитай то что ты там выложил пооптимизируй и получишь ЕМА с 2 переменными(вместо 27 или сколько ты там себе придумал) которая не отличается(значимо) от СМА. Скорее всего опять не въедешь ты же ведь как транслятор с матрицей(из их компании).
все остальное это уже не EMA, а что-то другое.
Ведь и дебилу должно быть понятно что будут разные значения. Ещё раз для тебя объясню. У тебя есть метод например называется get_ema в него отправляешь значение текущее пока меньше периода возращает 0 когда набрал сколько надо возвращает результат в частности если для твоего примера вернёт результат такой последовательности:
Странные у тебя задачки конечно.)))
Системы с минимальной задержкой и даже с предсказанием вперед я на модельной задаче легко нарисую. Но, увы, у нас не модельная задача. Так что топором, лопатой, тачкой. А не карьерным экскаватором. Увы.
Зачем объяснять элементарные вещи или в инете почитай там тоже про это много написано.
Не обязательно.
Только частично, есть другие варианты.
Можете озвучить?
Но если взять к примеру мой пост — smart-lab.ru/blog/1069844.php
то ориентировочно это может торговать до 1-3млн — там тренд берется по кусочкам и стопы используются.
А если взять систему Евгения Ни — то до 2022 года вполне можно было торговать и 20млн.
Если у вас так много готовых копеечных систем которые могут торговать суммы только до 1млн но с доходностью 30%, так опишите их здесь на смарт-лабе, вам же они как я понимаю даром не нужны. Так запилите серию постов.
А потом и разговаривать можно,
а так «Нет тренировки, не вижу морковки!»
Вот в этом и проблема реальности и «можно было бы» это как с бабушкой у которой если был… то она была бы дедушкой.
Вы плохо улавливаете суть(Вы то пишете ты то Вы ни как не определюсь как с Вами общаться — сидя на корточках или пользовать культурный кейс). Я пишу о том что ничего не нашёл что хотя бы как-то меня удивило и заставило посмотреть в сторону трендов и т.п. что хоть как-то было бы похоже на то что пользуя я. Когда с 5 копеек без просадок(а если много сделок то и без убыточных дней) делешь то что должен делать. Ни о каких соотношениях риск/прибыль и задумываться не прихоодиться т.к. либо у тебя реальность сходится с тестом и идут серии положительных сделок либо нет и сразу понимаешь что надо тормознуть торговлю. Поэтому когда я писал коментарий выше я там и оставил спойлер(можете перечитать смысл его примерно о том что Вы написали позже — типа читай интернет, считай, ничего писать не буду, именно так я себе и представлял ответ поэтому написал там что это спойлер если чО(можете перечитать)). Мне мои темы нравятся и они гораздо меньше млн. вмещают но это ни о чём не говорит, т.к. то что они делают меня устраивает кратно больше чем мне нужно. Андерстанд?
Я тебе написал, что торговал 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 ) для тайма неделя .
Правильный сигнал — свеча приседающий или приседающий угол. Это трудно алгоритмировать.