Rogue Trader :) (my_trade) wrote,
Rogue Trader :)
my_trade

Categories:

Ловите новый видос



Я не понял как это произошло, но каким-то образом Толян меня вытащил из ракушки и я оказался в эфире ИндексБара. Нет нет нет, это никакой не "камбек", даже не думайте об этом.


*на 34-ой минуте у меня есть мелкая оговорка, что вола поднялась только на рынке акций. Я имел ввиду, что ребята торгуют только на рынке акций (ну и крипту), поэтому они сейчас эту волу и обсуждают.

Пока несколько дней монтировали эфир, я развил тему моих впечатлений от процесса алгоритмизации.
Ловите "продолжение" мыслей:
ОБЩЕЕ:

Всё обучение и развитие в процессе ручной торговли для меня отдаленно напоминает принцип нейросетей. Люди из бесконечного количества графической информации со временем выкристаллизовывают похожие друг на друга повторяющиеся модели, явления. Т.е. сопоставляют в своей голове одни образы с другими. Что такое образы? Ну вот, например, какая-нибудь фигура «голова-плечи» в нужное время в нужном месте - это некий ценовой образ. И узнаёте свои фигуры на графике точно так же, как узнаете лицо знакомого человека — никакого математического аппарата и четкого алгоритма при этом не существует. А при формализации — этот алгоритм пришлось СОЗДАВАТЬ(!). А дальше - всё обучение и развитие становится ближе к какому-то генетическому алгоритму. Потому что начинается подбор констант, уточнений, критериев, о которых я и не задумывался никогда и с каждым новым изменением (по сути: мутацией) проверяю, стал ли мой роботизированный анализ более правильным или нет. Если мутация удачная, то оставляю, если нет, то нет. Эдакий алгоритмический брутфорс :).

Но тот факт, что при «ручном» анализе рынка можно обойтись без точного алгоритма (примерно оценивая и сопоставляя в голове образы друг с другом), даёт преимущество только в начале пути, т.к. это банально проще. Т.е. это даёт меньший порог входа в трейдинг, можно быстрее хоть с чего-то начать.
Но суть в том, что в виде графических образов мы воспринимаем различные явления на рынке различных сущностей, которые влияют (или якобы влияют) на рынок. Всплески волатильности в определённые моменты или её отсутствие, всплески объема в определённые моменты или его отсутствие, соответствует ли текущая динамика цены допустимому таймингу или нет, отреагировал ли рынок на какое-то событие или проигнорировал его. А там, где явления, которые «что-то значат», там и взаимосвязи, а где взаимосвязи\функции, там и константы. При торговле вручную о них даже и не задумываешься, но это не значит, что этого нет. И конечно же, они будут давать больший эффект, когда вы всё это идентифицируете, определите точные границы, критерии, константы и т.д. и т.п. Т.е. так сказать, «оцифруете».

Т.е. на текущий момент своего развития я считаю, что

у любого состояния рынка есть конкретные допустимые границы, которые можно и нужно «оцифровать». У тренда, у флета.. у чего угодно. Эти границы могут зависеть от временных факторов, ценовых факторов и более сложных одновременных факторных комбинаций. Т.е., например, что бы рынку продолжать быть трендовым, его динамика должна укладываться в допустимые границы. Выход за пределы одного типа границ превратит трендовый рынок во флетовый, выход на пределы другого типа границ развернёт трендовый рынок в другую сторону, т.е. бычий тренд превратится в медвежий. Границы преодолеваются всегда количественными изменениями, когда они доходят до какого-то допустимого предела, после чего приводят к качественному изменению подобно тому, как вы постепенно повышаете температуру воды и когда количественное изменение достигнет предела, т.е. 100 градусов, в воде начнутся качественные изменения, она начнёт испаряться, перейдёт из одного состояния в другое. А если температуру будете понижать, то после какого-то предела вода превратится в лёд. В любых взаимосвязях, законах, состояниях существуют критические значения, после которых происходят качественные изменения. На рынке всё тоже самое.

Так вот к чему я это всё говорю. На уровне образов трудно уловить те самые точные границы, потому что работа с образами — это всегда что-то примерное, что-то вероятностное. Но моя практика показывает, что в одной ситуации нужно покупать, а в другой продавать, хотя обе эти ситуации могут быть визуально, т.е. образно очень похожи и на глаз трудно уловить разницу между ними. Дьявол, как говорится, в деталях... и многие детали без «оцифровки» трудно уловить. У рынка вообще удивительная способность мимикрировать под одно состояние, при этом незаметно превращаясь в совершенно другое...

ПОЧЕМУ ТАК ДОЛГО:

Я уже предвижу самые популярные вопросы, типа " Тебе не кажется что это замкнутый круг? Почему бы не запустить какую-нибудь из более-менее работоспособных версий алгоритма, что б уже рубилось бабло и параллельно уже прорабатывать более совершенные варианты?"

Теоретически - ДА, я мог бы очередное озарение(прорыв в понимании) «подвесить в воздухе» и закончить текущую версию. Но «практически» каждый качественный скачек давал настолько более выгодную, более совершенную альтернативу, что это просто предложение, от которого невозможно отказаться. Старая концепция по сравнению с новой казалась ну просто глупой и я не мог заставить себя продолжать тратить на неё время.

Со стороны кажется, что какой-то замкнутый круг, но это не так, потому что я не просто меняют одну парадигму на какую-то другую. Это все же скорее спираль, потому что каждая новая версия не только лучше предыдущей, но и является её логическим продолжением. Чем лучше? Тем, что она более детально и целостно описывает движение цены и для меня становится всё меньше и меньше рыночных ситуаций, которые не я в силах объяснить и заработать на них.

Теперь отдельно поясню, почему любую версию до запуска обязательно нужно было бы "доработать" и не абы как, а на 100% (а это, как вы понимаете, убило бы кучу времени).
Дело в том, что когда начинаешь "оцифровывать" свой опыт за 8-10 лет торговли, то алгоритм, так скажем, не может быть простым. В голове, много знаний, взаимосвязей определяющих поведение цены, поэтому и алгоритм будет многофакторный, многоступенчатый, а это значит, что любая ошибка в коде или недоделанный кусок схемы порождает искажение, которое на каждой последующей ступени только усугубляется и получается такой вот "эффект бабочки", здесь чихнули, а на другом конце океана (кода) ловите торнадо. Так что, либо вы запускаете то, что работает идеально, полноценно, что протестировано, перетестировано 100 раз либо лучше вообще не запускать, ибо в итоге там, где вы должны были покупать - вполне вероятно будете продавать. Короче риски будут непредсказуемыми.

КАК СЭКОНОМИТЬ ВРЕМЯ, МОИ СОВЕТЫ:


В процессе формализации у вас будет огромный список задач, проблем, вопросов, которые нужно будет решать. И тут самое главное правило звучит так: "всё что может быть отложено в сторону, должно быть отложено в сторону". Т.е. делать нужно только самое главное и самое важное.

Я понимаю, что звучит очевидно, но на практике "нет-нет" подмывает проверить какую-то "гениальную идею", которую вроде бы можно быстро закодить, получив при этом очень существенный эффект :) (хотя еще сама основа не дописана до конца). Или допустим хочется начать с того, что легче и быстрее делается и за один присест закрыть целую кучу мелких вопросов и задач, просто что б "отстреляться", хотя это не относится к самому важному и базовому в вашем алгоритме. Короче так или иначе, постоянно что-то провоцирует отдалиться от этого базового правила.

Так вот, почему это так важно, причины 2:
Во-первых, казалось бы, простые и легкие, на первый взгляд, задачи могут оказаться настоящими убийцами времени, вы можете наступить в такое болото - это пипец. То, что кажется займёт неделю, может занять несколько месяцев, невозможно просчитать все последствия даже маленьких апдейтов в сложный код (вспоминаем "эффект бабочки").

Есть вторая причина, почему так лучше делать, но для этого мне нужно еще раз вернуться к понятиям количественного и качественного роста системы.
Так вот, количественный рост системы в процессе детализации происходит постоянно, она неизбежно со временем обрастает новыми нюансами, уточнениями, критериями. Но как там говорил Гегель, под напором количественных изменений неизбежно произойдёт качественное изменение, т.е. такое изменение, которое прям кардинально меняет уровень анализа рынка.
В чем отличие? В отличие от количественного изменения, это не очередное нагромождение, не очередное усложнение системы, а как правило, наоборот, новый концепт разрушает массу уже созданных лишних нагромождений и делает алгоритм более лаконичным, более простым(на первый взгляд) и компактным, но в тоже время, разрешающим больший спектр проблем и задач, т.е. становится на маленький шажок ближе к гениальному. До гениального, как правило, еще бесконечно далеко, но шаг в этом направлении сделан.

Так вот, к чему я это... Чем больше нерешённых проблем и задач дотянут до ближайшего качественного скачка системы, тем большее их количество просто потеряет смысл и актуальность, потому что многие из них вообще перестанут для вас возникать в рамках вашей обновлённой торговой парадигмы.
Я это наблюдал на каждом своём качественном скачке. Как только происходит качественный скачек — я открываю перечень неразрешённых проблем и вопросов, каких-то рыночных ситуаций, которые я не мог обьяснить и прочее. Большую часть этого перечня можно просто удалять. А если какой-то перечень заморозить и вернуться к нему через 2-3 качественных скачка, то его скорее всего весь можно удалять.

Получается, что если б я потратил на них время, я б потратил его в пустую.

Ну вот что б максимально популярно обьяснить, представьте самое главное и основное в вашей концепции - это ствол дерева. Пускай будет береза. Этот ствол неизбежно пытается обрасти мелкими нюансами, критериями, константами, расширенными возможностями, это как вот какие-то веточки из ствола в разные стороны. Так вот, пока вы эти веточки не приделали к стволу, они вот там лежат где-то в куче, ждут вашего внимания. И когда происходит качественное изменение ствола, он уже становится не берёзовым, а каким-нибудь там, каучуковым. Но веточки у вас берёзовые, вы их к каучуковому стволу уже во-первых не приделаете, а во-вторых их уже и нахрен не нужно приделывать. Поэтому чем больше в этой куче будет веток, тем больше вы времени, получается, сыкономили.
Тут правда, я могу создать впечатление, что после качественного скачка проблем и вопросов становится меньше, но это не так. В новой концепции, как правило, новые задачи и вопросы :). Просто старые вопросы отпадают, а новые появляются. В чем тогда смысл качественного скачка, если вопросов меньше не становится? Смысл в более релевантном анализе рынка, в большем соответствии с действительностью, в большем выхлопе стратегии.
Ну вот вы изучаете окружающий мир. С каждым новым знанием вы всё больше постигаете эту реальность, поэтому у вас есть возможность действовать в ней более эффективно, но вопросов меньше не становится, потому что новые знания открывают новые пласты неизведанного, новые знания дают новые возможности, а как ими наиболее эффективно можно воспользоваться это новая пища для размышлений. Звучит парадоксально, но так устроен мир: наши знания и эффективность увеличиваются, увеличивая наш уровень "незнания" вокруг себя.

Короче, ребята... Эффект Даннинга — Крюгера меня просто расплющил на самом деле. До алгоритмизации я думал, что "всё знаю". "Что там сложного то на рынке?" :) Но я просто был не способен осознать всю глубину своей некомпетентности, а сейчас ощущаю себя так, как будто какое-то никчемное одноклеточное существо пытается познать бога. Одно только радует, что бы зарабатывать на рынке - не обязательно иметь ответы на все вопросы.

Так... я от темы отдалился, т.к. писал, как можно сыкономить время. Тут я брошу вдогонку еще один совет: даже делая самое главное и основное, т.е. вот этот самый "ствол", не пытайтесь писать «идеальный код». Ну что б он был более эффективный, красивый, быстрый. Просто забудьте об этом, потому что как показала лично моя практика: если «оцифровывать» какую-то концепцию, которую вы совершенствуете на ходу, то ЛЮБОЙ кусок кода, рано или поздно будет или частично переделан или полностью переписан или дополнен или вобще полностью удалён. Т.е. когда наступит момент запуска робота в реальной торговле — ваш код к тому моменту будет по нескольку раз полностью переписан))). Так что мой совет — пишите код как можно быстрее, игнорируя его «красоту». Оптимизацией займетесь после того, как он начнет вам бабло рубить, т.е. для большинства скорее всего НИКОГДА.

РАЗНИЦА В МЫШЛЕНИИ:

Прикольно, что многое воспринимается теперь совершенно не так, как при "ручной торговле".
Например, раньше, открывая позицию, а затем наращивая или сокращая её обьем (т.е. либо добавляясь либо частично разгружаясь), я воспринимал это как работу по одной стратегии, с одной позицией, просто увеличивая или уменьшая её объем. . Это так, сказать, "работа с позицией".
Но сейчас, я понимаю, что когда на откате я добавляюсь к позиции по лучшей цене, я не увеличиваю объем первого входа, я вхожу в совершенно другую стратегию. Т.е. 2 входа по разным ценам, но с одним тейкпрофитом — это 2 абсолютно разные стратегии, у которых на дистанции будет разный профит фактор, разный % прибыльных сделок, разная максимальная просадка, разное количество сделок (потому что лучшую цену, очевидно, рынок будет давать реже) и т.п. и т.п. Или же 1 вход, но разгрузкой в 2 этапа.. 50% по одной цене и 50% по другой — это тоже 2 абсолютно разные стратегии и одна может быть прибыльной на дистанции, а другая убыточна (ну типа либо в первом выходе сильно не досиживаешь, либо во втором сильно пересиживаешь). Соответственно в одной из них нет никакой необходимости.
И я уверен, что многие читатели в полной мере это пока не осознают, не мыслят такими категориями.

КОГДА ВАМ НАЧИНАТЬ АЛГОРИТМИЗАЦИЮ:

Я не могу утверждать наверняка, но если у вас нет существенного опыта ручной торговли, то, возможно, Вам лучше забыть всё что я тут понаписал :). Ну т.е. если вы первый год торгуете на рынке, то что-то там формализовывать будет просто смешно. Это, вероятно, не только не даст вам никакого развития, но даже наоборот, вы просто будете бессмысленно терять своё время. Объясню почему, в чем здесь разница между опытным и не опытным трейдером.

Дело в том, что когда я начал «оцифровывать» свой торговый опыт, через 8 то лет торговли, я в своем анализе оперировал целым арсеналом факторов, влияющих на поведение цены.
А если взять трейдера-новичка... ну откуда у него возьмётся этот арсенал? Дай бог, что бы он нашел хоть «что-то». И когда он будет бектестить это «хоть что-то в вакууме», то оно на истории будет срабатывать со случайной для него вероятностью, потому что он никакие другие рыночные факторы не учитывает. А предположить, что трейдер-новичек найдет «что-то такое» что ВСЕГДА перебивает ВСЕ остальные факторы, вместе взятые просто невозможно. Я даже не уверен, что такое вообще существует, это была б прям какая-то грааль.

Что б вы представляли как Я делаю ресёч по какому-то одному определённому фактору:
1) сначала бектест отсеивает все ситуации с этим фактором.
2) я вручную просматриваю все отобранные ситуации и вручную отбираю те примеры, в которых действительно на рыночную ситуацию мог повлиять ТОЛЬКО ЭТОТ ФАКТОР и никакой другой из тех, что мне известны, потому другие факторы либо на несущественных таймфреймах (относительно моего) либо находятся на достаточном расстоянии.. ну и так далее. Я отбрасываю ситуации, в который вижу, что тут помешало одно, тут помешало другое, а там, наоборот, есть другой сильный фактор, который не помешал, а помог и тогда не понятно, какой из них реально повлиял на цену или может быть они оба повлияли. Т.е. для адекватной статистики и вообще для изучения как рынок реагирует на что-то определённое, мне нужно отделить мух от котлет, а как трейдер-новичек всё это сделает — я просто понятия не имею, поэтому на сухом бектесте у него, мне кажется, что угодно даст случайные результаты. И хуже всего, если результаты будут выглядеть как положительные... тут есть все шансы пополнить ряды одураченных случайностью.

Но я могу ошибаться, это всего лишь мои поверхностные размышления. И уж тем более они не относятся к тем, кто будет программировать не опыт своей ручной торговли (рыночную логику, паттерны\фигуры), а просто какие-нибудь инфраструктурные неэффективности или математические-корреляционные расчетные модели, в чем я ничего не смыслю и ничего не могу прокомментировать.

КАКОЙ НУЖЕН БУДЕТ СОФТ\ИНСТРУМЕНТАРИЙ:


Я могу посоветовать только то, что использую сам. А лучше оно чем что-то другое или хуже — понятия не имею, потому что ничего другого я не пробовал. Но меня всё устраивает, я ни в чем не нуждаюсь и ничего менять пока не собираюсь, поэтому опишу в какой среде я работаю.

Значит, у меня полностью самописная программа (с нуля) на C#., которую я буду называть "самописным тестером".
1) Т.е. скармливаю ему биржевые данные... ну, ленту сделок, из которой он в оперативной памяти строит свечи с нужными мне таймфреймами. Т.е. график находится в памяти и его я, получается, и подвергаю анализу и бектесту.
(Ленту сделок можно экспортировать из многих торговых терминалов, например, NinjaTrader).

2) Что касается визуальной части, т.е. как увидеть то этот график, сделки свои бектестовые посмотреть, графический анализ свой посмотреть — это всё выводится у меня в виде скриншотов. Т.е. в нужный мне момент (ну там, вход выход из сделки, например) программа генерит график со всей этой информацией в виде скришнота. Если нужно несколько разных таймфреймов, значит будет просто несколько скриншотов. 10 таймфреймов, 10 скриншотов. Проблем нет.

Мы кстати делали версию, когда робот весь анализ выводил на график в терминал NinjaTrader, прямо в реальном времени. Т.е. в терминале автоматически строился графический анализ по нашему алгоритму — это очень удобно.

Еще должен сказать, что за все эти годы разработки инфрастуктура "самописного тестера" была в двух версиях:
1) Сначала была та версия, которая была у моего программиста изначально, потому что он еще до знакомства со мной уже тестировал свои идеи.
2) Сейчас она в моей версии, потому что я всё сам переписал под новый формат.
В чем была разница между 1 и 2 версией?
В первоначальной версии мы использовали минутные данные (не тиковые), сначала строили из них всю доступную историю в памяти, а потом как бы постфактум, на ней делали анализ и бестест.

Если у вас предполагается торговля внутридня, геморрой вас ждет тотальный с такой версией.

Поэтому мне пришлось всё переделать, теперь:
Во-первых, график в памяти я теперь строю из тиковых данных, а не из минуток.
Во-вторых, анализ поведения цены и бектестовые сделки делаются непосредственно в момент построения графика, прям как бы в реальном времени, на каждом текущем тике, поэтому никакое «заглядывание в будущее» теперь невозможно.

Построение графика и вывод его на скриншоты вам сделает любой прогер, но если хотите сэкономить время, могу вам прислать свой код. Хотя я пока не хочу отдавать его бесплатно - можете предложить свою цену). Как шутил мой прогер:"Ну... если с роботом ничего не получится, то ты теперь хотя бы сможешь работать программистом :)". Ржака... представляю своё резюме: "опытный специалист поможет с построением торговых роботов и формализацией, недорого, тел.: +123456789".

А еще, кстати, логи решают. У меня в коде, вообще тотальные логи. Любое действие записывается в лог. Какой-то элемент где-то удалили — запись в лог, какой-то переместили в другой список — запись в лог, в каком-то элементе изменили какое-нибудь значение — скорее всего запись в лог. Звучит, конечно, страшно, но лично мне это в процессе отладки и поиска багов экономит в итоге массу времени и сил.

Ладно... меня эта простыня подутомила уже))). Если о чем забыл сказать или что не понятно - спрашивайте.

И не забудьте лайк видосу поставить, репост и подписку :)

p.S. Для аудитории UT: я на my-trade.pro торгую CME фьючерсами... никаких акций. Фьючи на валюты, металлы, нефть, биржевые индексы. Если в неделю будет 1-2 сделки, то это уже хорошо, поэтому ждать интенсивного контента не стоит)). Тем более что там платная подписка.
Tags: Записки сказочного алготрейдера)
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 20 comments