MA beslemesinin birikiminin tespiti nasıl algoritmalaştırılır? - sayfa 11

 
Mikhail Toptunov :

Yani, Mod - her üçte bir (x[2], x[5] ...) veya sadece x[2] - moda

Üzgünüm, nasıl olduğunu anlamıyorum... ( bu, pdf[i] dizisinin maksimum değerine karşılık gelir   (4. fonksiyon argümanı) . )

Bunun gibi bir şey:

 #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 :

optimizasyonlar, matrisler ve karmaşık matematik olmadan kafa kafaya:

1. Mevcut çubuk için tüm MA'ları ayrı ayrı sayarız. SMA[N] dizisini alıyoruz kısaca maskotların değerleri N'ye kadar

2. Minimum=1.000000'den başlayan fiyatları kapsayan bir ısı haritası[M] oluşturun.Her eleman (örneğin) çözünürlük=10 puandan sorumludur.

3. Bu "ham" ısı haritasını doldurun: her ma-shki'nin değerini alın ve hangi hücreye ait olduğuna bakın. indeks=(SMA[i]-minimum)/çözünürlük. Bu hücrenin değerini artır hetmap[index]+=1.0

sonuç CSV'de görüntülenebilir ve düşünce

4. Ham ısı haritası değerlerini yumuşatma: pürüzsüz[] dizisini oluşturun ve i-window'dan i+window dahil olmak üzere ortalama smotch[i]=ortalama ısı haritası değerini hesaplayın

5. Yerel smootch yüksekleri "yem birikimini" gösterecektir. Umarım maksimumu nasıl arayacağınızı biliyorsunuzdur :-)

1-5 arasındaki noktalar matematik tarafından ayrıştırılabilir ve minimum döngü ve ek dizilerle çok daha hızlı hesaplanabilir, ancak daha net olacağı bir gerçek değil


Anlamıyorum   hetmap[indeks],   indeks - (örneğin 500 MA ise ve çözünürlük = 10 puan ise) ne kadar olacak?

Kahretsin ve minimum olan = 1.000.000.

Anladığım kadarıyla:

Genel olarak, sonraki iki MA'yı karşılaştırmaya gerek yok gibi görünüyor, eğer farkları 1'den küçükse hetmap[i] 'ye yazıyoruz.

 
Dmitry Fedoseev :

Buradaki ısı haritası hangi tarafta?

Üzgünüm, o zaman hangi tarafa yaklaşacağımı bilmiyorum!

 
Mikhail Toptunov :

Üzgünüm, hangi yoldan gideceğimi bilmiyorum!

Astar çalışmasıyla başlıyor gibi görünüyor.

 
Dmitry Fedoseev :

Astar çalışmasıyla başlıyor gibi görünüyor.



Yapabileceğim bu, en iyi seçenek bu!!! Ama bu ***

 
Mikhail Toptunov :


Yapabileceğim bu, en iyi seçenek bu!!! Ama bu ***

Kümeler nerede?

 
Düz bir çizgi üzerindeki nokta birikimlerini nasıl arayacaksınız?

En basiti ortalamayı (dzhat yoğunluğunu) hesaplamaktır.

Ayrıca burada.
 
"Dzhat" kelimesinin anlamını aramak için derin meditasyona girdim...
 
Dmitry Fedoseev :

Kümeler nerede?

Genel olarak, bir demetin diğerine geçiş anını, yani kümenin hareketini değiştirdiği anını hesaplamak gerekir.

resim iddiaya göre bu anları 50ur fib noktasında gösteriyor.

Maksim Kuznetsov :
Düz bir çizgi üzerindeki nokta birikimlerini nasıl arayacaksınız?

En basiti ortalamayı (dlzhat yoğunluğunu) hesaplamaktır.

Ayrıca burada.

(MA[i-1] -MA[i])+(MA[i] -MA[i+1])<0,005 ise

MA bölgesinde [i] (örneğin, +-10 indeks değerleri i) MA'nın minimum değerini arıyorum

ve küme noktası parametrelerini sınıfa yazın (sınıfta bir nesne oluşturuyorum)

Komşu demeti (turnikenin kendisi) özellikle komşu çubuğun tanımını yapıyorum. Yani, noktanın ve çubuğun yakınlığı için sınıfın nesnelerini sıralarım.

ve bir grup nesnenin trendini izleyin

 

Genel eylemde bunu gerçekleştiriyorum

 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;
     }
  }