6-я степень Поли Помогите!

 
Позвольте мне представиться. Я архитектор баз данных (в отличие от математика) с очень сильными навыками программирования в области баз данных (sql, t-SQL, PL/SQL) и достаточными навыками в языках, не относящихся к базам данных (C, C++, C#, VB/VBA). Я много, много, много лет работал в сфере финансовых услуг и очень хорошо разбираюсь в Excel (и мне очень нравится 2013, спасибо!).

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

В этом и заключается цель моих поисков.

На следующем графике можно наглядно убедиться в стабильности линий тренда полинома 6-й степени. Полином значительно более стабилен в большем диапазоне, чем метод SMA, и все это с номинальной степенью задержки! Проще говоря: полиномы не дрогнут. Я влюбился в полилинии тренда Excel с того дня, когда использовал их для определения вершины рынка недвижимости в 08 году (тренд определил изменения в мае-июне, а обвал произошел в августе-сентябре, как я помню), что позволило мне серьезно предостеречь команды по снижению рисков ипотечного портфеля, которые я обслуживал в то время (хотя и визуально)!

Полиграф

Теперь начинаются мои поиски.

Теперь, когда я определил практическое применение, я попытался изучить (или, в моем случае, заново изучить) математику, стоящую за формулой линии политренда. Удачи вам в этом. Сокращение наименьших квадратов и матрицы, добавленные к чрезвычайно сложной формуле и требуемым расчетам коэффициентов, введенным полиномиальным уравнением, слишком сложны (для меня) для перевода в код. Поэтому я решил, что проще всего будет вызвать Excel (скорее всего, из c++), предоставить массив значений данных (x,y), вычислить перехват поли(x,y) (значение линии тренда), используя LINEST(), и вернуть это значение обратно в мое настольное приложение (закрытое проприетарное программное приложение с ограниченной функциональностью вызова).

Сборка формулы с помощью LINEST() стала существенным препятствием. Достаточно легко предоставить данные - но как я могу вычислить интервалы (x,y), которые так безупречно отображаются на графике? Каждый новый показатель меняет формулу и использует новые рассчитанные коэффициенты? Почему так происходит? Я потратил часы, часы (и даже больше) на поиски решения в Интернете - и (как мужчина) решил, наконец, спросить совета.

У меня есть исходные значения (годы за годами). Чего мне не хватает, так это a) метода генерации перехвата poly(x,y), b) внешнего вызова Excel для c) возврата poly(x,y) на основе предоставленных данных (x,y).

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

dj


 

Индикатор i-regr может выполнять произвольную полиномиальную регрессию любой степени. Я никогда не пробовал ничего выше 3-й степени, но код можно посмотреть. 6-я степень, вероятно, убьет ваш процессор, но вы можете попробовать.


https://www.mql5.com/en/code/8417

 
rocketman99:

Индикатор i-regr может выполнять произвольную полиномиальную регрессию любой степени. Я никогда не пробовал ничего выше 3-й степени, но код можно посмотреть. 6-я степень, вероятно, убьет ваш процессор, но вы можете попробовать.


https://www.mql5.com/en/code/8417



Спасибо, rocketman! Это не убило мой процессор вообще - я буду работать с этим некоторое время, используя и посмотрим, что я придумаю.

Обновление:

i-regr, похоже, не обладает высокой степенью точности - возможно, из-за метода Гаусса (i-regr) и метода наименьших квадратов (excel), используемых для решения. Я не знаю - все еще ищу, у кого-нибудь есть лучшие полипроцедуры?

 

i-regr работает на значении Close[] каждого бара, что, вероятно, имеет значение (я предполагаю, что вы уравняли длины паттернов в MT4 и excel).

Вы можете легко изменить это, заменив Close[] на Open/High/Low или на любое другое аналитическое выражение, например, весовую функцию.

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

 

Привет, dennisj2,

вы уверены, что вам действительно нужна ваша формула?

Может быть, сначала попробуйте поискать другие фильтры, такие как Kalman, Ehlers, Gauss, Jurik (JMA), DEMA. Большинство из них происходит от низкочастотных (физических) частотных фильтров и большинство из них нашли свой путь в mt4-код.

Может быть, JMA (есть много вариаций) с более длинным периодом делает то, что вы ищете?


 
Или сходить с ума с помощью индикатора AllAverages http://www.forexfactory.com/showthread.php?t=418219.
 
dennisj2:
Теперь начинаются мои поиски.

Теперь, когда я определил практическое применение, я попытался выучить (или, в моем случае, заново выучить) математику, стоящую за формулой линии тренда. Удачи вам в этом. Сокращение наименьших квадратов и матрицы, добавленные к чрезвычайно сложной формуле и требуемым расчетам коэффициентов, введенным полиномиальным уравнением, слишком сложны (для меня) для перевода в код. Поэтому я решил, что проще всего будет вызвать Excel (скорее всего, из c++), предоставить массив значений данных (x,y), вычислить перехват поли(x,y) (значение линии тренда), используя LINEST(), и вернуть это значение обратно в мое настольное приложение (закрытое проприетарное программное приложение с ограниченной функциональностью вызова).

Сборка формулы с помощью LINEST() стала существенным препятствием. Достаточно легко предоставить данные - но как я могу вычислить интервалы (x,y), которые так безупречно отображаются на графике? Каждый новый показатель меняет формулу и использует новые рассчитанные коэффициенты? Почему так происходит? Я потратил часы, часы (и даже больше) на поиски решения в Интернете - и (как мужчина) решил, наконец, спросить совета.

У меня есть исходные значения (годы за годами). Чего мне не хватает, так это a) метода генерации перехвата poly(x,y), b) внешнего вызова Excel для c) возврата poly(x,y) на основе предоставленных данных (x,y).

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

dj



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

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

y=a+bx

Однако нигде в статье Википедии эта формула даже не упоминается, как это может иметь смысл?

Также я узнал, что при использовании этой формулы

a == наклон

b== перехват

математика для вычисления наклона и перехвата известна и является довольно простой процедурой вычисления сумм значений, возведения в квадрат некоторых из них и т.д.

Я также знаю формулу квадратичной регрессии (2-й степени) - y=ax^2 + bx + c.

Поэтому я думаю, что они связаны между собой, что должно означать, что уравнение для регрессии 3-й степени имеет вид

y=ax^3 + bx^2 + cx + d

Поэтому я думаю, что 6-я степень регрессии будет

y=ax^6 + bx^5 + cx^4 + dx^3 + ex^2 + fx + g

но если a - наклон, а b - перехват, то что такое c, что такое d и т.д.? Это единственная причина, по которой я не смог закодировать вашу линию, я не знаю, что такое коэффициенты и как их вычислить.

UPDATE: Ок, я узнал кое-что еще, что сейчас ставит меня в тупик.

В другой статье квадратичный многочлен описывается как

ax^2 + bx + c = 0

Значит ли это, что нам вообще не нужно знать математику для наклона и перехвата, и мы можем решить квадратичный многочлен, чтобы найти значения a, b и c?

Но как ax^2 + bx + c = 0

связан с

y=ax^2 + bx + c?

Они похожи, но почему одна формула y=, а другая =0?

 

SDC,

наклон в одной точке может быть вычислен по первой производной функции.

Линейная функция типа y=ax+b имеет в любой точке один и тот же наклон: a.

В общем случае производная линейной функции ax^n + bx^n-1 + ... + z = y просто: nax^(n-1) + (n-1)bx^n-2 ... = y' - последняя константа исходной функции становится равной 0, всегда!

Таким образом, ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )и квадратичная функция становится y' = 2ax + b ( <= 2ax^(2-1) + 1bx^(1-1); c=0 ).

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

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

 

Спасибо за попытку объяснить мне это, но я не знаю, почему эти уравнения означают то, что они означают. Если я знаю, как вычислить коэффициенты по отдельности процедурным способом, я могу использовать их и подставлять значения, но это все.

Я понимаю концепцию фильтров, мне просто было интересно выяснить, как закодировать линию OP.

Но что касается того, как это сделать, когда вы говорите,

"Итак, ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )и квадратичная функция становится y' = 2ax + b ( <= 2ax^(2-1) + 1bx^(1-1); c=0 )."

Я понятия не имею, о чем вы говорите, или даже как это связано, поэтому я, вероятно, не буду заниматься кодированием полилиний в ближайшее время lol

 

SDC:

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



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

Сначала немного справочного материала:

Microsoft: http://office.microsoft.com/en-us/excel-help/linest-HP005209155.aspx

IntegralCalc: https://www.youtube.com/watch?v=1pawL_5QYxE&noredirect=1


Дано уравнение линейной регрессии y = mx + b:

где y = цена, (например, Close[x])

и x = индекс (например, Bar[x])

и m = Slope (коэффициент, применяемый к каждой паре (x,y))

и b = Y-интерцепт (базовое значение Y-интерцепта, применяемое к каждой паре (x,y)).


Метод A: Из IntegralCalcМетод B: Из Microsoft (где x(overbar) и y(overbar) - средние)

Линия линейной регрессии от IntegralCalcЛиния линейной регрессии - Microsoft


Даже формула линии тренда полиномиальной регрессии в n-й степени относительно проста в применении:

Учитывая формулу: y = m1*x1 + m2*x2 + m3*x3 + ... + b

Где переменные x, y, m и b имеют то же определение, что и в линейном уравнении.

Кажется, у меня есть все, так чего же не хватает?

Чего не хватает, так это расчета m (наклона) и b (перехвата Y) для полиномиальной регрессии; линейное уравнение для вычисления этих значений не применимо к полиномиальной регрессии. Из того, что я узнал, для полиномиальной регрессии требуется формула, которая рассчитывает наименьшие квадраты на основе системы полиномиальных уравнений с использованием матрицы. Посмотрите на примеры графиков выше. На первом графике линии poly(6) абсолютно безупречны - вершины и низы четко обозначены. С такими данными я смогу удерживать сделки дольше, чем сегодня, и в итоге удвоить, а в перспективе и утроить среднее количество пунктов на сделку.

На втором графике я показываю результаты метода poly(6) против метода i-regr, который использует матрицу Гаусса для решения коэффициентов наклона - и, не нужно говорить, что он довольно бесполезен из-за значительной задержки метода. С другой стороны, простая скользящая средняя еще хуже - SMA слишком чувствительна во время промежуточных коррекций рынка, что может вызвать чрезмерную реакцию моего советника.

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

Обновление: Я прикрепил файл, показывающий метод, реализованный в Excel.

Файлы:
linest.zip  15 kb
 
graziani:

i-regr работает на значении Close[] каждого бара, что, вероятно, имеет значение (я предполагаю, что вы уравняли длины паттернов в MT4 и excel).

Вы можете легко изменить это, заменив Close[] на Open/High/Low или на любое другое аналитическое выражение, например, весовую функцию.

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



Grazi -

Я использовал i-regr и сравнил результаты выше - алгоритм Poly(6) против i-regr показывает, что i-regr имеет значительно большую задержку, чем poly(6) на основе того же набора данных - задержка - это смерть на этом рынке. Мои советники не торгуют внутридневные колебания, а скорее, держат тренд. Так что вы ошибаетесь - я действительно получаю прибыль от своих советников, и с более медленным реактивным индикатором мои советники захватят больше рынка, чем сейчас. В частности, когда я интегрирую настоящий алгоритм poly(6), у меня будет возможность дольше удерживать открытые позиции и предсказывать изменения тренда на 3-4 периода раньше, что улучшит мои точки входа.

Причина обращения: