Densité des séries numériques - page 6

 
-Aleks-:

Je répète la question - quelle fenêtre proposez-vous pour faire la moyenne d'une série numérique ?

Quel est le carré en rouge dans votre capture d'écran ?

Oh là là...

Eh bien, insérez-y les valeurs numériques de la série avec un décalage vers la droite, si elles conviennent.

Vous obtiendrez la SMA et la densité

 
Renat Akhtyamov:

Quel est le carré en rouge dans votre capture d'écran ?

Oh là là...

Eh bien, déplacez les valeurs numériques de la série vers la droite, si elles conviennent.

Vous obtiendrez la SMA et la densité.

Le rouge montre la zone de densité des nombres dans la série numérique, trouvée selon l'algorithme ci-dessus. Vous voulez faire entrer les valeurs numériques dans le carré avec un décalage vers la droite, mais comment trouver ce carré ? Ne parlons pas d'émotions, mais de nombres - il y a une série numérique - montrez-moi comment vous trouvez le carré rouge, comme sur la capture d'écran.
 
-Aleks-:
La couleur rouge indique la zone de densité des nombres dans la série numérique, trouvée selon l'algorithme ci-dessus. Vous voulez mettre les valeurs numériques dans le carré avec un décalage vers la droite, mais comment trouver ce carré ? Ne parlons pas d'émotions, mais de nombres - il y a une série numérique - montrez-moi comment vous trouvez le carré rouge, comme sur la capture d'écran.

Période SMA - ce que vous voulez qu'elle soit

c'est aussi un carré

Avez-vous seulement regardé la formule MA pour commencer ?

 
Renat Akhtyamov:

Période SMA - ce que vous voulez qu'elle soit

C'est un carré.

Avez-vous seulement regardé la formule du MA pour commencer ?

Je vous l'ai déjà dit - si vous pensez que les autres sont des idiots, prouvez votre intelligence en pratique - donnez-moi un calcul et un algorithme.

 
-Aleks-:

Je vous l'ai déjà dit - si vous pensez que les autres sont des idiots, alors prouvez votre intelligence en pratique - donnez un calcul et un algorithme.

Et où est la soucoupe avec le plat doré, où dois-je la mettre ?

Si vous n'avez pas eu d'indice, je ne peux que vous souhaiter de réussir sur ce coup-là !

 
Renat Akhtyamov:

et où est la soucoupe avec le plat en or, où dois-je la mettre ?

Si vous n'avez pas eu d'indice, je ne peux que vous souhaiter de réussir sur ce coup-là !

Eh bien, il est évident maintenant que vous êtes incapable de soutenir vos fantasmes avec de l'action.

Bonne chance pour trouver un autre endroit où s'affirmer !

 

Reproduisez l'algorithme jusqu'au point de sélection des groupes de nombres denses. Ensuite, vous devez vérifier ses performances réelles comme suit :

1. Modifier les données initiales

2. sauvegarder le résultat des numéros sélectionnés

3. Visualiser les données


//+------------------------------------------------------------------+
//|                                             Test_FindOblast'.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                            https://www.mql5.com/ru/users/-aleks- |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/-aleks-"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int massivSize=19; //размер массива  
   double Digit[19]=
     {
      10,
      20,
      30,
      40,
      50,
      51,
      52,
      53,
      54,
      60,
      70,
      80,
      120,
      150,
      190,
      210,
      223,
      232,
      260,
      250
     };

   double summDelta[19-1];
   int N=massivSize-1;//Количество оставшихся цифровых значений
   double avrMass=0;//Среднее значение массива дельт
   int SizeMass=0;//Узнаем размер массива
   int SizeMassDigit=0;//Узнаем размер массива

ArraySort(Digit,WHOLE_ARRAY,0,MODE_ASCEND);//Сортируем массив на случай, если значения не внесены в порядке возрастания

//-Фильтр
//1. Суммируем  последовательно две дельты и умножаем значение на два
   for(int i=1;i<massivSize;i++)
     {
      summDelta[i-1]=((Digit[i]-Digit[i-1])+(Digit[i+1]-Digit[i]))*2;
     }
   for(int i=0;i<massivSize-1;i++) printf("summDelta[%d] = %G",i,summDelta[i]);

//3. Составляем новый числовой ряд, если значение меньше среднего значения
//4. Повторяем пункт 2-3 пока числовой ряд не будет меньше половины первоначального ряда
   for(int Z=0;N>massivSize/2;Z++)
     {
      SizeMass=ArraySize(summDelta);//Узнаем размер массива
      SizeMassDigit=ArraySize(Digit);//Узнаем размер массива      
      avrMass=0;
      int NOL=0;
      int CalcZero=0;

//2. Находим среднее значение получившегося числового ряда
      for(int i=0;i<SizeMass;i++)
        {
         if(summDelta[i]!=0)avrMass=avrMass+summDelta[i];
         else NOL++;
        }
      avrMass=avrMass/(SizeMass-NOL);
      Print("Среднее значение получившегося числового ряда ",Z,"=",avrMass);

//Обнуляем отфильтрованные значения массива summDelta
      for(int i=0;i<SizeMass;i++)
        {
         if(summDelta[i]>avrMass)
           {
            summDelta[i]=0;
            N--;
           }
        }
      for(int i=0;i<SizeMass;i++) printf("Обнуление summDelta[%d] = %G",i,summDelta[i]);

//Обнуляем отфильтрованные значения массива SizeMassDigit
      for(int i=0;i<SizeMassDigit;i++)
        {
         if(i==0)
           {
            if(summDelta[i]!=0) Digit[i]=Digit[i];
            else Digit[i]=0;
           }
         if(i==1)
           {
            if(summDelta[i-1]!=0 || summDelta[i]!=0) Digit[i]=Digit[i];
            else Digit[i]=0;
           }
         if(i>1 && i<SizeMass)
           {
            if(summDelta[i-2]!=0 || summDelta[i-1]!=0 || summDelta[i]!=0) Digit[i]=Digit[i];
            else Digit[i]=0;
           }
         if(i==SizeMass-1+1) //Предпоследняя ячейка
           {
            if(summDelta[i-1-1]!=0 || summDelta[i-1-2]!=0) Digit[i]=Digit[i];
            else Digit[i]=0;
           }
         if(i==SizeMass-1+2) //Последняя ячейка
           {
            if(summDelta[i-1-2]!=0) Digit[i]=Digit[i];
            else Digit[i]=0;
           }
        }
      for(int i=0;i<SizeMassDigit;i++) printf("Обнуление Digit[%d] = %G",i,Digit[i]);
     }

   SizeMass=ArraySize(summDelta);//Узнаем размер массива
   SizeMassDigit=ArraySize(Digit);//Узнаем размер массива      
   avrMass=0;
   int NOL=0;
   int CalcZero=0;

//Удаление обнуленных данных массива summDelta
   for(int i=0;i<SizeMass;i++)
     {
      if(summDelta[i]!=0)
        {
         ArrayCopy(summDelta,summDelta,i-CalcZero,i,1);
        }
      else CalcZero++;
     }

//Удаление обнуленных данных массива Digit
   CalcZero=0;
   for(int i=0;i<SizeMassDigit;i++)
     {
      if(Digit[i]!=0)
        {
         ArrayCopy(Digit,Digit,i-CalcZero,i,1);
        }
      else CalcZero++;
     }

   for(int i=0;i<SizeMass;i++) printf("До обрезания массива summDelta[%d] = %G",i,summDelta[i]);
   for(int i=0;i<SizeMassDigit;i++) printf("До обрезания массива Digit[%d] = %G",i,Digit[i]);

   SizeMass=ArraySize(summDelta);//Узнаем размер массива
   SizeMassDigit=ArraySize(Digit);//Узнаем размер массива

   Print("N=",N);
   if(N!=0)
     {
      ArrayResize(summDelta,N,0);
      for(int i=0;i<N;i++) printf("summDelta[%d] = %G",i,summDelta[i]);
      ArrayResize(Digit,SizeMassDigit-CalcZero,0);
      for(int i=0;i<SizeMassDigit-CalcZero;i++) printf("Digit[%d] = %G",i,Digit[i]);
     }
   else
     {
      for(int i=0;i<N;i++) printf("summDelta[%d] = %G",i,summDelta[i]);
      for(int i=0;i<SizeMassDigit-CalcZero;i++) printf("Digit[%d] = %G",i,Digit[i]);
      return;
     }

   SizeMass=ArraySize(summDelta);//Узнаем размер массива
   avrMass=iMAOnArray(summDelta,0,SizeMass,0,0,0);
   Print("Среднее значение получившегося числового ряда=",avrMass);

//-Основной алгоритм
//0. Очистим более не нужный массив
         SizeMassDigit=ArraySize(Digit);               //Узнаем размер массива
         ArrayFree  (summDelta);                       //Очищаем массив
         ArrayResize(summDelta,SizeMassDigit-1,0);     //Восстанавливаем нужный размер массива
         SizeMass=ArraySize(summDelta);                //Узнаем размер массива
        
//1. Находим разницу между числами - это как раз их близость друг от друга.
   for(int i=0;i<SizeMass;i++)
     {
      summDelta[i]=(Digit[i+1]-Digit[i]);
     }
   for(int i=0;i<SizeMass;i++) printf("summDelta[%d] = %G",i,summDelta[i]);

avrMass=iMAOnArray(summDelta,0,SizeMass,0,0,0);
   Print("Среднее значение получившегося числового ряда=",avrMass);

//2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.
   for(int i=0;i<SizeMass;i++)
     {
      if (summDelta[i]<avrMass) summDelta[i]=1;
      else summDelta[i]=0;
     }
   for(int i=0;i<SizeMass;i++) printf("summDelta[%d] = %G",i,summDelta[i]);


//3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0.
   for(int i=0;i<SizeMass;i++)
     {
      if (i==0 && summDelta[i]==1) summDelta[i]=1;
      else if (i==0) summDelta[i]=0;
      if (i>0 && summDelta[i]>0) summDelta[i]=summDelta[i-1]+1;
      else if (i>0)  summDelta[i]=0;
     }
   for(int i=0;i<SizeMass;i++) printf("summDelta[%d] = %G",i,summDelta[i]);


//4. Находим максимальное значение из пункта 3.
int Max=ArrayMaximum(summDelta,WHOLE_ARRAY,0);
Print ("Максимальное значение=",Max);

//4.1 Необходимо найти все группы чисел с подозрением на плотность
   for(int i=0;i<SizeMassDigit;i++)
     {
      if (i==0  && summDelta[i]>0) Digit[i]=Digit[i];
      else if (i==0) Digit[i]=0;
      if (i<SizeMass && i>0 && (summDelta[i-1]>0 || summDelta[i]>0)) Digit[i]=Digit[i];
      else if (i<SizeMass && i>0 ) Digit[i]=0;
      if (i==SizeMass && summDelta[i-1]>0) Digit[i]=Digit[i];
      else if (i==SizeMass) Digit[i]=0;
     }    
   for(int i=0;i<SizeMassDigit;i++) printf("Все группы чисел с подозрением на плотность Digit[%d] = %G",i,Digit[i]);


//5. Определяем диапазон - находим значение из пункта 4 и ищем вверх из пункта 3 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
  }
//+------------------------------------------------------------------+
 
-Aleks-:

Il est évident que vous ne pouvez pas joindre l'action à la parole.

Bonne chance pour trouver un autre endroit où s'affirmer !

Le mien n'est pas là.
 
Renat Akhtyamov:
Le mien n'est pas là.

Je vérifie mes fantasmes - je les travaille - je les vérifie, mais pas toi.

 

J'ai essayé cette série de numéros :

40
56
31
42
46
51
545
13
65
71
78
81
10
15
190
21
223
232
250
260

J'ai obtenu les chiffres suivants (bien qu'il y ait un autre zéro - je vais devoir trouver pourquoi) :

10
13
15
21
40
42
46
51
56
78
81

Graphiquement, cela ressemble à ceci :

Le graphique montre que l'on trouve des groupes de nombres denses (rangée 2).

Ne semble pas mauvais, mais sans critique objective et la vérification ne peut pas - s'il vous plaît veulent trouver des failles dans l'algorithme. Intéressé par des solutions alternatives, mais avec une base prouvable.

Raison: