Вариант волновой функции - страница 2

 
Maxim Romanov:
Вы разбираетесь в математике, может тогда решить другую задачу? Как составить систему уравнений и каких уравнений, чтобы описать весь существующий график? Естественно мультивалютные уравнения должны быть. Может процесс генерации системы уравнений, можно автоматизировать.

Напишу что знаю об этом, чисто вода и теория, конкретного ответа не умею. 

 

Есть мнение (вроде 100% доказано что так и есть), что полиномной функцией можно описать любую функцию, лишь бы степеней полинома хватило.

Есть например вектор цен  P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 

Задача - найти по пяти точкам следующую цену.

Для создания полиномов в функции f(x1, x2, x3, x4, x5) будем брать комбинации X, и коэффициенты (a1, a2, a3,... ) для умножения 

Начинаем с нулевой степени - f(x1, x2, x3, x4, x5) = [a0]

Добавляем первую степень -
f(x1, x2, x3, x4, x5) =  [a0]      + [a1] * [x1]     +  [a2] * [x2]      +  [a3] * [x3] +     [a4] * [x4]       + [a5] * [x5] 

это полином первой степени

Добавляем вторую степень - перемножаем по двое все комбинации X и домножаем на коэффициент A
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a6] * [x1] * [x2]      + [a7] * [x1] * [x3]       + [a8] * [x1] * [x4]       + [a9] * [x1] * [x5]       + [a10] * [x2] * [x3]     + [a11] * [x2] * [x4]  + ....[тут ещё десятки полиномов, я пропустил].... + [a12] * [x4] * [x5]

Добавляем третью степень -
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a15] * [x1] * [x2]  * [x3]       + [a16] * [x1] * [x2]  * [x4]  + .... +   [a17] * [x3] * [x4] * [x5]  

Итд пока не дойдём до пятой степени.
 f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]  + [a18] * [x1] * [x2]  * [x3] * [x4] * [x5]


Дальше - система уравнений - 

f(P1, P2, P3, P4, P5) = P6
f(P2, P3, P4, P5, P6) = P7
f(P3, P4, P5, P6, P7) = P8

....
нужно подбирать все эти коэффициенты a1, a2, a3, a4,.... Найти точное решение наверное сложно, нужно стремиться понизить ошибку между реальными результатами P6, P7,P8 и полученными.
P1, P2,... - Это цены, из вектора P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 
в системе будет столько уравнений, сколько вы хотите описать баров. 
Тут используется по пять баров для предсказания шестого, но реально пяти мало, нужно гораздо больше. 
Ещё не обязательно доходить до максимальной степени, можно остановиться гораздо раньше, но никто не знает когда именно, только по опыту можно сказать сколько степеней будет достаточно.

 

Это в целом. Конкретно для форекса есть ещё пара моментов - 
1) лучше вектор P заранее преобразовать в приросты, и вообще работать только с приростами цены, без чистых цен. 
P = {-0.00039; -0.00782;  0.01093; -0.00082; -0.00069;  0.00098}

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

 
Dr.Trader:

Напишу что знаю об этом, чисто вода и теория, конкретного ответа не умею. 

 

Есть мнение (вроде 100% доказано что так и есть), что полиномной функцией можно описать любую функцию, лишь бы степеней полинома хватило.

Есть например вектор цен  P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 

Задача - найти по пяти точкам следующую цену.

Для создания полиномов в функции f(x1, x2, x3, x4, x5) будем брать комбинации X, и коэффициенты (a1, a2, a3,... ) для умножения 

Начинаем с нулевой степени - f(x1, x2, x3, x4, x5) = [a0]

Добавляем первую степень -
f(x1, x2, x3, x4, x5) =  [a0]      + [a1] * [x1]     +  [a2] * [x2]      +  [a3] * [x3] +     [a4] * [x4]       + [a5] * [x5] 

это полином первой степени

Добавляем вторую степень - перемножаем по двое все комбинации X и домножаем на коэффициент A
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a6] * [x1] * [x2]      + [a7] * [x1] * [x3]       + [a8] * [x1] * [x4]       + [a9] * [x1] * [x5]       + [a10] * [x2] * [x3]     + [a11] * [x2] * [x4]  + ....[тут ещё десятки полиномов, я пропустил].... + [a12] * [x4] * [x5]

Добавляем третью степень -
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a15] * [x1] * [x2]  * [x3]       + [a16] * [x1] * [x2]  * [x4]  + .... +   [a17] * [x3] * [x4] * [x5]  

Итд пока не дойдём до пятой степени.
 f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]  + [a18] * [x1] * [x2]  * [x3] * [x4] * [x5]


Дальше - система уравнений - 

f(P1, P2, P3, P4, P5) = P6
f(P2, P3, P4, P5, P6) = P7
f(P3, P4, P5, P6, P7) = P8

....
нужно подбирать все эти коэффициенты a1, a2, a3, a4,.... Найти точное решение наверное сложно, нужно стремиться понизить ошибку между реальными результатами P6, P7,P8 и полученными.
P1, P2,... - Это цены, из вектора P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 
в системе будет столько уравнений, сколько вы хотите описать баров. 
Тут используется по пять баров для предсказания шестого, но реально пяти мало, нужно гораздо больше. 
Ещё не обязательно доходить до максимальной степени, можно остановиться гораздо раньше, но никто не знает когда именно, только по опыту можно сказать сколько степеней будет достаточно.

 

Это в целом. Конкретно для форекса есть ещё пара моментов - 
1) лучше вектор P заранее преобразовать в приросты, и вообще работать только с приростами цены, без чистых цен. 
P = {-0.00039; -0.00782;  0.01093; -0.00082; -0.00069;  0.00098}

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

полиномом N-ной степени можно интерполировать любую (непрерывную гладкую)  функцию по N+1 точке (они собственно и описывают полином). Задача сводится к выбору точек интерполяции. Методы есть, сводятся как правило к матричным операциям и можно просто посмотреть в справочнике. Всё настолько давно известно, что есть в мат.библиотеках отдельными функциями. Особо ленивый способ не требует даже таких усилий - просто на графике указываются явно особые точки (вершины, перегибы, пересечения) и получается интерполятор. Только ошибка интерполяции как правило нарастает к краям графика и использовать полученный полином при экстраполяции обычно(есть исключения) уже нельзя.

кстати, весьма интересно что все известные простые числа являются корнями довольно компактного уравнения. А также что неоткрытые ещё числа не описываются оным (то есть его нельзя использовать для предсказаний, только интерполяция)
 
Dr.Trader:

Напишу что знаю об этом, чисто вода и теория, конкретного ответа не умею. 

 

Есть мнение (вроде 100% доказано что так и есть), что полиномной функцией можно описать любую функцию, лишь бы степеней полинома хватило.

Есть например вектор цен  P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 

Задача - найти по пяти точкам следующую цену.

Для создания полиномов в функции f(x1, x2, x3, x4, x5) будем брать комбинации X, и коэффициенты (a1, a2, a3,... ) для умножения 

Начинаем с нулевой степени - f(x1, x2, x3, x4, x5) = [a0]

Добавляем первую степень -
f(x1, x2, x3, x4, x5) =  [a0]      + [a1] * [x1]     +  [a2] * [x2]      +  [a3] * [x3] +     [a4] * [x4]       + [a5] * [x5] 

это полином первой степени

Добавляем вторую степень - перемножаем по двое все комбинации X и домножаем на коэффициент A
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a6] * [x1] * [x2]      + [a7] * [x1] * [x3]       + [a8] * [x1] * [x4]       + [a9] * [x1] * [x5]       + [a10] * [x2] * [x3]     + [a11] * [x2] * [x4]  + ....[тут ещё десятки полиномов, я пропустил].... + [a12] * [x4] * [x5]

Добавляем третью степень -
f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]      + [a15] * [x1] * [x2]  * [x3]       + [a16] * [x1] * [x2]  * [x4]  + .... +   [a17] * [x3] * [x4] * [x5]  

Итд пока не дойдём до пятой степени.
 f(x1, x2, x3, x4, x5) = [все те предыдущие элементы]  + [a18] * [x1] * [x2]  * [x3] * [x4] * [x5]


Дальше - система уравнений - 

f(P1, P2, P3, P4, P5) = P6
f(P2, P3, P4, P5, P6) = P7
f(P3, P4, P5, P6, P7) = P8

....
нужно подбирать все эти коэффициенты a1, a2, a3, a4,.... Найти точное решение наверное сложно, нужно стремиться понизить ошибку между реальными результатами P6, P7,P8 и полученными.
P1, P2,... - Это цены, из вектора P = {1,06405; 1,06366; 1,05584; 1,06677; 1,06595; 1,06526; 1,06624;...} 
в системе будет столько уравнений, сколько вы хотите описать баров. 
Тут используется по пять баров для предсказания шестого, но реально пяти мало, нужно гораздо больше. 
Ещё не обязательно доходить до максимальной степени, можно остановиться гораздо раньше, но никто не знает когда именно, только по опыту можно сказать сколько степеней будет достаточно.

 

Это в целом. Конкретно для форекса есть ещё пара моментов - 
1) лучше вектор P заранее преобразовать в приросты, и вообще работать только с приростами цены, без чистых цен. 
P = {-0.00039; -0.00782;  0.01093; -0.00082; -0.00069;  0.00098}

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

В целом согласен с некоторыми замечаниями:

1. Не согласен, что, степень полинома должен равняться количеству баров в выборке. Смешиваете теплое с твердым. Степень полинома нужно брать по принципу чем больше - тем лучше, исходя из возможностей описания и сложности вычислительных процедур. Я, пока, остановился на степени 4, а период выборки может быть любым; 

2. При составлении полиномального уравнения Вы пытаетесь учитывать ковариацию переменных типа x1*x2*x3*.....*xn а в рассматриваемом мною варианте ковариация переменных автоматически заложена в процессе нахождения коэффициентов и достаточно задавать степень полинома;

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

4. Ценное замечание на счет попробовать работать с приращениями, нет проблем - осуществим в этом ключе и посмотрим. 

 
Maxim Kuznetsov:
полиномом N-ной степени можно интерполировать любую (непрерывную гладкую)  функцию по N+1 точке (они собственно и описывают полином). Задача сводится к выбору точек интерполяции. Методы есть, сводятся как правило к матричным операциям и можно просто посмотреть в справочнике. Всё настолько давно известно, что есть в мат.библиотеках отдельными функциями. Особо ленивый способ не требует даже таких усилий - просто на графике указываются явно особые точки (вершины, перегибы, пересечения) и получается интерполятор. Только ошибка интерполяции как правило нарастает к краям графика и использовать полученный полином при экстраполяции обычно(есть исключения) уже нельзя.

кстати, весьма интересно что все известные простые числа являются корнями довольно компактного уравнения. А также что неоткрытые ещё числа не описываются оным (то есть его нельзя использовать для предсказаний, только интерполяция)
Задача изысканий в пределах темы ветки не является точное предсказание цены следующего за выборкой бара, а нахождение закономерностей в поведении коэффициентов, сформированных последней выборкой для вероятностной оценки состояния рынка. Если заметили на первом графике при постоянных значениях коэффициентов, меняющихся из периода в период скачкообразно, а иногда, резко скачкообразно, расчетная цена меняется почти плавно в точном соответствии с фактическими значениями цены! Этому способствует тот факт, что, приведением в соответствие внутри периода ответственна уже степень полинома при постоянных коэффициентах. Иначе расчетная цена должна была меняться скачкообразно, но, этого не происходит.   
 
Yousufkhodja Sultonov:

В целом согласен с некоторыми замечаниями:

1. Не согласен, что, степень полинома должен равняться количеству баров в выборке. Смешиваете теплое с твердым. Степень полинома нужно брать по принципу чем больше - тем лучше, исходя из возможностей описания и сложности вычислительных процедур. Я, пока, остановился на степени 4, а период выборки может быть любым; 

2. При составлении полиномального уравнения Вы пытаетесь учитывать ковариацию переменных типа x1*x2*x3*.....*xn а в рассматриваемом мною варианте ковариация переменных автоматически заложена в процессе нахождения коэффициентов и достаточно задавать степень полинома;

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

4. Ценное замечание на счет попробовать работать с приращениями, нет проблем - осуществим в этом ключе и посмотрим. 

забегая(экстраполируя) сильно вперёд: на 50-й странице обсуждений будет переоткрыт ряд Тейлора и выявлена связь с SMA, и BBands для всех производных :-)
 
Yousufkhodja Sultonov:

3. Ошибочно думать, что, полиномальная регрессия полностью лишена  прогностических свойств.

Я имел ввиду такую операцию -
Когда будут найдены коэффициенты a0,a1,a2,a3.., то можно в функцию f(x1,x2,x3,x4,x5) подать самых последних 5 известных цен, и посчитать результат используя ранее найденные коэффициенты a0,a1,... В таком случае наша формула скажет нам цену на следующий (ещё неизвестный) бар. Это будет как-бы прогноз, но вот такое простое решение на форексе не прокатит, гарантирую 100%.

 

Вариант посложнее, с кроссвалидацией. Можно из системы убрать несколько уравнений (скажем процентов 30%, по рандому), и использовать их для кроссвалидации. Нужно сперва найти коэффициенты для уравнений в системе, а затем используя эти коэффициенты - найти результаты оставшихся (ранее убранных из системы) уравнений. Результат этих тестовых уравнений скорее всего не совпадёт с ожидаемым, и дальше нужно будет подбирать максимальную степень полинома и количество X для входа функции так, чтоб прогноз на этих тестовых уравнениях был близок к ожидаемому. 
В итоге подберётся такая конфигурация полинома, которая действительно находит какие-то правильные закономерности в данных. Так можно сделать модель реально способную к прогнозу, и например решить проблему классификации на 2 класса, типа правильно распознать где картинка карандаша, а где - картинка яичницы.
Но на форексе это не факт что принесёт прибыль, там всё сложнее. Можно попробовать кроссвалидацию заменить множеством валк-форвард тестов например, и помимо прошлых 2 гиперпараметров подбирать ещё и длины периодов оптимизации и теста при валкфарварде. Но гарантий успеха нету.


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

 

 

Maxim Kuznetsov:

кстати, весьма интересно что все известные простые числа являются корнями довольно компактного уравнения. А также что неоткрытые ещё числа не описываются оным (то есть его нельзя использовать для предсказаний, только интерполяция)

А что если применить знания торговли на форексе для поиска простых чисел? Найти полином не просто по какому-то набору простых чисел, а так как я написал выше, с кроссвалидацией или валк-форвардом?

 
Yousufkhodja Sultonov:

В целом согласен с некоторыми замечаниями:

1. Не согласен, что, степень полинома должен равняться количеству баров в выборке. Смешиваете теплое с твердым. Степень полинома нужно брать по принципу чем больше - тем лучше, исходя из возможностей описания и сложности вычислительных процедур. Я, пока, остановился на степени 4, а период выборки может быть любым; 

2. При составлении полиномального уравнения Вы пытаетесь учитывать ковариацию переменных типа x1*x2*x3*.....*xn а в рассматриваемом мною варианте ковариация переменных автоматически заложена в процессе нахождения коэффициентов и достаточно задавать степень полинома;

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

4. Ценное замечание на счет попробовать работать с приращениями, нет проблем - осуществим в этом ключе и посмотрим. 

   Относительно выбора степени полинома. Точнее, вида и числа функций, которыми что-то аппроксимируем. Вообще говоря, чем проще аппроксимирующая функция, тем лучше нам удалось выявить закономерности. Смотрите, как просто выглядят действительно фундаментальные законы: F=ma (2-й Ньютона); площадь сектора, ометаемого планетой за каждую единицу времени движения по орбите, одинакова (2-й Кеплера). К этому надо стремиться. Конечно, так просто не выйдет. Мерой допустимой сложности может служить принцип минимизации эмпирического риска Вапника (Алгоритмы и программы восстановления зависимостей, не соврать, конец 70-х). Наращивая степень полинома, легко получить резкое усиления влияния высших степеней с их быстро усиливающейся болтанкой.

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

Нулевая x0

Первая (x1-x0) / шаг

Вторая (x2-2x1+x0) / (шаг в квадрате)

Третья (-x3+3x2-3x1+x0) / (шаг в кубе)

...

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

 

Вот, предварительные результаты и выводы:

 

Первая производная  четко указывает на волну разворота, что является подарком для тех, кто торгует в долгосрок. Здесь, для наглядности, масштаб изменен.

 

Вот настоящая лихорадка на рынке перед разворотом в истинных значениях производной: 

 

Для краткосрочной торговли может оказаться полезным вот эта информация: 

 

 
Yousufkhodja Sultonov:

Вот, предварительные результаты и выводы:

 

Первая производная  четко указывает на волну разворота, что является подарком для тех, кто торгует в долгосрок. Здесь, для наглядности, масштаб изменен.

 

Вот настоящая лихорадка на рынке перед разворотом в истинных значениях производной: 

 

Для краткосрочной торговли может оказаться полезным вот эта информация: 

 

Юсуф,  прошу показать прогноз по евро.

Спасибо!

 
Dr.Trader:

Я имел ввиду такую операцию -
Когда будут найдены коэффициенты a0,a1,a2,a3.., то можно в функцию f(x1,x2,x3,x4,x5) подать самых последних 5 известных цен, и посчитать результат используя ранее найденные коэффициенты a0,a1,... В таком случае наша формула скажет нам цену на следующий (ещё неизвестный) бар. Это будет как-бы прогноз, но вот такое простое решение на форексе не прокатит, гарантирую 100%.

 

Вариант посложнее, с кроссвалидацией. Можно из системы убрать несколько уравнений (скажем процентов 30%, по рандому), и использовать их для кроссвалидации. Нужно сперва найти коэффициенты для уравнений в системе, а затем используя эти коэффициенты - найти результаты оставшихся (ранее убранных из системы) уравнений. Результат этих тестовых уравнений скорее всего не совпадёт с ожидаемым, и дальше нужно будет подбирать максимальную степень полинома и количество X для входа функции так, чтоб прогноз на этих тестовых уравнениях был близок к ожидаемому. 
В итоге подберётся такая конфигурация полинома, которая действительно находит какие-то правильные закономерности в данных. Так можно сделать модель реально способную к прогнозу, и например решить проблему классификации на 2 класса, типа правильно распознать где картинка карандаша, а где - картинка яичницы.
Но на форексе это не факт что принесёт прибыль, там всё сложнее. Можно попробовать кроссвалидацию заменить множеством валк-форвард тестов например, и помимо прошлых 2 гиперпараметров подбирать ещё и длины периодов оптимизации и теста при валкфарварде. Но гарантий успеха нету.


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

 

 

А что если применить знания торговли на форексе для поиска простых чисел? Найти полином не просто по какому-то набору простых чисел, а так как я написал выше, с кроссвалидацией или валк-форвардом?

Самые большие из найденных простых чисел - числа Мерсенна настолько велики, что Вам не хватит вычислительной мощности для расчетов.