Мемуары на R&D
Часть 9. Изменчивость рынка и curve fitting
[Тут был большой кусок текста с деталями разработки алго, я его вырезал, т. к. он УЖ СЛИШКОМ забористый вышел для стороннего читателя, да и наговорил там лишнего, поэтому начало такое будет... не плавное.
А вообще для 99% читателей советую сразу прыгнуть к заголовку «Изменчивость рынка» и не парить себе мозги моими нудными рассуждениями/гипотезами про curve fitting ⬎]
...и пока идёт время, у меня это подвешенное в воздухе нововведение, как я уже говорил в предыдущей части, проходит модерацию/акцепцию дефолт-системой мозга (ДСМ)... Она подсознательно её там как‑то крутит в моей голове, и иногда бывает так, что со временем отторгает, т. е. я ни с того ни с сего понимаю, что это противоречит чему‑то более важному и не встраивается в мою «экосистему». Или прям жопой чую, что это пахнет подгонкой 🧐
Понятно, что нет смысла зацикливаться на неразрешимых (в моменте) примерах, надо делать костыли, чтоб можно было двигаться дальше, но я опишу, как они в итоге зачастую разрешаются.
Т. к. логика в разных аспектах часто бывает похожа, то, если не удаётся решить какой‑то конкретный вопрос, стоит подвесить его в воздухе (вставив костыль), потому что со временем будет получен опыт похожей логики в других аспектах, что может подсказать правильный ответ. Само по себе висение в воздухе не приведёт к правильному ответу, разве что ДСМ сможет собрать пазл, но если даже для ДСМ не хватает частей для сборки пазла, они могут появиться при разработке других аспектов, и тогда станет понятно, как разрешать и подвешенную в воздухе ситуацию.
Приведу хоть какой‑нибудь пример. Проще не с логикой, а с константами ⬎
Допустим, я убедился, что какой‑то фактор создаёт мультипликатор для расчёта силы поддержки/сопротивления, тогда возникает вопрос: «Насколько конкретно?» На 10%? На 20%? На 100%? Подвешиваю вопрос в воздухе. И потом нахожу чёткое значение мультипликатора для совершенно другого свойства совершенно другой сущности (т. к. примеры менее зашумлены, и значение сразу бросается в глаза). Потом так же определил ещё один мультипликатор для совершенно другого, и, несмотря на совершенно разные плоскости применения, они совпали по значению! И я думаю: «Ага… а дай‑ка я применю это значение мультипликатора к моей подвешенной в воздухе проблеме…», и — хуяк — что бы вы думали?
Значение подходит и сюда с точностью до сраных тиков и миллисекунд (и не в одном примере, а в массиве примеров)!
Для меня это ещё один аргумент, уменьшающий для меня вероятность подгонки. Я слишком туп, чтобы изучать такие работы, как эта (и это вдогонку), я там ничего не понимаю (но мой напарник-прогер одобряет), поэтому у меня есть свои представления о том, что более вероятно относится к модели реальности, а что есть оптимизация случайных значений.
По моим представлениям, подгонка под историю разных параметров не имеет взаимосвязей НИ С ЧЕМ — ни в рамках одного объекта, ни между принципиально разными объектами — и является уникальным статистическим решением для каждого параметра в отдельности. Короче, по‑простому ⬎
Если взять разницу между двумя МАшками типичного алготрейдера, т. е. насколько один период больше другого, то вот это значение n будет просто случайной величиной, и она с вероятностью в 99,9% больше не встретится нигде в коде. Потому что, как правило, нет никакой взаимосвязи между ними вообще, и больший период не получен с помощью какого‑то стандартизированного мультипликатора от меньшего периода, а они оба получены случайным образом как дающие лучший статистический результат на истории. Возьми другой инструмент или таймфрейм — там эти периоды могут быть другими. Если же МА одна, то для неё невозможно взять значение из чего‑либо другого.
Почему так получается? Потому что среднее значение цены за последние n баров (причём n — константа, не меняющаяся под конкретные обстоятельства) — это абсолютно от балды выдуманная производная цены, которая не входит в какую бы то ни было модель рынка и механику ценообразования (или входит случайным образом со случайным исходом). Поэтому и оптимальные периоды будут на разных ТФ и инструментах разные (случайные), и, кроме как статистикой (подгонкой), определять их (оптимизировать) не представляется возможным. Там нет почвы для логики и каких‑либо взаимосвязей с чем бы то ни было вообще.
У меня же в коде нет ни одного оптимизируемого параметра, для всех ТФ и для всех инструментов один и тот же код и... (за исключением спецификации, такой как размер тика, часы торгов и т. д.) одни и те же параметры, которые я утвердил вручную максимум за 1–3 попытки (разумеется, не от балды).
Поэтому у меня возникает когнитивный диссонанс от таких вот изречений:
«Не подгоняемых систем я не знаю. А вы?» © bascomo
Кста... знаю ещё одного трейдера, у которого нет подгоняемых параметров 😉
Ну ладно, шутки в сторону. Пример с мультипликаторами — это просто частный случай. На самом деле у меня такое происходит по всем фронтам алгоритма, и именно это в выступлении на конфе Смартлаба я называл некой наработанной «эвристикой» в процессе разработки алгоритма. Отрывок моего спича:
Это позволило мне начать мыслить не причинно, а системно. И я сейчас не про торговую систему говорю, я говорю про такое понятие, как «системное мышление», это в смысле не трейдерский термин.
Раньше открытию нового всегда предшествовала причина — как правило, столкновение с какой‑то проблемной ситуацией в поведении цены, которая выходила за рамки моего понимания. Сейчас же я могу двигаться за рамки своего понимания с помощью некой эвристики, тем самым предвосхищая проблемные ситуации.
В общем, когда я понял принцип, у меня появилась некая эвристика в нахождении новых рыночных механизмов, законов, факторов или в нахождении в привычных вещах новых свойств, а также эвристика по решению всякой проблематики в процессе разработки. Проще говоря, чем больше я разгадываю этих загадок, тем быстрее приходит решение для каждой последующей... Решения часто вытекают сами собой, потому что имеют какую‑то единую логику, модель, принцип.
И тут плюс ещё знаете в чём? Это снижает вероятность переподгонки под историю всякими нафантазированными правилами с потолка...
Раз уж я задержался на curve fitting’е, давайте соберём по всем частям мемуаров мои доводы об этом и подведём итог. Можете пропустить его пропустить, в нём нет ничего нового, просто компиляция: [тыц!].
Изменчивость рынка
Тема про подгонку довольно холиварная, потому что всё, что я понаписал выше, можно перечеркнуть таким ответом, как: «Рынок постоянно меняется!» Исходя из этого утверждения, любое соответствие текущим правилам игры есть подгонка.
«На рынке никогда не происходит ничего нового...» © Ливермор
Скажу о своих мыслях на этот счёт. С одной стороны, я видел, как рынок менялся для меня кардинальным образом: сначала я скальпил фьюч на РТС как бог, ориентируясь на ленту и стакан в 2007–2008‑м, потом ушёл на СМЕ — и, вернувшись, я уже не узнавал ни ленту, ни стакан и не понимал, что там вообще происходит. Скажи мне кто‑нибудь тогда, что рынок не меняется, я бы плюнул ему в лицо 🤬😡
Сейчас я вынужден признать, что, похоже, рыночные законы и механика и впрямь никогда не меняются. Меняется лишь то, что не имеет к этому никакого отношения. Как шортила широкая публика по лоям боковиков и покупала по хаям задолго до электронной торговли, так и делает это сейчас со всеми возможными техническими приблудами: неважно — по стакану/ленте, по графику или по новостям, а может, и по корреляционным матрицам или по «обучившимся» нейросетям 😜
Если рынок меняется — например, всё время на хороших новостях рос, а на плохих падал... а потом вдруг изменился, — то это ТОЛЬКО ДЛЯ ТОГО, чтобы оставаться неизменным в своей истинной природе, чтобы все также покупали по хаям и шортили по лоям. Если для этого рынку нужно измениться в каком‑то его проявлении, он сделает это, не нарушая законов, по которым функционирует. Рынок меняется в том, в чём может, чтобы глобально оставаться неизменным в своей истинной, базовой, фундаментальной модели.
Зима меняется на весну, потом на лето и осень, но глобально на длинной дистанции всё остаётся неизменным... Я намекаю на то, что чем более дальновиден и опытен трейдер, тем менее изменчив рынок для него.
Дальновидность и адекватность просто отсеивают всю шелуху, которая может меняться, видоизменяться, как глина под ногами рынка, и тем самым трейдер выбирает для себя более твёрдую на длинной дистанции почву.
Бэктестов не проводил, но вручную много раз смотрел Nikkei/Dow с ~1900 года и не смог найти причин, чтобы не торговать их с самого начала своей текущей ТС.
Т. е. ~100 лет назад для меня было всё то же, что и сейчас. И считать, что рынок изменился, т. к. какие‑то паттерны в стакане, «линии тренда», «голова и плечи» и «ударные дни» Резвякова перестали работать, — для меня сейчас просто смешно. Это не имеет отношения к неизменным законам рынка, которые и есть тот самый Святой Грааль, постичь который не дано широкой публике.
Мне, может быть, тоже не дано. Я, несмотря на весь свой апломб и на то, что положил на это всю свою жизнь после универа (уже 17 лет), на самом деле до сих пор нахожусь в начале пути. И несмотря на все свои убеждения и ожидания, на выходе в самом конце могу получить то же, что и широкая публика 😂🤦🙈 Но для меня ставки сделаны, господа, ставок больше нет.
Надеюсь, что скоро я смогу выяснить, кто из нас псих 😉 Все вокруг уже давно сложили свои бумажные самолётики, которые даже летают... а я до сих пор строю какую‑то космическую ракету, и пока она не полетит, то я даже в собственных глазах кажусь реально сумасшедшим.
Ладно... не всё так безнадёжно ‑_^
Я же уже проговорился, что собираюсь выходить на тропу войны трейдинга 😈
На этом пост заканчивался, но я тут подумал... Насколько же определяющее значение для развития имеют две составляющие в правильном балансе:
Если нет адекватной базы, то можно уверовать в любую чушь: зацените мой анализ 2007 года, и ведь веровал же! 🤣
С другой стороны, даже адекватная база без достаточной веры в неё неизбежно будет отвергнута по одной простой причине: невозможно СРАЗУ самостоятельно осознать максимально полную, продуманную во всех деталях базу, а вероятность получить её путём эксплицитного обучения крайне мала. И чтобы довести зачатки адекватной базы до ума, до необходимого уровня целостности и детализации, нужна вера в неё, ибо зачатки поначалу нежизнеспособны!
Адекватность базы, возможно, познаётся в сравнении, а оно аккумулируется с опытом. А может быть, познаётся в том, поддаётся ли она развитию или нет. Как бы то ни было, я пока не могу объяснить, почему, когда рынок изменился и перестал ходить по каналам, я понял, что это чепуха, а когда рынок изменился и перестал соответствовать зачатку той базы, которая у меня до сих пор, я подумал: «Нет‑нет‑нет… быть такого не может, надо разобраться в деталях» — и продолжил копать в том же направлении. Да, были периоды, когда рынок будто изменился и для моей текущей модели, например: рынок какое‑то время был более инертным/трендовым, поэтому когда начинал направленное движение из области «застоя», то продолжал идти и дальше. Я входил в это направление и бед не знал. Потом он перестал быть инертным, и получалось очень много «ложных выходов» из областей застоя, а я покупал по хайным хаям. Казалось бы, вот, рынок изменился и текущую парадигму нужно выбрасывать на помойку!
В итоге выяснилось, что в период инертного/трендового рынка мне просто сходили с рук непроработанные критерии выхода из области застоя. И когда я их доработал в рамках той же самой парадигмы, то стал входить направленно, когда рынок становился направленным, а не всегда. Хочу подчеркнуть, что рынок на самом деле никогда не менялся в критериях смены своего состояния, потому что доработанные критерии, как оказалось, работали и раньше на истории, просто их незнание какое‑то время сходило мне с рук, и я «бычий рынок путал со своей гениальностью».
Подобные «изменения» на рынке ещё не раз случались в разных аспектах моей модели, моих представлений о рыночной физике и её механизмах, и можно было бы подумать:
«Ну вот же, рынок постоянно меняется, и нужно меняться вместе c ним!»
Но каждый раз выяснялось, что рынок никогда не менялся, а просто оголял мои пробелы в понимании. И когда я заполнял эти пробелы, продолжая развиваться в рамках той же самой модели, всегда оказывалось, что я просто детализировал его неизменную модель, а не делал каждый раз новую уникальную подгонку к новым уникальным правилам игры. Правила игры никогда не менялись, иначе новая детализация‑подгонка сливала бы на предыдущих исторических периодах, но она не только не сливала бы, но и давала бы лучшие результаты, если бы я её применял раньше!
Короче, ещё раз для наглухо запаянных танкистов: когда рынок якобы изменился, варианта на самом деле два:
- Если ваша ТС была тупой подгонкой или опиралась не на фундаментальные законы рынка, а на всякие мимолётные неэффективности, то для вас плохие новости: конкретно для вас рынок действительно изменился 😌 и можно выбрасывать все ваши наработки на помойку.
- Если же ваша модель в каком‑то приближении соответствовала его природному естеству, то это не более чем проявление пробелов в вашей модели, хотя и ошибки тоже не исключены. Т. е. для более полного соответствия истине вам нужно либо просто заполнить пробелы, развивая существующие правильные логические цепочки, либо найти в этих цепочках противоречия и ошибки, которые до этого сходили вам с рук.
Поэтому... для кого‑то рынок действительно постоянно меняется, а для кого‑то он не меняется никогда, а только лишь проявляет те грани, те правила игры, которые трейдер раньше просто не замечал.