Привет всем!
Создал оглавление своего блога, а кому интересно — гляньте. Ну а тут напишу что-то суммаризирующее мои изыскания.
Как обычно, структурирую имеющимися средствами, без нумерации, поскольку не уверен, что где-то нельзя вставить что-то улучшающее результаты.
Пока нарабатывается статистика алгоритмами на торгах, о чём писал в предыдущих постах, позволю себе немного философии.
Итак, что я понимаю под конвейером граалей и что мне нужно сделать (точнее, уже сделал)?
- прежде всего, конечно, хочется сказать, что понятие «грааль» — оно для слабоумных лохушек, но попробуем его использовать в общепринятом контексте
- механизм, который будет искать торговые алгоритмы на произвольном количестве ценовых инструментов/рынков по их ценовым данным. Назвал его Searcher = Искатель. Искатель ищет торговые алгоритмы в рамках одного инструмента генетическим поиском, двигаясь скользящим окном с заданным значением дискретизации, от последней известной цены в прошлое на заданную глубину. Сегодня 12, значит возьмём период с 12 сент по 12 окт — это у нас будет период проверки. А в период за неделю до него — это будут данные для поиска. Находим всё успешное на 05-12 сент, проверяем на следующих 30 днях, успешные запоминаем. Сдвигаемся в прошлое на неделю/две/месяц — как решаем, и повторяем процесс. И так по каждому инструменту и на заданную глубину, допустим, 01.01.2022 или раньше. Тут у меня тратится 15 минут машинного времени на инструмент/период. Ресурсоёмкие вычисления.
- к пункту выше: генетический поиск производится на заранее рассчитанных сигналах от каждого из используемых индикаторов, лежащих в основе. Их список приведён ниже, а по сути проторговываются множества комбинаций этих сигналов, принимающих значение 1 или 0. В моём кейсе их 300+. Наследуем лучшие, повторяем в цикле, и так много раз (обычно 200-1000+, однако, фин. рынки очень плоские, и 15 достаточно; как определить грань? Очень просто: если у вас перестали находиться новые алгоритмы в течение трёх следующих популяций — можно завершать).
- механизм, который будет проверять найденные стратегии на всех доступных инструментах и их ценовых данных. Это у нас Checker = Экзаменатор. Этот работает куда быстрее. Ему нужно с дискретизацией в месяц (но можно выбрать и квартал или неделя) проторговать найденные алгоритмы на истории каждого инструмента, как родного, на котором осуществлялся поиск алгоритма, так и чужих. И тут нет ограничений по рынкам или типам инструментов. Неважно, где и что нашёл искатель — мы проверяем это везде и на всём, и записываем результаты. Тут счёт буквально на минуты или секунды, от мощности вашего железа зависит.
- На выходе получаем набор данных, формат которого примерно следующий: период / инструмент / алгоритм / доход. Периоды обозначаю как YYYYMM, например, 202301 — январь 2023. Потому что дискретизацией для себя определил месяц. Далее код инструмента, код алгоритма, и % значение дохода, от -бесконечности до + бесконечности. По факту, все отрицательные значения я не записываю, они мне не нужны. Почему? Потому что мне для каждого «алгоритма / инструмента» нужен только вес. Как хорошо алгоритм отработал на всей истории. 100% означают, что он в каждом месяце был прибыльный.
- механизм, который формирует портфель, назван мной Selector, даже не знаю, как это перевести на русский. Отбиратель? Сортировщик? Называю его по-русски Селектор. Его суть заключается в том, чтобы отобрать алгоритмы, максимально успешные на обоих проверках — временной по родному инструменту и перекрёстной на чужих. Хотя большее значение имеет перекрёстная. Если один и тот же алгоритм в конкретный месяц работает на большинстве инструментов, примерно не важно, как он там работал на истории родного инструмента, хотя это влияющая переменная, конечно. Но она нижележащая и, таким образом, учтена, так что я не парюсь. Этот вывод следует из опыта и статистики. Если алгоритм более успешен на всей истории конкретного инструмента — он более специфичен для конкретного инструмента и более подогнан под конкретный инструмент. Если же он работает на большом объёме различных инструментов — он более стабилен и надёжен. Мне кажется, что тут всё очевидно, просто, понятно и логично. Большинство называет такие алгоритмы граалями.
- то, что отобрано селектором, поступает на вход Emulator — этот получает ценовые данные с бирж и от брокеров и на ценах реального времени эмулирует торговлю. Это у нас Эмулятор, тут тоже всё просто — конкретные торговые алгоритмы торгуются виртуально на заданных рыках и инструментах.
- по определённым критериям — и мне пока неясно, каким, Эмулятор передаёт торговые алгоритмы Trader — Трейдеру, который уже отправляет реальные приказы/ордера брокерам или на биржу, отслеживает исполнение, ведёт лог и статистику, записывает сделки, и, при наступлении определённых условий — неясно, каких — есть разные варианты — останавливает торговлю по конкретному алгоритму, закрывая позицию.
Так выглядит целевая схема, и каждый из кусков у меня уже работает, но они не собраны в автоматизированную систему. От одного блока другому я передаю информацию вручную и запускаю их вручную. Нужно всё это собрать в единый механизм, и работа будет закончена.
В моём решении обеспечена обратная совместимость при вводе новых индикаторов. Как именно? Описание алгоритма представляет собой текстовую строку, которая определяет сигналы, которые должны быть включены для совершения операции покупки, и сигналы, которые должны быть включены для операции продажи.
Это означает, что при добавлении сигналов новых индикаторов, прежние продолжают работать как прежде. Это весьма удобно с точки зрения расширения функционала и добавления сигналов новых индикаторов.
Сейчас я использую не особо много индикаторов для производства сигналов, и вот они:
Часть из них — мои, кастомные.
Большинство — стандартные и их настройки так же соответствуют настройкам по умолчанию подавляющего большинства терминалов.
Как я писал ранее, следует при имплементации сигналов по каждому новому индикатору оценивать их значимость.
Возможно, что индикатор бесполезен, вроде Volume, и нужно такие выводить, исключать, не использовать, поскольку они жрут и память, и производительность, а толку от них как от козла молока. Как определять эффективность индикаторов я детально описывал в своём блоге ранее.
Послесловие
Результатами работы конвейера будет являться вполне конкретно очерченный набор алгоритмов. По сути, те самые граали.
Смею утверждать, что после 2-4 недель работы мои алгоритмы в своём топе лучших сойдутся с генерацией тех, кто полностью повторит схему.
Но, разумеется, добавление всего одного дополнительного индикатора или исключение одного из тех, что присутствуют в моей схеме, дадут совершенно иные результаты. Поэтому не сойдутся, ведь у меня есть кастомные мои индикаторы — ATAN и DeepExtremum, и никто не знает, как они работают. Может возникнуть мысль, что доходность моих алгоритмов именно ими и обусловлена, но это не так, поскольку есть алгоритмы, которые их не используют.
Что нам суммарно это даёт?
Что бы с рынком не происходило, эти знания могут быть аккумулированы в лучших алгоритмах.
Невозможно гарантировать, что суммарно по портфелю не будет минусов.
Можно говорить, что, с высокой степенью вероятности, когда у иных участников торгов по их кастомно набранным портфелям, будут минуса — у нас их не будет. Но это, в условной степени, гиперболизация. Имеется ввиду, что у нас будет -3%, когда у других -30%, и т.п.
Очевидно, что сложно это всё протестировать, тем паче, на домашних компах. Потому что нужно писать индивидуальный тест. И обсчитать весь используемый рынок. И объём расчётов огромный.
Тут вопрос закономерный может возникнуть — лично ко мне — может, мне интереснее считать, а не торговать? (Я конкретно про себя) Ну, кто знает, кто знает… Может, кто-то скажет, тебе, чувак, интереснее исследовать, чем торговать? Знаете, я скажу = да. Да. Да.Да.Да. Хочу победить стохастичность рынков. Суть не в миллионах, и так есть, а в том, чтобы подчинить хаос торговли. Такое. И потому.
Но тестировать будем. А чё делать?
Пока набирается статистика на эмуляционной торговле — как раз есть, чем себя занять.
Лично мне важен масштаб задачи. Он мировой и титанический. Вероятно, начать и кончить, или нет?
Время покажет.
Ваша доброжелательность будет мотивировать продолжать исследования и двигаться в направлении универсализации механизма победы рынков. Как изложено выше.
Кто хочет покусать — покусайте. Блокировать тоже приятно.
Перед тем, как будете писать комментарий, задайте себе вопрос: что я такое должен написать, чтобы не поязвить и не постебаться, а научиться тому, что позволит мне заработать куда больше, чем я имею сейчас.
Рынки значения не имеют, как говорил ранее.
Акции. России, Америки, Китая, Японии, Европы
Валюты. Любые
Валютные пары Форекса. Любые
Любые бесконечные фьючерсы.
Есть мужики, которые мне объяснят, как в моей концепции работать с экспирирующимися фьючерсами на ФОРТС, уверен, но пока не лезу. По тестам там и так доходность, хочу больше.
Порыбачим, покусают комары, покатаемся на лыжах, опустим своими большими ФОРТС, не вижу особенных проблем.
Ставьте цели, господа, стремитесь к ним и желаемое будет у ваших ног.
@dr-mart позвал меня в гости, так что если хотите пообщаться лично — а чего бы и нет? На конференции.
Кинотеатр Октябрь, Новый Арбат, Москва.
Но если не хотите, то не прийду)
Вот, мне нравятся Боллинжджер и Стохастик. Не знаю за что, я их никогда не применял. За идею, наверное.
Не мелковата ли глубина истории менее 2х лет?
На мой взгляд (у меня есть исследование на эту тему, если интересно, также перебирал все комбинации индикаторов и получал под 5000 разных систем), адекватная глубина тестов должна быть 3-5 лет. Менее 3х резко снижается стабильность, более 5ти просто тратим ресурсы без роста стабильности.
В октябре на конфу СЛ планирую приехать в Москву, можем пересечься
1. Прогоняем разные инструменты по всем системам с одним индикатором (у меня тф 5мин и день) на истории 5 лет
2. Из тех систем, кто дает прибыль делаем прогон перебора со вторым индикатором
3. Из отобранных систем на двух индикаторах делаем оптимизацию параметров. История также 5 лет
так оно и должно работать в идеале
если этого удалось добиться, то «памятник себе воздвиг нерукотворный»
там тоже искали - что и вы и НАШЛИ
так же хорош фильм — Банк - 2001 года
0 — это значит вне позы
1 — это значит входим на баре и далее на всех остальных барах 1 (пока не выйдем), т.е. это не однократный сигнал на вход
Алгоритм состоит из n сигналов, часть из которых отвечают за решение buy, а часть — за решение sell.
Поэтому понимать, что «далее на всех остальных барах...» неверно.
Какие-то отдельные сигналы действительно дают постоянную линейку из единиц, например, те, что сгенерированы пересечением MA цены, но далеко не все.
Занятно)
Вы ищете самые лучшие сеты, полагая, что они продолжатся.
Я ищу самые худшие, полагая, что рынок имеет память и найденная неэффективность скоро развернётся в обратную сторону)