텐텐셜 플래니메트리 방법 - 페이지 4

 
Mathemat :

하지만 표준 메타쿼터 알고리즘을 재정의해야 합니다.


거부 해야 합니다 . 물론 시간이 중요하다면.
 
Mathemat :

문제는 기계 자체가 표준 메타쿼터 패키지보다 훨씬 더 최적으로 계산하는 방법을 배워야 한다는 것입니다. 틱을 계산하기 위한 일종의 순환 알고리즘이 필요합니다. 여기서 N 기간의 알려진 틱은 기간 N + 1의 틱을 계산하는 데 사용됩니다. 원칙적으로는 간단하지만 표준 메타쿼터 알고리즘을 거부해야 합니다.

틱의 밀도와 관련하여: 여기에는 일종의 클러스터링 알고리즘이 분명히 필요합니다. 왜냐하면 틱은 수직으로 매우 불균일하게 위치할 수 있기 때문입니다(주어진 막대에 대해). 요컨대, 작업은 기술적으로 상당히 어렵습니다.

마지막 백(백 틱을 사용하는 경우) 값이 틱 값을 반환하는 표시기를 만들 수 있습니다. 그러나 이 경우 우리는 SMA에 대해서만 이야기할 것입니다. 다른 자동차에는 약간 다른 알고리즘이 있지만 원칙적으로는 가능합니다.
 

잘 이해가 되지 않습니다, 빅터 . 좀 더 자세히 설명해주세요. "마지막 백"은 무엇입니까? 1차원 배열에서?

원칙적으로 메타 인용 알고리즘의 반복은 모든 자동차에 이미 내장되어 있습니다. 그러나 한 기간의 체커를 호출하는 것이 좋습니다. 그리고 우리에게 매번 다른 기간을 제공하십시오.

 
Mathemat :

원칙적으로 메타 인용 알고리즘의 반복은 모든 자동차에 이미 내장되어 있습니다. 그러나 한 기간의 체커를 호출하는 것이 좋습니다. 그리고 우리에게 매번 다른 기간을 제공하십시오.

 for ( i = 2 ; i <= N ; i ++ ) {
  Sum += Close [ i ] ;
  MA [ i ] = Sum / i ;
}
추신 : 합계도 배열로 만들어야 할 것 같습니다 :)
 
Mathemat :

잘 이해가 되지 않습니다, 빅터 . 좀 더 자세히 설명해주세요. "마지막 백"은 무엇입니까? 1차원 배열에서?

원칙적으로 메타 인용 알고리즘의 반복은 모든 자동차에 이미 내장되어 있습니다. 그러나 한 기간의 체커를 호출하는 것이 좋습니다. 그리고 우리에게 매번 다른 기간을 제공하십시오.


평균을 생각해보면,

 int i , j ;
double sum = 0 , Count ;
for ( i = 0 ; i < 100 ; i ++ ) {
   for ( j = 0 ; j <s tep ; j ++ ) {
       sum += Close [ i * step + j ] ;
       Count ++;
   }
   Buffer [ i ] = sum / Count ;
}
같은 것.
 

나는 다른 것을 의미했다.

 double SMA ( int newperiod , int sh , double SMAprev )
{
   return ( ( SMAprev * ( newperiod - 1 ) + Close [ sh + newperiod - 1 ] ) / newperiod ) ;
}

기간에 관계없이 값 비싼 iMA () 호출 대신 함수는 기간에 관계없이 1씩 증가된 틱을 계산합니다. 따라서 실제로 계산된 각 막대에서 iMA()는 처음과 마지막으로 한 번만 호출됩니다.

EMA의 경우에도 유사한 알고리즘이 반복되지만 그렇게 명확하지는 않습니다. SMMA는 EMA와 동일하며 LWMA만 볼 수 있습니다.

 
함수를 호출하면 추가 오버헤드가 발생합니다. SMPrev 대신 합계를 기억하면 여러 작업을 제거할 수 있습니다.
 
음, 예, 금액이 기억되거나 오히려 이전 SMA입니다. 표준 방법을 사용하여 하나의 막대에 천 개의 계산을 수행하는 두 개의 코드를 게시하는 것은 문제가 되지 않습니다. 그리고 그들의 성능을 비교하십시오.
 

물론 더 빠릅니다. 그러나 나는 "더 빠르게"에 대해 이야기하고 있습니다. :). 위의 내 것과 비교하십시오.

 
아하, 솔직히 이제 이해했습니다. shift sh가 있는 임의의 막대의 경우:

 // размер массива SMA[] уже установлен равным N+1 перед вызовом функции
void createSMAsArray ( int sh , double & SMA [] ) 
{
   double Sum = 0;
   for ( int i = 1 ; i <= N ; i ++ ) 
   {
     Sum += Close [ sh + i - 1 ] ;
     SMA [ i ] = Sum / i ;
   }
   return;
}
그래서 무엇? 초기 합계 지수에 주의하십시오.