两张在X轴上有非线性扭曲的报价图的比较 - 页 5

 
alsu: mql代码可能不会太长))

这里似乎是源代码 http://www.bytefish.de/blog/dynamic_time_warping

 
嗯,是的,它很短,但这是在最简单的版本中,还有一些其他的改进,关于算法的速度和对约束的考虑......
 
这个 已经实现了对数据维度的支持,包括3维,还有一个下限估计方法和相关的候选路径测试(根据我的理解,这比维度>1的完全DTW要便宜得多,在那里主要的方法变成了一个TK完全问题,导致了指数级的求解时间)。
 
在Habrahabra网站上有一篇关于DTW的文章http://habrahabr.ru/blogs/algorithm/135087/, 似乎很清楚,但我搞不清楚如何将DTW用于OHLC,谁能给我解释一下?
 
IgorM:
在Habrahabra网站上有一篇关于DTW的文章http://habrahabr.ru/blogs/algorithm/135087/, 似乎很清楚,但我搞不清楚如何将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你可以把不同的时间段(BPs)装入同一个尺度,以便以后分析,但如何...- 不懂


试过了。也不知道如何使用它。输出应该是转换路径或转换后的数据。假设cost[][]是一个距离矩阵。但它给出了一条有回报的路径(如果我们在每一列中寻找最小值),条件是 "1。单调性--路径从不返回,即:在序列中使用的两个索引i和j都不会减少"。另外,这条道路并没有到达对面的角落。总的来说,我不太理解在填充 cost[][]数组 时对数字进行的所有这些操作的意义--首先是简单地计算距离,然后将它们相加。

如果我们需要计算每个元素t1和每个元素t2之间的距离,那么,如果我们需要满足条件 "1.单调性--路径永不返回,即:序列中使用的两个索引i和j永不减少",我们为什么要进行这么多的计算?



.

 

DTW完全不适合当前的任务。DTW用于识别实时音频流中的语音(单词),具体如下(大致如此)。

  1. 有一个模式(字)--一个数据序列,长度为N。
  2. 有一个音频流 - 一个数据序列,长度为M>>N。
  3. 从音频流中选择不同长度的最外层的数据片断(大致如此)。
  4. 通过DTW将每个块状物与模板进行比较。
  5. 如果最大的DTW超过了某个阈值,就认为有一个词被说出来了。

所以,DTW只是一个比较两个不同长度的序列的标准。仅此而已。

要在音频历史中搜索单词,DTW根本不适合,因为它非常耗费资源。例如,使用DTW找出一个词在过去一小时内被说了多少次,几乎是不可能的。

这个问题的快速解决方案是使用快速算法来计算Pearson's QC。在这样做的时候,DTW每次都是由一个具有不同输入参数的ZigZag转换。这样的算法非常容易并行化,使用GPU实现时几乎可以实时工作。

另一个问题是我们为什么需要它?没有人在严肃的层面上解决了这项任务。但我几乎可以肯定,在解决了这个问题之后,模式理论的合理性又多了一个钉子。

模式的理论,以及艾略特波和菲波 并不是技术官僚的思维水平。

 
hrenfx:

DTW完全不适合手头的任务......。

让我们先给你看一个工作的DTW,然后我们可以讨论它适合什么,不适合什么。
 

我自己编的东西,但我不知道,这是胡说八道。

黄色的线,那是橙色的线在红色的线上延伸出来的。