X ekseni boyunca doğrusal olmayan çarpıtmalara sahip iki fiyat grafiğinin karşılaştırılması - sayfa 5

 
alsu : mql kodu büyük olasılıkla kısa olacaktır))

http://www.bytefish.de/blog/dynamic_time_warping kaynak burada görünüyor

 
Eh, evet, kısa, ama en basit versiyonda ve algoritmanın hızıyla ilgili ve kısıtlamaları dikkate alarak birkaç iyileştirme daha var ...
 
Bu lib dahil 3'e kadar veri boyutları için destek, ayrıca bir alt sınır tahmin yöntemi ve karşılık gelen aday yol testi (anladığım kadarıyla bu, ana yöntem bir TK olduğunda,> 1 boyut için tam DTW'den çok daha ucuzdur) -görevi tamamlar ve üstel çözüm süresine yol açar)
 
Habrahabr'da DTW hakkında bir makale var http://habrahabr.ru/blogs/algorithm/135087/ , her şey anlaşılır bir şekilde yazılmış gibi görünüyor, ancak DTW'nin OHLC için nasıl kullanılacağını hayal bile edemiyorum, biri bunu anlaşılır şekilde açıklayabilir mi?
 
IgorM :
Habrahabr'da DTW hakkında bir makale var http://habrahabr.ru/blogs/algorithm/135087/ , her şey anlaşılır bir şekilde yazılmış gibi görünüyor, ancak DTW'nin OHLC için nasıl kullanılacağını hayal bile edemiyorum, biri bunu anlaşılır şekilde açıklayabilir mi?

Ve bir fiyat için zaten çıktı?
 
Integer : Zaten bir fiyat için çalıştı mı?

evet, hiçbir şey olmadı, DTW kaynağını mql altında taşımak sorun değil, bunun gibi bir şey:

 //+------------------------------------------------------------------+
// 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];
}
//+------------------------------------------------------------------+
sorun şu ki, onu nasıl kullanacağımı anlamıyorum, tek anladığım, DTW'nin yardımıyla sonraki analizler için farklı sürelerdeki zaman bölümlerini (VR) tek bir ölçeğe ayarlamanın mümkün olduğu, ancak nasıl ... - Anlamıyorum
 
IgorM :

evet, hiçbir şey olmadı, DTW kaynağını mql'ye taşımak sorun değil, bunun gibi bir şey:

sorun şu ki, onu nasıl kullanacağımı anlamıyorum, tek anladığım, DTW'nin yardımıyla sonraki analizler için farklı sürelerdeki zaman bölümlerini (VR) tek bir ölçeğe ayarlamanın mümkün olduğu, ancak nasıl ... - Anlamıyorum


denedim. Nasıl kullanılacağı da belli değil. Çıktı, bir dönüştürme yolu veya dönüştürülmüş veri olmalıdır. Diyelim ki maliyet[][] bir mesafeler matrisi. Ancak, dönüşü olan bir yol verir (her sütunda minimum değeri ararsanız), "1. Monotonluk - yol asla geri dönmez, yani: dizide kullanılan her iki dizin, i ve j, asla azalmaz." Yine de yol karşı köşeye ulaşmıyor. Genel olarak, maliyet[][] dizisini doldururken sayılarla yapılan tüm bu manipülasyonların anlamı çok açık değildir - önce mesafeler basitçe hesaplanır, sonra eklenir.

Her bir t1 öğesi ile her bir t2 öğesi arasındaki mesafeleri sayıyorsanız, neden " 1. Monotonluk - yol hiçbir zaman döndürülmez, yani: dizide kullanılan her iki dizin, i ve j , asla azalmayın."



.

 

DTW, belirlenen görev için tamamen uygun değil. DTW, gerçek zamanlı bir ses akışındaki konuşmayı (kelimeleri) aşağıdaki gibi (kabaca) tanımak için kullanılır:

  1. Bir şablon (kelime) var - bir veri dizisi, uzunluk N.
  2. Bir ses akışı var - M >> N uzunluğunda bir veri dizisi.
  3. Ses akışından, farklı uzunluklarda (kabaca) uç veri parçaları seçilir.
  4. Her DTW parçası bir şablonla karşılaştırılır.
  5. Maksimum en iyi DTW belirli bir eşiği aşarsa, bir kelimenin söylendiği kabul edilir.

Onlar. DTW, yalnızca farklı uzunluktaki iki diziyi karşılaştırmak için bir kriterdir. Daha fazla yok.

Bir ses akışının geçmişinde bir kelime aramak için DTW, büyük kaynak yoğunluğu nedeniyle tamamen uygun değildir. Örneğin, son bir saat içinde bir kelimenin kaç kez konuşulduğunu bulmak için DTW'yi kullanmak neredeyse imkansızdır.

Başlangıçta ortaya çıkan problem, Pearson'ın CC'sini hesaplamak için hızlı algoritma aracılığıyla hızla çözülür. Bu durumda, dvr her seferinde farklı giriş parametreleriyle bir ZigZag tarafından dönüştürülür. Böyle bir algoritmanın paralelleştirilmesi çok kolaydır ve bir GPU kullanılarak uygulandığında neredeyse gerçek zamanlı olarak çalışacaktır.

Başka bir soru, neden gerekli? Hiç kimse bu sorunu ciddi düzeyde çözemedi. Ama bunu çözerek, örüntüler teorisinin yaşayabilirliğinin tabutuna bir çivi daha çakılacağına neredeyse eminim.

Model teorisi, Elliot'un Fib ile dalgaları gibi, düşünme ticaretinin teknik bir seviyesi değildir.

 
hrenfx :

DTW, belirlenen görev için tamamen uygun değil ...

Önce size çalışan bir DTW gösterelim, sonra neye uyduğunu ve neyin uymadığını tartışalım.
 

Kendim bir şey buldum, ama bilmiyorum, bir tür saçmalık.

Sarı çizgi, kırmızı çizginin üzerine uzanan turuncu çizgidir.