Bayesian regression - Делал ли кто советник по этому алгоритму? - страница 45

 
http://www.quantalgos.ru/?p=1898 может автору топика пользу принесет...
Предсказание чего угодно с использованием Python | QuantAlgos
  • 2016.03.12
  • www.quantalgos.ru
Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python. Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между...
 
Ilnur Khasanov:
http://www.quantalgos.ru/?p=1898 может автору топика пользу принесет...
Делал нечто подобное на возврате к среднему, несколько по иному. Работает, но на реал выпускать нельзя. Есть проблемы, решения которых совершенно неясны. Основной недостаток метода - надо постоянно доказывать, что прав ты, а не рынок. :)
 

Генератор псевдослучайных чисел. (ГПСЧ)

По предложенному выше, методу полярных координат, преобразовал  ГПСЧ МТ4 в ГПСЧ с нормально распределённой случайной величиной.

Чтобы визуально убедится в правильности работы кода спроецировал на ценовой график результаты работы.

Вот что показывает штатный ГПСЧ после 1000 обращений. Площади прямоугольников гистограмм пропорциональны количеству сгенерированных случайных чисел попавших в этот диапазон вертикальной шкалы.


А теперь преобразовав эти тысячи обращений по формулам метода получается

вполне адекватный колокольчик.

 
Yuri Evseenkov:

По предложенному выше, методу полярных координат, преобразовал  ГПСЧ МТ4 в ГПСЧ с нормально распределённой случайной величиной.

Старый велосипед еще с mql4.com.
 

К попытке применения формулы Байеса. Ещё раз.

Задача. Используя теорему Байеса определить какое значение ещё не пришедшего тика наиболее вероятно.

Дано. Временной ряд  x,y.

 y=ax+b  Линия от последнего тика к будущему.

P(a,b|x,y)=P(x,y|a,b)*P(a)*P(b)/P(x,y);   (1)  Формула Байеса.

 P(a,b|x,y)- вероятность того, что коэффициенты a и b соответствуют координатам x и y будущего тика.

Нужно найти такие a и b, что бы эта вероятность ( правильней сказать вероятностная мера) была максимальной.

P(x,y|a,b) - в качестве функции правдоподобия возьмем реальную гистограмму распределения тиков по ценовым уровням. Функция задаётся  двухмерным массивом (матрицей) : ценовой диапазон - вероятность, процентное соотношение тиков попавших в этот диапазон к общему числу тиков.

P(b) - в качестве априорной вероятности b берется нормальное распределение приращений. Используется ГПСЧ с нормально распределенной величиной.

P(a)  коэффициент а определяет наклон прямой и знак прогнозируемого приращения. Пока мыслю использовать код  линейной регрессии выложенный мной раннее. Т.е принять вероятность найденного там коэфф. а за единицу. А в (1) подставлять вероятность Р(а) вычисленную с учетом разности этого а и вычисленного для данного y.

Возможно у вас есть мысли по поводу как ведет себя знак приращений каждого тика?


 

Тики в формулу подставлять точно не стоит. Нагенерировать на ФОРТС этих тиков может любой желающий, что каждый день и делается.

Проблема не в мат. методах, скорее. А  в адекватности выбора данных, к которым применять.

 
Зачем вообще брать искусственные тики? Вы можете и без высшей математики научиться их прогнозировать. Спросите MQ как.

Возьмите реальные тики, штук 10000 и посмотрите на распределение. Это хотя бы практично будет.
 
Alexey Burnakov:
Зачем вообще брать искусственные тики? Вы можете и без высшей математики научиться их прогнозировать. Спросите MQ как.

Возьмите реальные тики, штук 10000 и посмотрите на распределение. Это хотя бы практично будет.

Ну так функция правдоподобия P(x,y|a,b) в (1) и есть реальное распределение реальных тиков (тиковых объёмов) . Крайне редко нормальное. А P(a) и P(b) корректирующие вероятности, по законам принятым в качестве априорных вероятностей.

Что спросить MQ? Принцип моделирования тиков в тестере стратегий? Да , должен быть какой то принцип. Возможно зная его, и создаются тестерные  "граали". Но я пока не представляю разработку в режиме тестирования, т.к не имею ни тиковой истории, ни практики работы с ней.  Всё будет в реал тайме. 

   Заинтересовали ваши слова:

"Я вообще в своих экспериментах не делаю регрессию и значений цены (или ее преобразований), я предсказываю знак, но можно сказать, что это тоже часть ценовой информации.

Мои ошибки выглядят так:

      0           1

0    0,58      0,42 

1    0,43      0,57

 Или примерно так исходно:

1 - верно, 0 - ошибка: 1, 1, 0, 0, 0, 1 , 1, 1, 0, 1

И полученное распределение вероятности должно максимально отличаться от 0,5 / 0,5. Если получить взаимную незасисимость таких исходов, то мы придем к биномиальному распределению, а для него много-много всяких формул есть и статистические тесты.  " Конец цитаты.

Что , действительно биноминальное распределение рулит в случае предсказания знака? Что такое взаимная независимость исходов? Спасибо.

 
Yuri Evseenkov:

Ну так функция правдоподобия P(x,y|a,b) в (1) и есть реальное распределение реальных тиков (тиковых объёмов) . Крайне редко нормальное. А P(a) и P(b) корректирующие вероятности, по законам принятым в качестве априорных вероятностей.

Что спросить MQ? Принцип моделирования тиков в тестере стратегий? Да , должен быть какой то принцип. Возможно зная его, и создаются тестерные  "граали". Но я пока не представляю разработку в режиме тестирования, т.к не имею ни тиковой истории, ни практики работы с ней.  Всё будет в реал тайме. 

   Заинтересовали ваши слова:

"Я вообще в своих экспериментах не делаю регрессию и значений цены (или ее преобразований), я предсказываю знак, но можно сказать, что это тоже часть ценовой информации.

Мои ошибки выглядят так:

      0           1

0    0,58      0,42 

1    0,43      0,57

 Или примерно так исходно:

1 - верно, 0 - ошибка: 1, 1, 0, 0, 0, 1 , 1, 1, 0, 1

И полученное распределение вероятности должно максимально отличаться от 0,5 / 0,5. Если получить взаимную незасисимость таких исходов, то мы придем к биномиальному распределению, а для него много-много всяких формул есть и статистические тесты.  " Конец цитаты.

Что , действительно биноминальное распределение рулит в случае предсказания знака? Что такое взаимная независимость исходов? Спасибо.

По порядку. Да, тики генерируются по алгоритму в тестера. Пока еще тест на реальных тиках не в релизе. Есть статья на этом сайте как эти тики генерятся. Они совсем не реальные тики.

Про биномиальное распределение. Если вы предсказываете бинарную переменную, вы получаете матрицу 2*2 показывающую точность распознавания. Это по сути совместное распределение двух бинарных переменных, целевой и смоделированной.

Если ваша последовательность реализаций целевой переменной i.i.d. то есть независима и идентично распределенная, это открывает возможность применять многие критерии. Результат подбрасывания монеты именно такой. Это процесс Бернулли. Значит, события не зависят друг от друга. Если это в силе, ваше распределение вероятностей подчиняется биномиальному распределению. Например, количество успехов имеет свою вероятность, которая  приближенно нормальна.

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

Использование тиков для прогноза по-моему опасно, и модель должна настраиваться для каждого брокера отдельно.

Если брать тики из тестера стратегий - то будет серьёзное отличие от реальных, ибо тики в тестере генерируются по шаблону из ohlc значений минутных баров (https://www.mql5.com/en/articles/75). Поэтому скальперов никто никогда не тестирует, а сразу ставит на реальный счёт и оптимизирует по ходу дела.

Насчёт реальных тиков - они могут очень сильно отличаться от брокера к брокеру. Например в этой теме https://www.mql5.com/en/forum/64228/page2#comment_1960403 ( https://c.mql5.com/3/78/tbd.png ) приатачен скриншот, это распределение приращений тиков за один и тотже промежуток времени у двух разных брокеров. Длину промежутка не помню, что-то от дня до недели. В целом они совпадают, но у одного из них в два раза больше тиков без изменения цены. Если сравнить десяток брокеров то думаю возможны огромные различия, особенно у всяких кухонь с "внезапными свечами".
Как вариант, можно убирать все тики без изменений цены. Потом, есть нюанс что событие OnTick() в эксперте может пропускаться, и тогда в терминал придёт уже новая цена с пропусом предыдущей. Тобишь не 1.23456 -> 1.23490 -> 1.23410, а просто 1.23456 -> 1.23410. И вместо двух изменений ваша модель получит одно. 
Получится что промежуток времени между двумя соседними тиками не определён, и будут пропуски данных, я думаю это плохо.
Попробовать всёже стоит, вам надо использовать MT4 и программу Tickstory Lite (есть бесплатная версия) чтоб вставить в тестер реальные тики (берутся от брокера Dukascopy). Только MT4 терминал надо использовать с билдом меньше 950, иначе бесплатная версия tickstory будет делать тестовые данные с нулевым спредом.

Я что-то пробовал делать с тиками, вроде найти среднее, и покупать-продавать если текущая цена сильно отклонилась от средней. Если и был какой-то профит, то спред всё съедал, и я ушёл в таймфреймы покрупнее.

The Algorithm of Ticks' Generation within the Strategy Tester of the MetaTrader 5 Terminal
The Algorithm of Ticks' Generation within the Strategy Tester of the MetaTrader 5 Terminal
  • 2010.06.02
  • MetaQuotes Software Corp.
  • www.mql5.com
MetaTrader 5 allows us to simulate automatic trading, within an embedded strategy tester, by using Expert Advisors and the MQL5 language. This type of simulation is called testing of Expert Advisors, and can be implemented using multithreaded optimization, as well as simultaneously on a number of instruments. In order to provide a thorough testing, a generation of ticks based on the available minute history, needs to be performed. This article provides a detailed description of the algorithm, by which the ticks are generated for the historical testing in the MetaTrader 5 client terminal.