X軸に非線形の歪みがある2つの見積もりチャートの比較 - ページ 5

 
alsu: mqlのコードはおそらく長くはないでしょう))

こちらがソースコードのようです http://www.bytefish.de/blog/dynamic_time_warping

 
そうですね、短いですけど、それは一番シンプルなバージョンで、他にもアルゴリズムのスピードや制約の考慮に関していくつか改良されています......。
 
これは、3次元までのデータのサポートと、下界推定法、および関連するパス候補テストを実装しています(私の理解では、これは1次元以上の完全なDTWよりもはるかに安価です。)
 
ハブラブラサイトhttp://habrahabr.ru/blogs/algorithm/135087/、DTWについての記事があり、とても分かりやすいようですが、DTWをOHLCに使う方法が分からないのですが、どなたか解説していただけないでしょうか。
 
IgorM:
ハブラブラサイトhttp://habrahabr.ru/blogs/algorithm/135087/、DTWについての記事があり、とても分かりやすいようですが、DTWをOHLCに使う方法が分からないのですが、どなたか解説していただけないでしょうか。

ワンプライスですでにできているのでしょうか?
 
Integer: ワンプライスでの効果はまだですか?

うまくいかなかった、DTWのソースをmqlに移植するのは問題ないのですが。

//+------------------------------------------------------------------+
// 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];
}
//+------------------------------------------------------------------+
問題は、使い方がよくわからないことです。DTWでは、異なる期間(BP)を同じスケールに当てはめて、その後の分析ができるということだけは理解できたのですが、どのように・・・。- ふにおちない
 
IgorM:

うまくいかなかった、DTWのソース自体はmqlに移植しやすいんだけどね、なぜか。

問題は、この使い方がよくわからないことです。DTWでは、異なる時間区間(BP)を同じスケールにフィットさせて、後で分析できることだけは理解できたのですが、どうやって......。- don't understand


試してみました。使い方もよくわからない。出力は、変換パスまたは変換後のデータのいずれかでなければならない。cost[][]を距離行列としよう。しかし、それは(各列の最小値を探せば)リターンを持つパスを与え、条件「1.単調性 - パスは決して戻らない、すなわち:シーケンスで使用されるインデックスであるiとjの両方が減少することはない。"また、パスが反対側のコーナーに届かない。一般に、cost[][]配列を埋める ときに、まず距離を単純に数えて、それを足すというような数字の操作の意味がよくわからない。

もし、各要素t1と各要素t2間の距離を数える必要があるのなら、条件「1.単調性 - パスは決して戻らない、つまり、シーケンスで使われるインデックスiとjの両方が減少しない」を満たす必要があるのに、なぜこんなに多くの計算をしなければならないのでしょうか?



.

 

DTWは完全に不向きです。DTWは、リアルタイムの音声ストリーム中の音声(単語)を認識するために、以下のように使用される(大雑把)。

  1. 長さNのデータ列であるパターン(ワード)がある。
  2. 長さM >> Nのオーディオストリーム(データ列)がある。
  3. オーディオストリームから、長さの異なる(大まかな)一番外側のデータ片を選択する。
  4. 各チャンクはDTWによってテンプレートと比較される。
  5. DTWの最大値がある閾値を超えた場合、単語が発話されたと判断する。

つまりDTWは、長さの異なる2つの配列を比較するための基準に過ぎないのです。それ以上はない。

音声の履歴から単語を検索する場合、DTWは非常に多くのリソースを必要とするため、全く適していない。例えば、ある単語がこの1時間に何回言われたかをDTWで調べることは、ほぼ不可能です。

この問題を解決するには、高速なアルゴリズムでピアソンのQCを計算するのが手っ取り早い。その際、DTWは入力パラメータが異なるZigZagでその都度変換される。このようなアルゴリズムは並列化が非常に容易で、GPUで実装すればほぼリアルタイムで動作する。

もうひとつの疑問は、なぜそれが必要なのか、ということです。この課題を本格的に解決した人はいない。しかし、これを解いた後、パターン理論の健全性にもう一つ釘を刺すことになるのは、ほぼ間違いないでしょう。

エリオット波動や フィボだけでなく、パターンの理論も、テクニカルなレベルの考え方ではありません。

 
hrenfx:

DTWは、まったくもって不向きです...。

まずは動くDTWをお見せして、何が合っていて、何が合っていないのかを議論しましょう。
 

自分で作ったものですが、ナンセンスでわかりません。

黄色い線、それは赤い線の上に張られたオレンジの線です。