Блог им. Mackenna

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

    • 25 сентября 2019, 09:29
    • |
    • Mackenna
  • Еще

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

Думаю, что всем хочется покупать финансовые инструменты подешевле, а продавать подороже. Реакция участников торгов на новости, как правило, непропорциональна и чрезмерна: пессимисты склонны недооценивать актив, а оптимисты, напротив, его переоценивают. В определении текущих «перекупленности» или «перепроданности» активов теханализ помогает мало. Предположим, что золото подорожало и его цена в 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 – нужно продавать (покупать). Можно также анализировать динамику «справедливой цены».

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

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

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

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









★24
26 комментариев
Выглядит круто. А результат торговли с использованием этого метода есть?
avatar

Fedia, есть, но делать какие-то обобщения рано.

Мониторинг счета здесь.

avatar
Ен, это ведь про квалификацию трейдеров ролик
avatar
Алексей, ага и про математиков, которые считают грибы в огурцах 
avatar
на мой взгляд, все эти расчёты можно использовать только в мультиактивной корзине инструментов, переливая объёмы из одного актива в другой. В противном случае для конкретной валютной или фьючерсной пары модель упускает из расчётов множество «субъективных» ценообразующих факторов, и догоняться придётся до бесконечности.
avatar
Eugene Logunov, я специально выбрал в модель инструменты, которые торгуются круглосуточно.
avatar
«Можно использовать в торговле: если текущая цена выше (ниже) рассчитанных по модели значения «справедливой» цены и разница превышает два RMSE – нужно продавать (покупать).»

И вот тут неплохо бы бектестинг что будет если продавать и закрывать скажем по справедливой цене.
avatar
quant_trader, есть результаты бэк-теста, но они настолько оптимистичные, что никто все равно в такую эффективность не поверит: по евро доходность около 40%, по йене чуть более 20%, а по золоту — более 50% (годовых, без учёта комиссий). 
avatar
Mackenna, неплохо, а просадки? Риск ограничен стопами или нет?
avatar
quant_trader, тестировал без стопов — не придумал, куда их ставить. Просадки серьезные, особенно по золоту в прошлом году, когда голда в рост поперла — система-то получается контртрендовая.
avatar
Mackenna, знакомо.

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

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

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

Ваш вариант со стопом и тейком (напоминает сеточные) тоже имеет место быть, но мне не удалось такое прикрутить именно к справедливой цене. Короче контртренд разный бывает.
avatar
из выборки в 1483 строки

Да вы просто издеваетеся ))))
avatar
Очень странный результат. То ли у вас со сдвигом проблемы, то ли валидационный тест обучается на контроле…
avatar
А можно построить регрессию цены нефти на момент (t+k) k=1,2… от цен остальных инструментов на момент t. В моем понимании, что если модель значима с точки зрения определения локальной перекупленности/перепроданности, то должна быть статистически значимая предиктивная сила. Или я не прав?
avatar
А что такое «перцептрон без обратной обработки ошибок»?
avatar
Михаил, самоуверенный очень перцептрон! )
avatar
Эти методы очень эффективно показывают среднюю температуру по госпиталю. То есть, когда начнется дисбаланс ваша модель будет отставать, а когда дисбаланса нет, модель будет его предсказывать.
avatar
avatar
Мне определенно нравится Ваш подход к трейдингу)
avatar

теги блога Mackenna

....все тэги



UPDONW
Новый дизайн