Алгоритмический трейдинг: формализаций определения горизонтальных уровней?
Добрый день коллеги.
Занимаюсь алгоритмическим трейдингом не первый день, но возникла проблема в самомо простом наверное и логичном (как многим может показаться) месте.
Как определить горизонтальный уровень в алгоритмической системе?
не задавать его вручную, а именно формализованно его определять и перемещать в зависимости от ситуации.
Хотелось бы услушать конструктивные мнения по данному поводу)
чтобы формализовать надо описать, что это горизонтальный уровень и почему он должен быть именно здесь, а потом уже по этому «ТЗ» составлять программный код. Но вот описание кроме Вас никто не сделает, по тому что никто не знает Вашего представления о горизонтальных уровнях
Перемещать уровень в зависимости от ситуации? Или он должен сам автоматически перемещаться в зависимости от ситуации? Я правильно понимаю, что программа сама должна находить уровни? Можно через процедуру расчёта кластеров по точкам закрытия (открытия/макс/мин) на заданном отрезке графика.
Во-первых нужно решить на каком количестве баров ищём консолидацию.
В принципе можно задать и диапазон баров, но это уже чуть сложнее.
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 число баров назад
Что такое «по шкале цена».
Моя твоя не понимайт.
Не я один задался вопросом, что Вы имели в виду. Вы никому реально не ответили.
Возможно, проблема не в алгоритмизации понятия, а в его неопределенности для Вас. Типа, сами не знаете, что хотите.
Макс Бодров, не смешите никого.)
У меня 130 разных ВДО в портфеле на 30 млн.))
Я спекулирую ими.В том числе и дефолтниками.
Поэтому, фишку нормально секу.
И МГКЛ тоже есть.Но по 110 покупат...
Arturruss, ну ну)) с пятой ногой, правильно подставленной, собака получила бы дополнительный бонус. А все избы имеют АНАЛИТИКОВ, которые разносят хомякам какие бумаги должны вырасти))), имеют свои ...
Сотни тысяч погибших с обеих сторон, Абрамс в Курской области, но — «Более 40 американских фильмов выйдут в российский прокат в 2025 году».
«Движуха нужна», военный хор на 23 февраля орет какую-то м...
Cheniere Energy, Inc. (СПГ США №1) — Прибыль 2024г: $4,492 млрд.
Дивы кв $0,50. Реестр 7 февраля 2025 года.
Экспорт СПГ в 2024г: 48,87 млн тонн; в 4кв 2024г: 12,68 млн тонн.
если
low[5 бара] < low[от 10 до 6 бара]
low[5 бара] < low[от 4 до 0 бара]
то через low[5] рисуем горизонтальную линию
Автор же, как я понял, имеет в виду зону некоторой консолидации.
«Как определить горизонтальный уровень в алгоритмической системе?»
В принципе можно задать и диапазон баров, но это уже чуть сложнее.
1. Считаем среднюю цену каждого бара (open+close)/2.
2. Вычисляем среднюю для всех средних баров из п.1.
Таким образом мы получаем ориентир.
3. Идём по барам и смотрим на сколько отклонились их цены открытия и закрытия от средней из п.2.
4. Если все отклонения не выходят за заданный нами диапазон, то мы обнаружили зону консолидации.
Для начала пойдёт.
То же самое можно сделать и просто для цен закрытия и открытия, чтобы не попадать на формации типа ромба.
Ну и по его длине.
Чем длиннее консолидация, тем больше(резче) будет движение.
Если ранжировать уровни, то одно, а если сравнивать уровень с недавней историей, то другое.
Моя твоя не понимайт.
Не я один задался вопросом, что Вы имели в виду. Вы никому реально не ответили.
Возможно, проблема не в алгоритмизации понятия, а в его неопределенности для Вас. Типа, сами не знаете, что хотите.