Vergleich von zwei Kurstabellen mit nichtlinearen Verzerrungen auf der X-Achse - Seite 5

 
alsu: Der mql-Code wird wahrscheinlich nicht lang sein))

Hier scheint der Quellcode zu sein http://www.bytefish.de/blog/dynamic_time_warping

 
Nun ja, er ist kurz, aber das ist er in der einfachsten Version, und es gibt noch einige andere Verbesserungen hinsichtlich der Geschwindigkeit des Algorithmus und der Berücksichtigung von Einschränkungen...
 
Diese hat Unterstützung für Daten Dimensionen bis zu und einschließlich 3, plus eine untere Schranke Schätzung Methode und die damit verbundenen Kandidaten-Pfad-Test (wie ich es verstehe, ist dies viel billiger als vollständige DTW für Dimensionen >1, wo die wichtigste Methode wird ein TK-komplettes Problem und führt zu exponentiellen Lösungszeiten)
 
Es gibt einen Artikel über DTW auf der Habrahabra-Website http://habrahabr.ru/blogs/algorithm/135087/, es scheint sehr klar zu sein, aber ich kann nicht herausfinden, wie man DTW für OHLC verwendet, kann mir das jemand erklären?
 
IgorM:
Es gibt einen Artikel über DTW auf der Habrahabra-Website http://habrahabr.ru/blogs/algorithm/135087/, es scheint sehr klar zu sein, aber ich kann nicht herausfinden, wie man DTW für OHLC verwendet, kann mir das jemand erklären?

Ist es bereits für einen Preis getan?
 
Integer: Hat es mit einem Preis schon geklappt?

Es hat nicht funktioniert, es ist kein Problem, den DTW-Quellcode nach mql zu portieren:

//+------------------------------------------------------------------+
// create cost matrix
#define costmaxM 100
#define costmaxN 100
double cost[costmaxM][costmaxN];
int costM,costN; // текущая размерность cost
//+------------------------------------------------------------------+
double dist(double x, double y){
   return(MathSqrt(MathPow((x - y), 2)));
}
//+------------------------------------------------------------------+
int dtw(double &t1[],double &t2[]) {
// возвращаемое значение -1 ошибка
// +1 массив cost[][] заполнен правильно        
                int i,j;
                costM = ArraySize(t1);
                costN = ArraySize(t2);
                if(costM>=costmaxM || costN>=costmaxN)return(-1);

                cost[0][0] = dist(t1[0], t2[0]);
                // calculate first row
                for(i = 1; i < costM; i++)
                        cost[i][0] = cost[i-1][0] + dist(t1[i], t2[0]);
                // calculate first column
                for(j = 1; j < costN; j++)
                        cost[0][j] = cost[0][j-1] + dist(t1[0], t2[j]);
                // fill matrix
                for(i = 1; i < costM; i++)
                        for(j = 1; j < costN; j++)
                                cost[i][j] = MathMin(cost[i-1][j],MathMin(cost[i][j-1], cost[i-1][j-1])) + dist(t1[i],t2[j]);
 
return(1);//            return cost[m-1][n-1];
}
//+------------------------------------------------------------------+
Das Problem ist, dass ich nicht verstehe, wie es zu verwenden, alles, was ich verstanden habe, ist, dass mit DTW können Sie verschiedene Zeiträume (BP) auf der gleichen Skala für die anschließende Analyse passen, aber wie... - versteh ich nicht
 
IgorM:

Es hat nicht geklappt, der DTW-Quelltext selbst lässt sich irgendwie leicht nach mql portieren:

Das Problem ist, dass ich nicht verstehe, wie man das benutzt. Alles, was ich verstanden habe, ist, dass man mit DTW verschiedene Zeitabschnitte (BPs) auf dieselbe Skala für die spätere Analyse einpassen kann, aber wie... - verstehst nicht


Ich habe es ausprobiert. Ich bin mir auch nicht sicher, wie ich es verwenden soll. Die Ausgabe sollte entweder ein Transformationspfad oder transformierte Daten sein. Nehmen wir an, cost[][] ist eine Abstandsmatrix. Aber es gibt einen Pfad mit einer Rückkehr (wenn wir nach dem Mindestwert in jeder Spalte suchen), die Bedingung "1. Monotonie - der Pfad kehrt nie zurück, d.h.: die beiden Indizes i und j, die in der Sequenz verwendet werden, nehmen nie ab." Außerdem reicht der Weg nicht bis zur gegenüberliegenden Ecke. Generell verstehe ich den Sinn all dieser Manipulationen mit Zahlen beim Füllen des cost[][] -Arrays nicht wirklich - zuerst werden die Abstände einfach gezählt und dann addiert.

Wenn wir die Entfernungen zwischen jedem Element t1 und jedem Element t2 zählen müssen, warum sollten wir dann so viele Berechnungen durchführen, wenn wir die Bedingung "1. Monotonie - der Pfad kehrt nie zurück, d.h. die beiden Indizes i und j, die in der Sequenz verwendet werden, nehmen nie ab" erfüllen müssen?



.

 

DTW ist für die anstehende Aufgabe völlig ungeeignet. DTW wird zur Erkennung von Sprache (Wörtern) in einem Echtzeit-Audiostrom wie folgt verwendet (grob):

  1. Es gibt ein Muster (Wort) - eine Folge von Daten der Länge N.
  2. Es gibt einen Audiostrom - eine Folge von Daten der Länge M >> N.
  3. Aus dem Audiostrom werden die äußersten Datenstücke mit unterschiedlicher Länge (ungefähr) ausgewählt.
  4. Jeder Chunk wird durch DTW mit einer Vorlage verglichen.
  5. Wenn der maximale DTW-Wert einen bestimmten Schwellenwert überschreitet, wird davon ausgegangen, dass ein Wort gesprochen wurde.

DTW ist also nur ein Kriterium für den Vergleich zweier Sequenzen unterschiedlicher Länge. Mehr nicht.

Für die Suche nach Wörtern in der Audiogeschichte ist DTW überhaupt nicht geeignet, da es sehr ressourcenintensiv ist. So ist es zum Beispiel fast unmöglich, mit DTW herauszufinden, wie oft ein Wort in der letzten Stunde gesagt wurde.

Eine schnelle Lösung für dieses Problem ist die Verwendung eines schnellen Algorithmus zur Berechnung des Pearsonschen QC. Dabei wird der DTW jedes Mal durch einen ZigZag mit unterschiedlichen Eingabeparametern umgesetzt. Ein solcher Algorithmus ist sehr leicht zu parallelisieren und arbeitet fast in Echtzeit, wenn er auf einem Grafikprozessor implementiert wird.

Eine andere Frage ist: Warum brauchen wir sie? Niemand hat diese Aufgabe ernsthaft gelöst. Aber ich bin mir fast sicher, dass nach der Lösung des Rätsels ein weiterer Nagel in den Sarg der Mustertheorie geschlagen werden wird.

Die Theorie der Muster sowie Elliott-Wellen und Fibo ist keine technokratische Denkweise.

 
hrenfx:

Der DTW ist für die anstehende Aufgabe völlig ungeeignet...

Ich zeige Ihnen zuerst einen funktionierenden DTW, dann können wir diskutieren, was passt und was nicht.
 

Das habe ich mir selbst ausgedacht, aber ich weiß nicht, es ist Unsinn.

Die gelbe Linie, das ist die orangefarbene, die über die rote gespannt ist.