Mackenna
Mackenna личный блог
25 сентября 2019, 09:29

Математическая модель рынка. Метод определения "справедливых" цен

Здравствуйте, дамы и господа!

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

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

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

Для своей модели я выбрал следующие десять: евро, франк, йена, канадский доллар, золото, серебро, медь, фьючерс на S&P, нефть Brent, природный газ. В датафрейм включил также в качестве одного из факторов, влияющих на цены, даты наблюдений в целочисленном формате (как в Excel) для учета влияния долгосрочных тенденций и инфляции.

Данные взял из MT4 (Forex Club) с 01.01.2014 по настоящее время (D1, 1483 строки):

Математическая модель рынка. Метод определения "справедливых" цен

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

Математическая модель рынка. Метод определения "справедливых" цен

Для каждой строки датафрейма сгенерил в столбце «Random» случайное число. Для обучающей выборки взял значения, меньшие 0.8 по модулю, а для тестовой – все остальные. Получилось 1164 и 319 строк соответственно.

Математическая модель рынка. Метод определения "справедливых" цен

По данным обучающей выборки создал три модели для расчета «справедливой» цены евро: с помощью нейросети, линейную регрессионную и «мою модель». Рассчитанные моделями значения EUR по данным тестовой выборки внес в таблицу, добавив три столбца «PrNN», «PrLM» и «PrMM»:

Математическая модель рынка. Метод определения "справедливых" цен

Схема нейросети:

Математическая модель рынка. Метод определения "справедливых" цен
Для сравнения качества моделей рассчитал RMSE (Root mean square error):

Математическая модель рынка. Метод определения "справедливых" цен

Как видно на скриншоте выше, традиционные модели, нейросеть и линейная регрессионная, дали дали близкую по величине ошибку – чуть более полутора процентов. Причем, качество регрессионной модели высокое: коэффициент детерминированности R2 = 0.92, что примерно соответствует коэффициенту корреляции 0.85. Распределение ошибок – нормальное, проверял тестом Шапиро-Уилка и критерием Пирсона («хи-квадрат»): 

Математическая модель рынка. Метод определения "справедливых" цен  Математическая модель рынка. Метод определения "справедливых" цен
Но какой результат дал алгоритм «Моей модели»! Ошибка менее 0.4% (!).

Математическая модель рынка. Метод определения "справедливых" цен Математическая модель рынка. Метод определения "справедливых" цен

Причина вот в чем: на качество модели, особенно регрессионной, большое влияние оказывают так называемые «выбросы» — значения прогнозируемого показателя, существенно отклоняющиеся от средних. Они вызывают отклонение линии регрессии от области, в которой сосредоточена большая часть значений показателя, что ухудшает способность модели прогнозировать показатель. Обычно выборку разными способами очищают от «выбросов», но я счел это неприемлемым в данном конкретном случае, так как отсутствуют четкие критерии определения «выбросов» и существует риск получить в результате выборку, не отражающую свойства генеральной совокупности.

Я, как когда-то один из классиков М-Л, «пошел другим путем»:  я создал из выборки в 1483 строки данных 500 «субвыборок»,  в которые случайным образом включал 90% данных. В исключенные 10% данных иногда попадали «выбросы» и построенная по такой субвыборке модель становилась качественнее. Построив 500 регрессионных моделей и рассчитав 500 значений моделируемого показателя, я принимал к в качестве прогнозного его значения среднее арифметическое из 500 смоделированных значений. Результат работы такого алгоритма приведен выше.

Так как распределение «ошибок» нормальное, то с вероятностью 67% текущее фактическое значение цены финансового инструмента будет находиться в интервале +-RMSE, а с вероятностью 95% в интервале +-2*RMSE.

Модель вполне годится для расчета «справедливых» цен финансовых инструментов с приемлемой точностью. Можно использовать в торговле: если текущая цена выше (ниже) рассчитанных по модели значения «справедливой» цены и разница превышает два RMSE – нужно продавать (покупать). Можно также анализировать динамику «справедливой цены».

С помощью предложенного метода также можно определять «справедливые» цены компаний по показателям ФХД, но с учетом ситуации на рынке – «аппетита к риску», стоимости валюты, в которой акция номинирована, цен на сырье и т.п.

Профита всем!

Если статья вам понравилась, вместо кнопки «Хорошо» жмите сюда,

                                                                        А если нет, то сюда.









26 Комментариев
  • Fedia
    25 сентября 2019, 09:32
    Выглядит круто. А результат торговли с использованием этого метода есть?
  • bozon
    25 сентября 2019, 10:05
    на мой взгляд, все эти расчёты можно использовать только в мультиактивной корзине инструментов, переливая объёмы из одного актива в другой. В противном случае для конкретной валютной или фьючерсной пары модель упускает из расчётов множество «субъективных» ценообразующих факторов, и догоняться придётся до бесконечности.
  • quant_trader
    25 сентября 2019, 11:09
    «Можно использовать в торговле: если текущая цена выше (ниже) рассчитанных по модели значения «справедливой» цены и разница превышает два RMSE – нужно продавать (покупать).»

    И вот тут неплохо бы бектестинг что будет если продавать и закрывать скажем по справедливой цене.
      • quant_trader
        25 сентября 2019, 11:46
        Mackenna, неплохо, а просадки? Риск ограничен стопами или нет?
          • quant_trader
            25 сентября 2019, 11:56
            Mackenna, знакомо.

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

            Наверно это можно опционами выруливать, спредами всякими.
    • MS
      25 сентября 2019, 12:56
      quant_trader, + прибавить стоп = k* RMSE, где k = 1 или 2.
      • quant_trader
        25 сентября 2019, 15:09
        MS, у чистого контртренда обычно при удалении от средней МО скорее растет, т е взяв на минус два брать лося на минус три нелогично. На истории :)
        • MS
          25 сентября 2019, 15:24
          quant_trader, кто что имел в виду. МО чего? А в контртрейде статистически есть зона, где МО результата (тейк и стоп равны) с учётом комиссии >0. И не слишком редко она достигается.
          • quant_trader
            25 сентября 2019, 16:06
            MS, сорян. Попробую на нормальном языке. Мы о разных вариантах.

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

            Ваш вариант со стопом и тейком (напоминает сеточные) тоже имеет место быть, но мне не удалось такое прикрутить именно к справедливой цене. Короче контртренд разный бывает.
  • Пафос Респектыч
    25 сентября 2019, 11:13
    из выборки в 1483 строки

    Да вы просто издеваетеся ))))
  • Kot_Begemot
    25 сентября 2019, 13:12
    Очень странный результат. То ли у вас со сдвигом проблемы, то ли валидационный тест обучается на контроле…
  • Michael
    25 сентября 2019, 13:18
    А можно построить регрессию цены нефти на момент (t+k) k=1,2… от цен остальных инструментов на момент t. В моем понимании, что если модель значима с точки зрения определения локальной перекупленности/перепроданности, то должна быть статистически значимая предиктивная сила. Или я не прав?
  • Михаил
    25 сентября 2019, 14:14
    А что такое «перцептрон без обратной обработки ошибок»?
    • Oerlikonium
      25 сентября 2019, 14:30
      Михаил, самоуверенный очень перцептрон! )
  • Cristopher Robin
    25 сентября 2019, 15:19
    Эти методы очень эффективно показывают среднюю температуру по госпиталю. То есть, когда начнется дисбаланс ваша модель будет отставать, а когда дисбаланса нет, модель будет его предсказывать.
  • зщшгнекуцй
    25 сентября 2019, 21:16
  • Алекс72
    26 сентября 2019, 06:38
    Мне определенно нравится Ваш подход к трейдингу)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн