6. Grades Poly Hilfe!

 
Ich möchte mich kurz vorstellen. Ich bin ein Datenbankarchitekt (im Gegensatz zu einem Mathematiker) mit sehr guten Programmierkenntnissen in Sachen Datenbanken (SQL, t-SQL, PL/SQL) und verfüge über ausreichende Kenntnisse in Nicht-Datenbanksprachen (C, C++, C#, VB/VBA), um mich zurechtzufinden. Ich habe viele, viele, viele Jahre in der Finanzdienstleistungsbranche gearbeitet und kenne mich sehr gut mit Excel aus (und mag 2013 sehr, Hut ab!).

Ich benutze Excel schon sehr lange, habe mich immer auf die eingebauten Funktionen und Diagrammwerkzeuge verlassen (ich kann das Bild eines Diagramms immer ausschneiden und einfügen), und es ist mir nie in den Sinn gekommen, dass ich eines Tages eine praktische Anwendung für die tatsächlichen (nicht visuellen) Werte finden und unter der Oberfläche der Präsentation graben müsste, um das "Wie" zu bestimmen. Bis vor kurzem hat sich die visuelle Präsentation (und die Logik dahinter) von selbst verkauft.

Darin liegt der Zweck meiner Suche.

Anhand des folgenden Diagramms kann man die Stabilität der Trendlinien des Polynoms 6. Grades eindeutig bestätigen. Das Polynom ist wesentlich stabiler über einen größeren Bereich als die SMA-Methode, und das mit einer nominellen Latenzzeit! Einfach ausgedrückt: Die Poly's zucken nicht. Ich habe mich in die Excel-Poly-Trendlinien verliebt, seit ich sie verwendet habe, um den Höhepunkt des Immobilienmarktes im Jahr 2008 zu identifizieren (der Trend identifizierte die Veränderung im Mai-Juni und der Zusammenbruch fand im Aug-Sep statt, wenn ich mich recht erinnere), was mir die Möglichkeit gab, den Teams, die ich damals für die Risikominderung von Hypothekenportfolios zuständig war, ernsthafte Warnungen zu geben (wenn auch nur visuell)!

Polygrafie

Nun beginnt meine Suche.

Da ich nun eine praktische Anwendung gefunden habe, versuche ich, die Mathematik hinter der Polytrendlinienformel zu lernen (oder in meinem Fall neu zu lernen). Viel Glück dabei. Die Reduktion der kleinsten Quadrate und die Matrizen, die zu der extrem komplexen Formel und den erforderlichen Koeffizientenberechnungen hinzukommen, die durch die Polynomgleichung eingeführt werden, sind (für mich) viel zu schwierig in Code zu übersetzen. Daher dachte ich mir, dass es am einfachsten wäre, Excel (höchstwahrscheinlich von C++ aus) aufzurufen, ein Array von (x,y)-Datenwerten bereitzustellen, den Poly(x,y)-Abschnitt (Trendlinienwert) mithilfe von LINEST() zu berechnen und diesen Wert an meine Desktop-Anwendung zurückzugeben (eine geschlossene, proprietäre Softwareanwendung mit begrenzter Aufruffunktionalität).

Das Zusammenstellen der Formel mit LINEST() hat sich zu einer erheblichen Hürde entwickelt. Es ist einfach genug, die Daten zu liefern - aber wie kann ich die (x,y)-Abschnitte berechnen, die im Diagramm so einwandfrei dargestellt werden? Jede neue Maßnahme ändert die Formel und verwendet neu berechnete Koeffizienten? Wie kann das passieren? Ich habe Stunden über Stunden (und noch mehr) damit verbracht, das Internet nach Lösungen zu durchforsten - und (wie ein Mann) habe ich schließlich beschlossen, nach dem Weg zu fragen.

Ich habe die Quellwerte (Jahre über Jahre). Was mir fehlt, ist a) die Methode zur Erzeugung des Poly(x,y)-Abschnitts, b) der externe Aufruf von Excel, um c) das Poly(x,y) auf der Grundlage der gelieferten (x,y)-Daten zurückzugeben.

Wenn jemand einen Artikel oder eine sehr spezifische Behandlung dieses Themas hat, oder sogar bereit ist, mir zu helfen, wäre ich Ihnen ewig zu Dank verpflichtet.

dj


 

Der i-regr-Indikator kann beliebige polynomiale Regressionen bis zu jedem Grad durchführen. Ich habe nie etwas Höheres als 3. Grades ausprobiert, aber der Code ist da, damit Sie ihn sich ansehen können. Der 6. Grad wird wahrscheinlich Ihre CPU sprengen, aber Sie können es ja mal versuchen.


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

 
rocketman99:

Der i-regr-Indikator kann beliebige polynomiale Regressionen bis zu jedem Grad durchführen. Ich habe nie etwas Höheres als 3. Grades ausprobiert, aber der Code ist da, damit Sie ihn sich ansehen können. Der 6. Grad wird wahrscheinlich Ihre CPU sprengen, aber Sie können es ja mal versuchen.


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



Danke rocketman! Hat nicht meine CPU überhaupt zu töten - ich werde mit diesem für eine Weile arbeiten mit und sehen, was ich mit kommen.

Aktualisieren:

i-regr scheint nicht sehr genau zu sein - das könnte an der Gaußmethode (i-regr) und der Methode der kleinsten Quadrate (excel) liegen, die zur Lösung verwendet werden. Ich weiß es nicht - ich bin noch auf der Suche, hat jemand bessere Poly-Verfahren?

 

i-regr arbeitet mit dem Close[]-Wert eines jeden Balkens, was wahrscheinlich einen Unterschied macht (ich vermute, dass Sie die Musterlängen in MT4 und Excel angeglichen haben).

Sie können dies leicht ändern, indem Sie Close[] in Open/High/Low oder in einen anderen analytischen Ausdruck, z.B. eine Gewichtsfunktion, ändern.

Ich glaube jedoch nicht, dass Sie damit einen Gewinn erzielen können, denn es ist wie bei jedem anderen Trendindikator, der nachgemalt wird.

 

Hallo dennisj2,

sind Sie sicher, dass Sie Ihre Formel wirklich brauchen?

Vielleicht versuchen Sie zunächst, nach anderen Filtern wie Kalman, Ehlers, Gauss, Jurik (JMA), DEMA zu suchen. Die meisten von ihnen sind von Tiefpassfiltern (physikalischen) Frequenzfiltern abgeleitet und haben ihren Weg in den mt4-Code gefunden.

Vielleicht erfüllt ein JMA (es gibt viele Variationen) mit einer längeren Periode das, wonach Sie suchen?


 
Oder Sie können mit dem AllAverages-Indikator http://www.forexfactory.com/showthread.php?t=418219 durchdrehen.
 
dennisj2:
Jetzt beginnt meine Suche.

Da ich nun eine praktische Anwendung gefunden habe, versuche ich, die Mathematik hinter der Formel für die Polytrendlinie zu erlernen (oder, in meinem Fall, neu zu erlernen). Viel Glück dabei. Die Reduktion der kleinsten Quadrate und die Matrizen, die zu der extrem komplexen Formel und den erforderlichen Koeffizientenberechnungen hinzukommen, die durch die Polynomgleichung eingeführt werden, sind (für mich) viel zu schwierig in Code zu übersetzen. Daher dachte ich mir, dass es am einfachsten wäre, Excel (höchstwahrscheinlich von C++ aus) aufzurufen, ein Array von (x,y)-Datenwerten bereitzustellen, den Poly(x,y)-Abschnitt (Trendlinienwert) mithilfe von LINEST() zu berechnen und diesen Wert an meine Desktop-Anwendung zurückzugeben (eine geschlossene, proprietäre Softwareanwendung mit eingeschränkter Call-Out-Funktionalität).

Das Zusammenstellen der Formel mit LINEST() hat sich zu einer erheblichen Hürde entwickelt. Es ist einfach genug, die Daten zu liefern - aber wie kann ich die (x,y)-Abschnitte berechnen, die im Diagramm so einwandfrei dargestellt werden? Jede neue Maßnahme ändert die Formel und verwendet neu berechnete Koeffizienten? Wie kann das passieren? Ich habe Stunden über Stunden (und noch mehr) damit verbracht, das Internet nach Lösungen zu durchforsten - und (wie ein Mann) habe ich schließlich beschlossen, nach dem Weg zu fragen.

Ich habe die Quellwerte (Jahre über Jahre). Was mir fehlt, ist a) die Methode zur Erzeugung des Poly(x,y)-Abschnitts, b) der externe Aufruf von Excel, um c) das Poly(x,y) auf der Grundlage der gelieferten (x,y)-Daten zurückzugeben.

Wenn jemand einen Artikel oder eine sehr spezifische Behandlung dieses Themas hat, oder sogar bereit ist, mir zu helfen, wäre ich Ihnen ewig zu Dank verpflichtet.

dj



Es gibt viele Artikel über Algebra mit Beispielen auf Griechisch, aber in Wirklichkeit ist es Voodoo.

Es gibt z. B. einen Wikipedia-Artikel über lineare Regression, der für mich überhaupt keinen Sinn ergibt, und doch könnte ich jetzt eine lineare Regressionsversion deiner Linie programmieren, weil ich irgendwo anders gelernt habe, die Formel

y=a+bx

Doch nirgendwo im Wikipedia-Artikel wird diese Formel auch nur erwähnt, wie kann das einen Sinn ergeben?

Außerdem habe ich bei der Verwendung dieser Formel gelernt

a == Steigung

b=Abschnitt

die Mathematik für die Berechnung von Steigung und Achsenabschnitt bekannt ist und ein ziemlich einfaches Verfahren ist, bei dem die Summen der Werte berechnet werden, einige von ihnen quadriert werden usw.

Ich weiß auch, dass die Formel für eine quadratische Regression (2. Grades) y=ax^2 + bx + c ist.

Ich denke also, dass sie miteinander verwandt sind, was bedeuten sollte, dass die Gleichung für eine Regression 3.

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

Ich denke also, die 6. Regression würde lauten

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

aber wenn a die Steigung und b der Achsenabschnitt ist, was ist dann c und was wäre d usw.? Das ist der einzige Grund, warum ich deine Zeile nicht kodieren konnte, ich weiß nicht, was die Koeffizienten sind oder wie man sie berechnet.

UPDATE: Ok, ich habe noch etwas gelernt, was mich jetzt verwirrt.

In einem anderen Artikel wird das quadratische Polynom beschrieben als

ax^2 + bx + c = 0

Bedeutet das, dass wir die Mathematik für den Steigungsabschnitt gar nicht kennen müssen und das Quadrat lösen können, um die Werte von a, b und c zu finden?

Aber was hat ax^2 + bx + c = 0

in Beziehung zu

y=ax^2 + bx + c ?

Sie sehen ähnlich aus, aber wieso ist das eine y= und das andere =0?

 

SDC,

die Steigung in einem Punkt kann durch die erste Ableitung einer Funktion berechnet werden.

Eine lineare Funktion wie y=ax+b hat in jedem Punkt die gleiche Steigung: a.

Im Allgemeinen ist die Ableitung einer linearen Funktion ax^n + bx^n-1 + ... + z = y ist einfach: nax^(n-1) + (n-1)bx^n-2 .. = y' - die letzte Konstante der ursprünglichen Funktion wird immer 0!

Also ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )und die quadratische Funktion wird y' = 2ax + b ( <= 2ax^(2-1) + 1bx^(1-1); c=0 ).

Aber ich denke, um die Idee der Filter zu verstehen, sollte man besser über die Filterung von Frequenzen nachdenken (und lesen). Egal, ob es sich um Ton oder Bilder oder Zitate oder ...

Man will immer das Rauschen loswerden - im Allgemeinen die kürzeren Frequenzen. Und die Verwendung von linearen Funktionen ist nur ein Ansatz.

 

Danke für den Versuch, mir das zu erklären, aber ich weiß nicht, warum diese Gleichungen bedeuten, was sie bedeuten. Wenn ich weiß, wie ich die Koeffizienten einzeln prozedural berechnen kann, kann ich sie verwenden und die Werte einfügen, aber das war's dann auch schon.

Ich verstehe das Konzept der Filter, ich war nur daran interessiert herauszufinden, wie man die Zeile des Auftraggebers codiert.

Aber in Bezug auf die Durchführung, wenn Sie sagen,

"Also ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )und die quadratische Funktion wird y' = 2ax + b ( <= 2ax^(2-1) + 1bx^(1-1); c=0 )."

Ich habe keine Ahnung, wovon du sprichst oder inwiefern das relevant ist, also werde ich wahrscheinlich in nächster Zeit keine Polyliniencodierung machen lol

 

SDC:

Es gibt eine Menge Artikel über Algebra mit Beispielen auf Griechisch, aber in Wirklichkeit ist es Voodoo.



SDC - Sie sind jetzt auf dem gleichen Stand wie ich - die lineare Regressionsformel, die ich gefunden habe, funktioniert - und es gibt zwei deutlich unterschiedliche Formeln, die ich gefunden habe, die identische Ergebnisse liefern. Diese Formeln sind großartig, wenn lineare Regression (eine gerade Trendlinie) das ist, was wir suchen.

Zunächst etwas Referenzmaterial:

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

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


Gegeben sei die lineare Regressionsgleichung y = mx + b:

Wobei y = Preis, (z.B. Close[x])

und x = Index (z. B. Bar[x])

und m = Steigung (der auf jedes (x,y)-Paar angewandte Koeffizient)

und b = Y-Achsenabschnitt (der Basiswert des Y-Achsenabschnitts, der auf jedes (x,y)-Paar angewendet wird)


Methode A: Von IntegralCalcMethode B: Von Microsoft (wobei x(overbar) und y(overbar) Mittelwerte sind)

Lineare Regressionslinie von IntegralCalcLineare Regressionslinie - Microsoft


Auch die Trendlinienformel der polynomialen Regression bis zum n-ten Grad ist relativ einfach anzuwenden:

Gegeben sei die Formel: y = m1*x1 + m2*x2 + m3*x3 + ... + b

Dabei haben die Variablen x, y, m und b die gleiche Definition wie in der linearen Gleichung beschrieben.

Es scheint, als hätte ich alles, was fehlt also noch?

Was fehlt, ist die Berechnung von m (Steigung) und b (Y-Achsenabschnitt) für eine polynomiale Regression; die lineare Gleichung zur Berechnung dieser Werte gilt nicht für eine polynomiale Regression. Nach dem, was ich gelernt habe, erfordert die polynomiale Regression eine Formel, die die kleinsten Quadrate auf der Grundlage eines Systems von Polynomgleichungen unter Verwendung einer Matrix berechnet. Sehen Sie sich die obigen Beispielgrafiken an. Im ersten Diagramm sind die Poly(6)-Linien absolut makellos - Ober- und Untergrenzen sind deutlich zu erkennen. Mit diesen Daten werde ich in der Lage sein, Trades länger zu halten, als ich es heute tue, und letztlich meine durchschnittlichen Pips pro Trade zu verdoppeln, möglicherweise sogar zu verdreifachen.

Im zweiten Diagramm zeige ich die Ergebnisse der Poly(6)- und der i-regr-Methode, die eine Gauß-Matrix zur Lösung der Steigungskoeffizienten verwendet - und die natürlich aufgrund der erheblichen Latenzzeit der Methode ziemlich nutzlos ist. Andererseits ist ein einfacher gleitender Durchschnitt sogar noch schlechter - der SMA ist viel zu empfindlich bei zwischenzeitlichen Marktkorrekturen, die eine Überreaktion meines EA verursachen könnten.

Ich bin bereit, jemanden dafür zu bezahlen, dass er einen echten polynomialen Regressionsindikator entwickelt - aber die Ergebnisse müssen unbedingt den Ergebnissen entsprechen, die Excel liefert. Die Funktion LINEST() ist eine Blackbox, in der viel Voodoo zur Berechnung der Koeffizienten verwendet wird. Ich muss dieses Voodoo ganz einfach verstehen.

Update: Ich habe eine Datei beigefügt, die die in Excel implementierte Methode zeigt.

Dateien:
linest.zip  15 kb
 
graziani:

i-regr arbeitet mit dem Close[]-Wert eines jeden Balkens, was wahrscheinlich einen Unterschied macht (ich vermute, dass Sie die Musterlängen in MT4 und Excel angeglichen haben).

Sie können dies leicht ändern, indem Sie Close[] in Open/High/Low oder in einen anderen analytischen Ausdruck, z.B. eine Gewichtsfunktion, ändern.

Ich glaube jedoch nicht, dass man damit einen Gewinn erzielen kann, denn es ist genau wie jeder andere Trendindikator, der sich wiederholt.



Grazi -

Ich habe den i-regr verwendet und die obigen Ergebnisse verglichen - der Poly(6)-Algorithmus im Vergleich zum i-regr zeigt, dass der i-regr eine wesentlich größere Latenz hat als der Poly(6), basierend auf demselben Datensatz - Latenz ist der Tod in diesem Markt. Meine EAs handeln nicht mit Intraday-Oszillationen, sondern halten sich an den Trend. Sie irren sich also - ich profitiere von meinen EAs, und mit einem langsameren reaktiven Indikator werden meine EAs mehr vom Markt erfassen, als sie es heute tun. Sobald ich einen echten Poly(6)-Algorithmus integriert habe, werde ich in der Lage sein, offene Positionen länger zu halten und Trendwechsel 3-4 Perioden früher vorherzusagen, was meine Einstiegspunkte verbessert.