x축을 따라 비선형 왜곡이 있는 두 가격 차트의 비교 - 페이지 5

 
alsu : mql 코드는 아마도 짧을 것입니다))

여기에 소스가 있는 것 같습니다 . http://www.bytefish.de/blog/dynamic_time_warping

 
글쎄, 네, 짧지만 가장 간단한 버전이며 알고리즘 속도와 제한 사항을 고려하여 몇 가지 개선 사항이 더 있습니다 ...
 
라이브러리 는 최대 3개까지의 데이터 차원에 대한 지원과 하한 추정 방법 및 해당 후보 경로 테스트에 대한 지원을 구현합니다. - 작업을 완료하고 기하급수적인 솔루션 시간으로 이어짐)
 
Habrahabr http://habrahabr.ru/blogs/algorithm/135087/ 에 DTW에 대한 기사가 있습니다. 모든 것이 알기 쉽게 쓰여진 것 같지만 OHLC에 DTW를 사용하는 방법을 상상조차 할 수 없습니다. 누군가 알기 쉽게 설명할 수 있나요?
 
IgorM :
Habrahabr http://habrahabr.ru/blogs/algorithm/135087/ 에 DTW에 대한 기사가 있습니다. 모든 것이 알기 쉽게 쓰여진 것 같지만 OHLC에 DTW를 사용하는 방법을 상상조차 할 수 없습니다. 누군가 알기 쉽게 설명할 수 있나요?

그리고 하나의 가격이 이미 나왔습니까?
 
Integer : 이미 한 가격에 작동했습니까?

예, 아무 일도 일어나지 않았습니다. mql에서 DTW 소스를 이식하는 것은 문제가 되지 않습니다. 다음과 같습니다.

 //+------------------------------------------------------------------+
// 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의 도움으로 후속 분석을 위해 다른 기간의 시간 섹션(VR)을 하나의 척도로 조정할 수 있다는 것만 이해했지만 어떻게 ... - 모르겠어요
 
IgorM :

예, 아무 일도 일어나지 않았습니다. mql에서 DTW 소스를 이식하는 것은 문제가 되지 않습니다. 다음과 같습니다.

문제는 그것을 사용하는 방법을 이해하지 못한다는 것입니다. DTW의 도움으로 후속 분석을 위해 다른 기간의 시간 섹션(VR)을 하나의 척도로 조정할 수 있다는 것만 이해했지만 어떻게 ... - 모르겠어요


그것을 시도했다. 사용법도 불명. 출력은 변환 경로 또는 변환된 데이터여야 합니다. 비용[][]이 거리 행렬이라고 가정해 보겠습니다. 그러나 반환이 있는 경로를 제공합니다(각 열에서 최소값을 찾는 경우), 조건 "1. 단조성 - 경로는 반환되지 않습니다. 즉, 시퀀스에서 사용되는 두 인덱스 i 및 j, 결코 줄어들지 않는다." 여전히 경로는 반대쪽 모서리에 도달하지 않습니다. 일반적으로 cost[][] 배열을 채울 때 숫자를 사용한 이러한 모든 조작의 의미는 명확하지 않습니다. 처음에는 단순히 거리를 계산한 다음 추가합니다.

각 요소 t1에서 각 요소 t2 사이의 거리를 계산하면 조건 " 1. Monotonicity - 경로가 반환되지 않는 이유가 무엇입니까? , 절대 감소하지 마십시오."



.

 

DTW는 지정된 작업에 완전히 적합하지 않습니다. DTW는 실시간 오디오 스트림에서 다음과 같이 (대략) 음성(단어)을 인식하는 데 사용됩니다.

  1. 템플릿(단어) - 데이터 시퀀스, 길이 N이 있습니다.
  2. 길이가 M >> N인 데이터 시퀀스인 오디오 스트림이 있습니다.
  3. 오디오 스트림에서 (대략) 길이가 다른 극단적인 데이터 조각이 선택됩니다.
  4. 각 DTW 청크는 템플릿과 비교됩니다.
  5. 최대 최상의 DTW가 특정 임계값을 초과하면 단어를 말한 것으로 간주됩니다.

저것들. DTW는 길이가 다른 두 시퀀스를 비교하기 위한 기준일 뿐입니다. 더 이상은 없어.

오디오 스트림의 기록에서 단어를 검색하는 데 DTW는 엄청난 리소스 집약도로 인해 완전히 부적합합니다. 예를 들어, DTW를 사용하여 지난 1시간 동안 단어가 말한 횟수를 찾는 것은 거의 불가능합니다.

초기에 제기된 문제는 Pearson's CC를 계산하는 빠른 알고리즘을 통해 빠르게 해결됩니다. 이 경우 dvr은 입력 매개변수가 다른 ZigZag에 의해 매번 변환됩니다. 이러한 알고리즘은 병렬화하기가 매우 쉽고 GPU를 사용하여 구현하면 거의 실시간으로 작동합니다.

또 다른 질문, 왜 필요한가요? 아무도 이 문제를 심각하게 해결하지 못했습니다. 그러나 나는 그것을 해결함으로써 패턴 이론의 생존 가능성의 관에 또 다른 못이 있을 것이라고 거의 확신합니다.

Fib의 Elliot 파도 와 같은 패턴 이론은 사고 거래의 기술적 수준이 아닙니다.

 
hrenfx :

DTW는 지정된 작업에 완전히 적합하지 않습니다 ...

먼저 작동하는 DTW를 보여주고 무엇이 적합하고 무엇이 적합하지 않은지 논의하겠습니다.
 

나는 스스로 뭔가를 생각해 냈지만, 어떤 종류의 넌센스인지 모르겠습니다.

노란색 선은 빨간색 선 위에 뻗어 있는 주황색 선입니다.