суббота, 13 ноября 2021 г.

Деформация частотно-временной шкалы

Вчера я закончил правку кода, записал финальные версии программ в архив и думал, что я наконец-то прекратил программирование. Пора и за работу. Однако, не тут то было.



Но по порядку.
Когда-то меня посетила одна идея, связанная с основной темой моей диссертации.
Идея основана на том, что для некоторых нестационарных объектов и систем с переменными параметрами существуют шкалы времени, при рассмотрении в которых объект становится квазистационарным. И анализ состояния и интерпретация результатов анализа этого объекта становится проще.
В диссертации решалась техническая задача синхронизации аппаратуры анализа вибрационных и акустических сигналов поршневых, газотурбинных и ракетных (там тоже много чего вращается) двигателей с переменной частотой вращения основного вала этих объектов, а также задача интерпретации данных, полученных с помощью таких синхронных систем обработки сигналов.С какой бы частотой (угловой скоростью) ни вращалась основной вал двигателя или турбины, синхронная аппаратура отслеживает эту частоту, подстраивается под нее и выделяет вибрацию именно основного вала и других узлов, приводимых им в движение. Без такой подстройки в результатах показаний не было бы ничего кроме шума, который вы слышите в аэропорту.
Задача была успешно решена, попутно получена куча авторских свидетельств и опубликовано несколько научных статей, сделаны доклады на научных конференциях союзного масштаба. 
Диссертацию я защитил в докторском совете Лениградского политехнической института. Были проблемы с поиском совета из-за непривычности темы и того, что работа была на стыке многих специальностей. Потом, после защиты, мне пришлось сменить работу, а потом и профиль занятий. В конце 80-х я вообще забросил науку и ушел в бизнес. Но через много-много лет, снова вернулся к науке, уже применительно к трейдингу и сугубо в рамках личной инициативы.

Однако вернемся к идее деформации шкалы времени применительно к трейдингу. Возникла она давно, но я не знал, как к ней подступиться.
Постановку задачи я впервые опубликовал в сети 10-15 лет назад, потом были еще публикации, в том числе и на этом ресурсе. Процитирую последнюю публикацию почти полностью.



В обсуждении одной из публикаций я написал: "...кроме ренко есть еще одна очень интересная форма, я ее давно придумал. Это когда вместо времени используется длина тикового графика, т.е. сумма приращений цены по модулю. Очень интересные результаты, получаются. Но на практике тоже сложно реализовать. Хотя при наличии тиковой истории технически это возможно, но кроме некоторых экспериментов лет 10 назад я в этом направлении дальше не пошел."

Поступил вопрос:

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

Александр, ну это очень просто.
Покажу на примере.
Пусть есть последовательность тиков (первая колонка):
1.06118 0.00000
1.06135 +0.00017 0.00017
1.06115 -0.00020 0.00037
1.06150 +0.00035 0.00072
1.06160 +0.00010 0.00082
1.06185 +0.00025 0.00107

Вторая колонка — приращение цены от тика к тику, третья — собственное время инструмента, которое течет тем быстрее, чем быстрее изменения цены и останавливается если цена не меняется вовсе.
В 2007 году, когда я выполнял заказную НИР по анализу мирового рынка сахара, мы сделали в порядке побочного результата такую модель для сахарного рынка на ограниченном участке истории. Очень интересно было. Потенциал такого подхода в аналитике невозможно даже оценить, совсем по другому начинают выглядеть и индикаторы и алгоритмы обработки временных рядов, сформированных в собственном времени инструмента.
Родилось это не на пустом месте. Это следствие основной идеи моей кандидатской диссертации «Синхронная обработка сигналов и средства синхронизации в измерительных системах виброакустической диагностики».
Суть в следующем — при анализе синхронных методов обработки сигналов, источником которых являются динамические объекты с переменной частотой вращения, например, газотурбинные двигатели, возникают сложные методологические проблемы в интерпретации результатов. С изменением частоты вращения ротора меняются частоты вибрации всех узлов двигателя. И обычный спектральный анализ вибрации и акустического сигнала такого объекта невозможен. Где вибрация лопатки. где топливного насоса, где первой ступени ротора и т.д.

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

В диссертации я предложил более общий подход, предположив, что у каждого объекта нашей вселенной есть собственная система отсчета, собственная шкала времени, скорость течения которого зависит от скорости протекания процессов, происходящих в этом объекте. И рассмотрение свойств объекта в рамках этой системы отсчета, в этом собственном субъективном времени, позволяет упростить анализ и интерпретацию параметров процессов, происходящих в этом объекте.

Вариант для рынка описан выше. У каждого рынка — своя шкала времени. У застывших, малоликвидных, время почти не движется. У высоколиквидных течет с бешеной скоростью. Все стандартные индикаторы автоматически становятся адаптивными, сохраняя постоянные параметры в собственной системе отсчета и оказываясь переменными в шкале абсолютного времени.
Это была тема планируемой докторской, но… наступили 80-90-е. Тем более, что вся наука в этот момент начала дохнуть. А идея осталась и благополучно будет забыта со временем.

P.S. Собственных систем отсчета, учитывающих несколько параметров процессов, протекающих в исследуемом объекте, может быть множество. В идеале для каждого параметра может быть построена своя система , своя шкала времени, рассмотрение в которой позволит получать результат более просто и более эффективно. В том числе и учет тех параметров, о которых говорите вы. Главное корректно все обдумать и сделать. В частности можно нормировать изменение цены к объему или взять произведение
этих двух параметров. Да все что угодно - тут такое богатое пространство для исследований и изысканий, что даже представить невозможно.

P.P.S. Хочу только добавить, что поразмыслив над ситуацией я пришел к выводу. что наличие тиковой истории не обязательно. Ее можно эмулировать на основе минутного графика, моделируя движения рынка внутри минуты примерно так, как это делает тестер метаквотсов. А чтобы сохранить однозначность данных при работе в реальном времени нужно использовать результаты только по завершенным интервалам минутного графика. т.е. работать по закрытию баров (свечей), что в принципе явлется естественным для большинства торговых стратегий...

Пара человек бросились помочь с реализацией, но так и пропали, ни привета, ни ответа.
А идея тем временем никуда не делась, дремала в подсознании. Мозг неспешно решал задачу, а так как я об этом даже не думал, то решал он ее без помех.

Что случилось сегодня? 
Сегодня я проснулся, глянул на часы на смартфоне - 5:01 и пошел принимать душ. Вернулся, а на часах 1:20. 
Шок непонимания, потом я сообразил, что спросонок переставил цифры и увидел не то что было, восприятие показаний деформировалось. И тут в мозгах что-то щелкнуло, пазл сложился, и старая задача вылезла на поверхность с решением. Сон все равно уже перебился, я сел за компьютер и начал пробовать варианты.

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

Физический смысл решения следующий.

Тренды SWT-метода получаются путем разделения графика цены на составляющие с помощью гребенки полосовых фильтров.




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

Полученные тренды затем анализируются по обычной процедуре SWT-метода.

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

Главная проблема - как двигать и какую волатильность брать за основу. Общую для всей гребенки, или отдельную для каждого таймфрейма и группы связанных с ним фильтров. Над этим и будем думать.

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

Базовый алгоритм:



Деформация шкалы времени через волатильность:





27 комментариев:

  1. У меня всё началось со статьи «внутренние миры динамических систем»
    Тоже использую производную, но она крайне «вертлявая» как выразился мой друг.
    С удовольствием подключусь к дискуссии.

    ОтветитьУдалить
    Ответы
    1. Что имеем, то имеем. Лучше бы в шкале длины тикового графика, но это сложно реализовать программно.
      Производная - это по сути разница цен закрытия соседних баров, этакая усредненная скорость изменения цены. Чуть больше данных дает АТР. Но и то и то далеко от идеала.
      Нужен ли идеал? Не знаю. Если это даст эффект, то эффект вылезет и на реализованных простейших приближениях.

      Удалить
    2. Про производную - именно так. Но если брать несглаженные данные получается не информативно - слишком прерывисто. Пробовал компенсировать оверсемплингом - не сильно помогает. Не могу график подсоединить сюда - показал бы. А насчёт шкалы длин тиковых данных, если честно, не понял что вы имели ввиду.

      Удалить
    3. Внутри основного текста большая цитата. Там описан подход, который все ставит на свои места, но который очень трудоемок в реализации (по крайней мере для меня).Оабота через волатильность и скорость не совсем корректна, очень грубое приближение.

      Удалить
  2. теперь понял. Это описано в книге Де Прадо. Он правда это использовал для другого, но суть не меняет. Он рассматривал три типа системы отбора баров - тиковые, объемные и долларовые. У этих баров интересные статистические свойства - они гораздо более «нормально» распределены чем синхронные бары. Я сделал долларовые бары, но они оказались более волатильными чем остальные. Остановился на объемных. Вместе с фильтрацией неплохо получается. Попробую добавить порог, посмотрю как изменится. Насколько понимаю должен появится не только количественный параметр, но и направленный.

    ОтветитьУдалить
    Ответы
    1. Книг давно не читаю. Никаких. Поэтому чуть подхода Прадо и Вашего из комментария не понял.
      Если кинете коротенькую ссылку на какую-либо статью, гляну в чем сходство. И может даже почерпну что интересное.

      Удалить
    2. Пришлите почту - пришлю вырезку из книги.
      gdron55@gmail.com

      Удалить
    3. Почта в контактах. Левая колонка вверху.

      Удалить
  3. Глянул про тиковые бары. Похоже, но немного не то, что предлагалось мною.Совпадение будет, если все тики одного размера. У меня, если перевести на язык тиков, в основной идее не количество тиков, а длина тикового графика в единицах минимального изменения цены. А так похоже. Только я лет на 12 раньше это пробовал, в 2006 году.

    ОтветитьУдалить
  4. У него тиковые бары - это именно счетная величина, их количество. То о чем вы говорите - это, опять же в терминах автора, долларовые бары. Я сделал программу насчитывающую долларовые бары. Они оказались более волатильными по сравнению с объемными. Использую теперь их. И всё равно нужен механизм «подстройки» под текущий темп торгов потому как на медленном рынке система теряет чувствительность. Для фьючерса на насдак это примерно 1300-2000 контрактов в минуту

    ОтветитьУдалить
  5. Или же я неправильно понимаю вашу идею

    ОтветитьУдалить
    Ответы
    1. Что сделали вы, я не знаю, поэтому остается верить вам на слово.
      Что хотел сделать я написано в примере в тексте. Повторю его

      Александр, ну это очень просто.
      Покажу на примере.
      Пусть есть последовательность тиков (первая колонка):
      1.06118 0.00000
      1.06135 +0.00017 0.00017
      1.06115 -0.00020 0.00037
      1.06150 +0.00035 0.00072
      1.06160 +0.00010 0.00082
      1.06185 +0.00025 0.00107

      Вторая колонка — приращение цены от тика к тику, третья — собственное время инструмента, которое течет тем быстрее, чем быстрее изменения цены и останавливается если цена не меняется вовсе.

      Удалить
    2. График по этим данным строится так.
      Длина оси ыремени - от 0 до 107.
      Начальная точка - 1.06118. Далеелинейно от 1.06118 к 1.06135 в точке 17 по оси х. И т.д. Пила вверх вниз с длиной зубъев по амплитуде, равной приращению цены, и с шириной, тоже равной этому приращению.
      Сорри, но лень рисовать. Меня сегодня в сон клонит весь день :)

      Удалить
    3. Масштаб по обеим осям равен минимальному изменению цены.

      Удалить
  6. Таким будет новый график. А дальше его можно сжать, построив бары или свечи, объединяя данные, например по 10, 100, 1000 или любому другому количеству единиц.
    Сложностей особых нет. Но есть две проблемы:
    1. Нет тиковой истории, но это решаемо алгоритмами эмуляции или моделирования.
    2. Нужно программировать, а как к этому подступиться я не знаю. Это большой кусок работы.

    ОтветитьУдалить
  7. Так это у Прадо или нет, я еще детально не смотрел, глянул одним глазом. Может и так. :)
    Посмотрю позднее, когда время позволит.

    ОтветитьУдалить
    Ответы
    1. Распечатал страницы 52-55. Посмотрю внимательнее.

      Удалить
    2. На первый взгляд ни один из вариантов, описанных в книге, не подходит.

      Удалить
    3. у меня, если цена не меняется, то новое время стоит. Нет движения графика. нет новых точек.
      Если на одном тике бросок цены на 100 квантов, неважно вверх или вниз, то по шкале времени проходит 100 единиц.

      Удалить
    4. Если 5 квантов, то по 5, если один, то по одному. Чем больше изменение цены, тем больше единиц по шкале времени.

      Удалить
    5. Ну подробнее уже некуда. :)

      Нет движения цены, нет изменений.

      Чем больше изменение цены, тем больше проходит времени по новой шкале. Реакция на большие изменения мгновенная.

      Удалить
    6. Да - более чем подробно :) Попробую сейчас сделать и сравнить что получается

      Удалить
  8. Картинки жаль нельзя прикреплять

    ОтветитьУдалить