트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 3256

 
Maxim Dmitrievsky #:
소규모 TF에서 메모리 오버플로. 메모리 오버플로우가 16개의 osu와 스왑 파일(Mac의 경우 스왑) 30기가로 발생합니다. 예를 들어 50k x 50k 상관 행렬이 있습니다.

분명히 알고리즘이 MQL에서 동일하기 때문에 파이썬의 몇 가지 특성이 있습니다.

  1. Pos 변수의 1d 배열에서 실행합니다.
  2. [Pos-n, Pos] - 또 다른 패턴입니다.
  3. 이 패턴과 1d 배열과 비슷한 것을 적용했습니다.
  4. MathAbs(corr[i])가 0.9를 초과하는 상황을 발견했습니다.
  5. 이런 곳에서는 가격 행동보다 앞선 막대를 살펴보고 평균을 냈습니다.
  6. 많은 지점을 찾아서 평균을 냈나요? - 패턴 데이터(2단계의 값)를 저장했습니다.
  7. Pos++와 2페이지에 있습니다.

이것은 정면 변형입니다. 체를 사용하면 훨씬 더 빠릅니다.


백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중 값에 대한 1d 배열은 80Mb입니다. 점 3. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?

 
fxsaber #:

알고리즘이 MQL에서도 동일하기 때문에 파이썬의 몇 가지 특성이 있을 것입니다.

  1. Pos 변수의 1d 배열을 실행합니다.
  2. [Pos-n, Pos] - 또 다른 패턴입니다.
  3. 이 패턴과 1d 배열과 비슷한 것을 적용했습니다.
  4. MathAbs(corr[i])가 0.9를 초과하는 상황을 발견했습니다.
  5. 이런 곳에서는 가격 행동보다 앞선 막대를 살펴보고 평균을 냈습니다.
  6. 많은 지점을 찾아서 평균을 냈나요? - 패턴 데이터(2단계의 값)를 저장했습니다.
  7. Pos++ 및 p.2.

이것은 정면 변형입니다. 체는 더 빠릅니다.


백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중값에 대한 1d 배열은 80Mb입니다. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?

모든 행과 모든 행의 행렬의 상관관계는 사이클(1행에서 다른 모든 행) 또는 루프(1행에서 모든 행)보다 몇 더 빠른 것으로 간주됩니다. 알고리즘으로 인해 어떤 종류의 가속화가 있습니다. 상관 관계 계산의 alglib 버전에서 확인했습니다.
 
Forester #:
모든 행과 모든 행의 행렬의 상관관계는 사이클(1행에서 다른 모든 행) 및 짝수 루프(1행에서 모든 행)보다 몇 더 빠른 것으로 간주됩니다. 알고리즘으로 인해 어떤 종류의 가속이 있습니다. 상관 관계 계산의 alglib 버전에서 확인했습니다.

코드를 주시면 확인해 보겠습니다.

 
fxsaber #:


  1. MathAbs(corr[i])가 0.9를 초과하는 상황을 발견했습니다.

MathAbs ()는 불필요한 것 같습니다.

 
fxsaber #:

MQL에서도 알고리즘이 동일하기 때문에 파이썬의 몇 가지 특성이 있을 것입니다.

  1. Pos 변수의 1d 배열을 실행합니다.
  2. [Pos-n, Pos] - 또 다른 패턴입니다.
  3. 이 패턴과 1d 배열과 비슷한 것을 적용했습니다.
  4. MathAbs(corr[i])가 0.9를 초과하는 상황을 발견했습니다.
  5. 이런 곳에서는 가격 행동보다 앞선 막대를 살펴보고 평균을 냈습니다.
  6. 많은 지점을 찾아서 평균을 냈나요? - 패턴 데이터(2단계의 값)를 저장했습니다.
  7. Pos++ 및 p.2.

이것은 정면 변형입니다. 체는 더 빠릅니다.


백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중 값에 대한 1d 배열은 80Mb입니다. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?

파이썬의 어떤 라이브러리도 이를 계산할 수 없다는 사실에 당황해서 결국 혼란스러웠습니다.

팬더는 RAM을 넘치고 오버헤드가 엄청납니다.

남파이는 오류를 표시하지 않고 인터프리터 세션을 충돌시키고 종료합니다 :).

체를 만들 수 있지만 전체 코드를 다시 작성해야 합니다.
 
fxsaber #:

코드를 주시면 확인해 보겠습니다.

통계.mqh에 있습니다.

함수
PearsonCorrM - 모든 행과 모든 행의 상관관계가 가장 빠릅니다.

//+------------------------------------------------------------------+
//| Pearson product-moment correlation matrix                        |
//| INPUT PARAMETERS:                                                |
//|     X   -   array[N,M], sample matrix:                           |
//|             * J-th column corresponds to J-th variable           |
//|             * I-th row corresponds to I-th observation           |
//|     N   -   N>=0, number of observations:                        |
//|             * if given, only leading N rows of X are used        |
//|             * if not given, automatically determined from input  |
//|               size                                               |
//|     M   -   M>0, number of variables:                            |
//|             * if given, only leading M columns of X are used     |
//|             * if not given, automatically determined from input  |
//|               size                                               |
//| OUTPUT PARAMETERS:                                               |
//|     C   -   array[M,M], correlation matrix (zero if N=0 or N=1)  |
//+------------------------------------------------------------------+
static bool CBaseStat::PearsonCorrM(const CMatrixDouble &cx,const int n,
                                    const int m,CMatrixDouble &c)

PearsonCorr2 - 행과 행의 상관관계. 전체 행렬의 경우: 1번째 행은 1번째 이후의 모든 행을, 2번째 행은 2번째 이후의 모든 행을 검사합니다.

//+------------------------------------------------------------------+
//| Pearson product-moment correlation coefficient                   |
//| Input parameters:                                                |
//|     X       -   sample 1 (array indexes: [0..N-1])               |
//|     Y       -   sample 2 (array indexes: [0..N-1])               |
//|     N       -   N>=0, sample size:                               |
//|                 * if given, only N leading elements of X/Y are   |
//|                   processed                                      |
//|                 * if not given, automatically determined from    |
//|                   input sizes                                    |
//| Result:                                                          |
//|     Pearson product-moment correlation coefficient               |
//|     (zero for N=0 or N=1)                                        |
//+------------------------------------------------------------------+
static double CBaseStat::PearsonCorr2(const double &cx[],const double &cy[],
                                      const int n)



그리고 PearsonCorrM2를 통해 전체 행렬을 하나의 행렬로 작성하고 다른 행을 검사할 수 있습니다. 따라서 1 행부터 모든 행까지 한 번에 확인할 수 있지만 10 번째 행의 경우 10 위 행과의 상관 관계가 이미 계산되어 있기 때문에 불필요한 작업이 분명히 있습니다.

static bool CBaseStat::PearsonCorrM2(const CMatrixDouble &cx,const CMatrixDouble &cy,
                                     const int n,const int m1,const int m2,
                                     CMatrixDouble &c)


약 5k*20k의 행렬을 확인하세요. 100*100이면 빠릅니다.
 
20k*20k 매트릭스의 무게는 2GB입니다.
 
Maxim Dmitrievsky #:
20k*20k 넘피 매트릭스의 무게는 2GB입니다.

4억 개의 이중 숫자의 무게는 3기가입니다.

 
mytarmailS #:

MathAbs ()는 불필요한 것 같습니다.

부호를 별도로 확인할 수도 있습니다. 요점이 아닙니다.

 
fxsaber #:

4억 개의 이중 숫자의 무게는 3기가바이트입니다.

이 모든 기쁨에 비해 메모리가 충분하지 않다는 것은 이해할 수 있습니다.