Numerische Reihendichte - Seite 6

 
-Aleks-:

Ich wiederhole die Frage: Welches Fenster schlagen Sie vor, um eine numerische Reihe zu mitteln?

Was ist das rote Quadrat auf Ihrem Screenshot?

Oh je...

Nun, schieben Sie die numerischen Werte der Reihe mit einer Verschiebung nach rechts hinein, wenn sie passen.

Sie erhalten SMA und Dichte

 
Renat Akhtyamov:

Was ist das rote Quadrat auf Ihrem Screenshot?

Oh je...

Schieben Sie die numerischen Werte der Reihe nach rechts, wenn sie passen.

Sie erhalten SMA und Dichte.

Das Rot zeigt die Fläche der Dichte der Zahlen in der Zahlenreihe, die nach dem obigen Algorithmus gefunden wurde. Sie wollen die Zahlenwerte mit einer Verschiebung nach rechts in das Quadrat schieben, aber wie finden Sie dieses Quadrat? Lassen Sie uns nicht über Gefühle diskutieren, sondern über Zahlen - es gibt eine Zahlenreihe - zeigen Sie mir, wie Sie das rote Quadrat finden, wie auf dem Screenshot.
 
-Aleks-:
Die rote Farbe zeigt die Fläche der Zahlendichte in der Zahlenreihe an, die nach dem obigen Algorithmus gefunden wurde. Sie möchten Zahlenwerte in das Quadrat mit einer Verschiebung nach rechts einfügen, aber wie finden Sie dieses Quadrat? Lassen Sie uns nicht über Emotionen, sondern über Zahlen sprechen - es gibt eine Zahlenreihe - zeigen Sie mir, wie Sie das rote Quadrat finden, wie auf dem Screenshot.

SMA-Periode - wie immer Sie es wünschen

es ist auch ein Quadrat

Haben Sie sich die MA-Formel überhaupt schon einmal angesehen?

 
Renat Akhtyamov:

SMA-Periode - wie immer Sie es wünschen

Es ist ein Quadrat.

Haben Sie sich die Formel von MA überhaupt angeschaut, um damit zu beginnen?

Ich habe Ihnen bereits gesagt: Wenn Sie andere für Idioten halten, beweisen Sie Ihre Intelligenz in der Praxis - nennen Sie mir eine Berechnung und einen Algorithmus.

 
-Aleks-:

Ich habe Ihnen bereits gesagt - wenn Sie andere für Idioten halten, dann beweisen Sie Ihre Intelligenz in der Praxis - geben Sie eine Berechnung und einen Algorithmus an.

Und wo ist die Untertasse mit dem goldenen Tablett, wo soll ich sie hinstellen?

Wenn Sie keine Ahnung hatten, kann ich Ihnen nur viel Erfolg dabei wünschen!

 
Renat Akhtyamov:

und wo ist die Untertasse mit dem Goldteller, wo soll ich sie hinstellen?

Wenn Sie keine Ahnung hatten, kann ich Ihnen nur viel Erfolg dabei wünschen!

Nun, es ist offensichtlich, dass Sie nicht in der Lage sind, Ihre Fantasien mit Taten zu untermauern.

Viel Glück bei der Suche nach einem anderen Ort, an dem Sie sich behaupten können!

 

Reproduzieren Sie den Algorithmus bis zu dem Punkt, an dem Sie Gruppen von dichten Zahlen auswählen. Als Nächstes müssen Sie seine tatsächliche Leistung wie folgt überprüfen:

1. Ändern Sie die Ausgangsdaten

2. Speichern Sie das Ergebnis der ausgewählten Zahlen

3. Visualisierung der Daten


//+------------------------------------------------------------------+
//|                                             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-:

Nun, es ist offensichtlich, dass Sie nicht in der Lage sind, Ihren Fantasien Taten folgen zu lassen.

Viel Glück bei der Suche nach einem anderen Ort, an dem Sie sich behaupten können!

Meiner ist nicht hier.
 
Renat Akhtyamov:
Meiner ist nicht hier.

Ich überprüfe meine Fantasien - ich arbeite an ihnen - ich überprüfe sie, aber du nicht.

 

Versuchen Sie diese Nummernserie:

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

Ich habe die folgenden Zahlen erhalten (obwohl eine weitere Null dabei ist - ich muss herausfinden, warum):

10
13
15
21
40
42
46
51
56
78
81

Grafisch sieht es so aus:

Das Diagramm zeigt, dass dichte Gruppen von Zahlen gefunden werden (Zeile 2).

Sieht nicht schlecht aus, aber ohne objektive Kritik und Überprüfung geht es nicht - bitte finden Sie Fehler im Algorithmus. Interessiert an alternativen Lösungen, aber mit einer belegbaren Grundlage.

Grund der Beschwerde: