MA 피드 축적 감지를 알고리즘화하는 방법은 무엇입니까? - 페이지 11

 
Mikhail Toptunov :

즉, 모드 - 매 3분의 1(x[2], x[5] ...) 또는 x[2] - 모드

죄송합니다. 어떻게 ... ( pdf[i] 배열의 최대값에 해당 하는지 이해하지 못합니다.   (4번째 함수 인수) . )

이 같은:

 #include <Math\Stat\Math.mqh>
void OnStart ()
{
   double a[] = { 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.55 , 0.56 , 0.565 , 0.57 , 0.58 , 0.59 , 0.6 , 0.7 , 0.8 , 0.9 };
   double mode, eps = 0.01 ;
  mode = mode_calc(a, eps);
   Print ( "mode = " , mode);
}
//+------------------------------------------------------------------+
double mode_calc( double &a[], double eps) // вычисление моды для выборки a[] с точностью eps
{
   double x[], pdf[];
  MathSequence( MathMin (a), MathMax (a), eps, x);
   int n = ArraySize (x);
   ArrayResize (pdf, n);
  MathProbabilityDensityEmpirical(a, n, x, pdf);
   int ix = ArrayMaximum (pdf);
   return x[ix];
}
 
Maxim Kuznetsov :

최적화, 행렬 및 복잡한 수학 없이 정면으로:

1. 현재 막대의 경우 모든 MA를 별도로 계산합니다. 짧은 SMA[N] 배열을 얻습니다. 마스코트의 값은 최대 N입니다.

2. 최소값=1.00000 의 가격을 포함하는 히트맵[M]을 생성합니다. 각 요소는 (예를 들어) 해상도=10 포인트를 담당합니다.

3. 이 "원시" 히트맵을 채우십시오: 각 ma-shki의 값을 취하고 그것이 속한 셀을 보십시오. 인덱스=(SMA[i]-최소)/해상도. 이 셀 hetmap[index]+=1.0의 값을 늘립니다.

결과를 CSV로 표시하고 생각할 수 있습니다.

4. 원시 히트맵 값 평활화: smooth[] 배열을 만들고 평균 smotch[i]=i-window에서 i+window까지의 평균 히트맵 값을 계산합니다.

5. 로컬 스무치 최고점은 "사료 축적"을 나타냅니다. 최대값을 찾는 방법을 알고 있기를 바랍니다 :-)

포인트 1-5는 최소한의 주기와 추가 배열을 사용하여 수학으로 분해하고 훨씬 빠르게 계산할 수 있지만 더 명확해질 것이라는 사실은 아닙니다.


모르겠어요   hetmap[색인],   인덱스 - (예를 들어 500MA이고 해상도 = 10포인트인 경우) 얼마입니까?

젠장, 그리고 최소값은 1.00000입니다.

내가 알아들은 바로는:

일반적으로 다음 두 MA를 비교할 필요는 없는 것 같습니다. 차이가 1보다 작으면 hetmap[i] 에 작성합니다.

 
Dmitry Fedoseev :

여기에서 이 히트맵은 어느 쪽에 있습니까?

죄송합니다. 그러면 어느쪽에 접근해야 할지 모르겠습니다!

 
Mikhail Toptunov :

죄송합니다. 그러면 어느쪽에 접근해야 할지 모르겠습니다!

입문서에 대한 연구에서 시작되는 것 같습니다.

 
Dmitry Fedoseev :

입문서에 대한 연구에서 시작되는 것 같습니다.



그게 내가 할 수 있는 최선의 선택이야!!! 하지만 이것은 ***

 
Mikhail Toptunov :


그게 내가 할 수 있는 최선의 선택이야!!! 하지만 이것은 ***

클러스터는 어디에 있습니까?

 
직선에서 누적된 점을 어떻게 찾습니까?

가장 간단한 방법은 평균(dlzhat 밀도)을 계산하는 것입니다.

여기에도.
 
나는 "dzhat"이라는 단어의 의미를 찾기 위해 깊은 명상에 들어갔다 ...
 
Dmitry Fedoseev :

클러스터는 어디에 있습니까?

일반적으로 한 묶음이 다른 묶음으로 전환되는 순간, 즉 클러스터가 움직임을 변경할 때를 계산해야 합니다.

사진은 50ur fib 지점에서 이러한 순간을 표시한다고 주장합니다.

막심 쿠즈네초프 :
직선에서 누적된 점을 어떻게 찾습니까?

가장 간단한 방법은 평균(dlzhat 밀도)을 계산하는 것입니다.

여기에도.

(MA[i-1] -MA[i])+(MA[i] -MA[i+1])<0.005이면

MA 영역 [i]에서 (예: +-10 인덱스 값 i) MA의 최소값을 찾고 있습니다.

클러스터 포인트 매개변수를 클래스에 작성합니다(클래스에 객체 생성).

나는 특히 이웃 바의 이웃 묶음(지혈대 자체)을 식별합니다. 즉, 마침표와 막대의 근접성을 위해 클래스의 개체를 정렬합니다.

많은 개체의 추세를 관찰하십시오.

 

일반 작업에서 나는 이것을 수행합니다

 void   medianaL0_0( const int rates_total, const datetime &time[])
  {
   double masPra[Pmax]; // хранение цены МА
   int masPer[Pmax]; // хранение Периода 
   CountPO= 0 ;
   ArrayResize (PO,CountPO); 
   ZeroMemory (PO);
   for ( int b=rates_total-Pmax; b<rates_total; b++)
     {
       for ( int p= 2 ; p<Pmax; p++) // отбор по периодам
        {
         masPra[p]=sm.d[p- 1 ].m[b]; 
         masPer[p]=p;        
        }
      MathQuickSort(masPra,masPer, 2 ,Pmax- 1 , 1 );
      medianaL0_2(masPra,masPer,b,time);
     }
  }

void medianaL0_2( const double &masPra[], const int &masPer[], int bar, const datetime &time[])
  {
   double m[Pmax],x= 0 ,y= 0 ;
   for ( int i= 5 ; i<Pmax- 1 ; i++)
     {
      filter0_0(i);
      x= MathAbs (masPra[i- 1 ]-masPra[i]); //MathSqrt
      y= MathAbs (masPra[i]-masPra[i+ 1 ]);
       int a= MathAbs (masPer[_ot]-masPer[i]);
       int b= MathAbs (masPer[i]-masPer[_do]);
       if (masPer[i]-masPer[i- 1 ]<=_ot) //&&masPer[i+1]-masPer[i]<=_ot
         m[i]=x+y;
       else
          m[i]=- 1 ;
     }
   medianaL0_3(masPra,masPer,bar,time,m);
  }

void medianaL0_3( const double &masPra[], const int &masPer[], int bar, const datetime &time[], const double &m[])
  {
   for ( int i= 5 ; i<Pmax- 1 ; i++)
     {
      filter0_0(i);
       int z= ArrayMinimum (m,_ot,_do);
       if (m[z]<= 0.005 &&m[z]!=- 1 )
        {
         ArrayResize (PO,CountPO+ 1 ); 
         PO[CountPO].bar=bar;
         PO[CountPO].period=masPer[i];
         PO[CountPO].mediana=i;
         PO[CountPO].praceMA=masPra[i];
         PO[CountPO].time=time[bar];
         CountPO++;
        }
      i=i+_do;
     }
  }