Алгоритмический трейдинг: формализаций определения горизонтальных уровней?
Добрый день коллеги.
Занимаюсь алгоритмическим трейдингом не первый день, но возникла проблема в самомо простом наверное и логичном (как многим может показаться) месте.
Как определить горизонтальный уровень в алгоритмической системе?
не задавать его вручную, а именно формализованно его определять и перемещать в зависимости от ситуации.
Хотелось бы услушать конструктивные мнения по данному поводу)
чтобы формализовать надо описать, что это горизонтальный уровень и почему он должен быть именно здесь, а потом уже по этому «ТЗ» составлять программный код. Но вот описание кроме Вас никто не сделает, по тому что никто не знает Вашего представления о горизонтальных уровнях
Перемещать уровень в зависимости от ситуации? Или он должен сам автоматически перемещаться в зависимости от ситуации? Я правильно понимаю, что программа сама должна находить уровни? Можно через процедуру расчёта кластеров по точкам закрытия (открытия/макс/мин) на заданном отрезке графика.
Во-первых нужно решить на каком количестве баров ищём консолидацию.
В принципе можно задать и диапазон баров, но это уже чуть сложнее.
1. Считаем среднюю цену каждого бара (open+close)/2.
2. Вычисляем среднюю для всех средних баров из п.1.
Таким образом мы получаем ориентир.
3. Идём по барам и смотрим на сколько отклонились их цены открытия и закрытия от средней из п.2.
4. Если все отклонения не выходят за заданный нами диапазон, то мы обнаружили зону консолидации.
Для начала пойдёт.
То же самое можно сделать и просто для цен закрытия и открытия, чтобы не попадать на формации типа ромба.
скользящим окном длиной N, определяете ошибку равную сумме квадратов разности между текущим значением в этом окне и началом интервала. Минимум этого функционала, и есть Ваш самый горизонтальный уровень.
Машковский Евгений, Для каждого вновь пришедшего бара смотрим окно назад на N баров., где в рамках окна для каждого бара считаем количество баров в разные стороны (до границ окна) для которых цена меньше текущего бара (при проходе по всем в рамках окна). Ранжираем. Далее выбираем этот максимум по рангу. Таким алгоритмом отсекаем края окна и именно ищем локальные экстремумы. Далее это значение(цена уровня) с датой последнего бара пишем в БД. Так же не сложно сюда добавляется влияние объема, не все локальные, даже ярко выраженные экстремумы важны. Так копим единую таблицу уровней, в которой с приходом каждого нового бара ранги пересчитываются. На Oracle + SQL(PL/SQL) это делается элементарно, быстро, просто и понятно., и есть возможность махом просчитывать все эти уровни для многих инструментов (только сервак пошустрее).
AlexGru, была мысль определять важность уровня следующим образом: храним все уровни за определенный промежуток времени например месяц, два, три и т.п. Затем смотрим сколько раз цена воспринимала этот уровень как сильный, т.е. начиналась консолидация (или сколько раз мы автоматически определяли данный уровень как уровень (плюc/минус погрешность). А дальше рейтинг 1- слабый локальный, 2-4 — средней важности уровень, 5-и т.д. очень важный уровень. (для примера: у нас за квартал система 7 раз определила уровень 140 000 следовательно уровень нифигово важный и ключевой и если перед ним есть уровень 139500 определенный 1 раз, то смотрим на 140 000 ).
Машковский Евгений, думаю, что важность уровня можно определить по объёмам, которые прошли внутри него.
Ну и по его длине.
Чем длиннее консолидация, тем больше(резче) будет движение.
Иван Правдин, Тогда скорее не внутри него а на границах уровня, например свечи которые прокалывали уровень или касались его. Какой там был объем в сравнении со средним объемом за n число баров назад
Что такое «по шкале цена».
Моя твоя не понимайт.
Не я один задался вопросом, что Вы имели в виду. Вы никому реально не ответили.
Возможно, проблема не в алгоритмизации понятия, а в его неопределенности для Вас. Типа, сами не знаете, что хотите.
Николай Иванов, Статистика по инфляции так себе и это ещё падение рубля не в полной мере оказало влияние. Ставку точно будут повышать и могут сильно. У озона впереди закрытие торгов для переезда на...
Вот он настоящий защитный актив, который мы заслужили! Пока первый эшелон летает на 5-10% за полчаса, тут спокойствие как на кладбище. 4-5 лотов в час во время самой жары утром!
если
low[5 бара] < low[от 10 до 6 бара]
low[5 бара] < low[от 4 до 0 бара]
то через low[5] рисуем горизонтальную линию
Автор же, как я понял, имеет в виду зону некоторой консолидации.
«Как определить горизонтальный уровень в алгоритмической системе?»
В принципе можно задать и диапазон баров, но это уже чуть сложнее.
1. Считаем среднюю цену каждого бара (open+close)/2.
2. Вычисляем среднюю для всех средних баров из п.1.
Таким образом мы получаем ориентир.
3. Идём по барам и смотрим на сколько отклонились их цены открытия и закрытия от средней из п.2.
4. Если все отклонения не выходят за заданный нами диапазон, то мы обнаружили зону консолидации.
Для начала пойдёт.
То же самое можно сделать и просто для цен закрытия и открытия, чтобы не попадать на формации типа ромба.
Ну и по его длине.
Чем длиннее консолидация, тем больше(резче) будет движение.
Если ранжировать уровни, то одно, а если сравнивать уровень с недавней историей, то другое.
Моя твоя не понимайт.
Не я один задался вопросом, что Вы имели в виду. Вы никому реально не ответили.
Возможно, проблема не в алгоритмизации понятия, а в его неопределенности для Вас. Типа, сами не знаете, что хотите.