Densidad de la serie numérica - página 6

 
-Aleks-:

Repito la pregunta: ¿qué ventana propones para promediar una serie numérica?

¿Qué es el cuadrado en rojo en tu captura de pantalla?

Oh, Dios...

Pues bien, mete los valores numéricos de la serie con un desplazamiento a la derecha, si es que caben.

Obtendrá SMA y densidad

 
Renat Akhtyamov:

¿Qué es el cuadrado en rojo en tu captura de pantalla?

Oh, Dios...

Pues bien, empuja los valores numéricos de la serie hacia la derecha, si caben.

Tendrás SMA y densidad.

El rojo muestra el área de densidad de los números de la serie numérica, encontrada según el algoritmo anterior. Se quiere meter los valores numéricos en el cuadrado con un desplazamiento hacia la derecha, pero ¿cómo se encuentra este cuadrado? No hablemos de emociones, sino de números - hay una serie numérica - muéstrame cómo encuentras el cuadrado rojo, como en la captura de pantalla.
 
-Aleks-:
El color rojo indica el área de la densidad de números en la serie numérica, encontrada según el algoritmo anterior. Se quiere poner los valores numéricos en el cuadrado con un desplazamiento hacia la derecha, pero ¿cómo se encuentra este cuadrado? No hablemos de emociones, sino de números - hay una serie numérica - muéstrame cómo encuentras el cuadrado rojo, como en la captura de pantalla.

Período de la SMA - lo que usted quiera que sea

también es un cuadrado

¿Has mirado siquiera la fórmula de la AM para empezar?

 
Renat Akhtyamov:

Período de la SMA - lo que usted quiera que sea

Es un cuadrado.

¿Has mirado siquiera la fórmula de MA para empezar?

Ya te lo he dicho: si crees que los demás son idiotas, demuestra tu inteligencia en la práctica: dame un cálculo y un algoritmo.

 
-Aleks-:

Ya te lo he dicho: si crees que los demás son idiotas, demuestra tu inteligencia en la práctica: da un cálculo y un algoritmo.

¿Y dónde está el platillo con la bandeja dorada, dónde lo pongo?

Si te falta una pista, ¡sólo puedo desearte que tengas éxito en esto!

 
Renat Akhtyamov:

y ¿dónde está el platillo con el plato dorado, dónde lo pongo?

Si te falta una pista, ¡sólo puedo desearte que tengas éxito en esto!

Bueno, ahora es obvio que eres incapaz de respaldar tus fantasías con acciones.

Buena suerte en la búsqueda de otro lugar para hacerse valer.

 

Reproducir el algoritmo hasta el punto de seleccionar grupos de números densos. A continuación, tienes que comprobar su rendimiento real de la siguiente manera:

1. Modificar los datos iniciales

2. guardar el resultado de los números seleccionados

3. Visualizar los datos


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

Bueno, ahora es obvio que eres incapaz de respaldar tus fantasías con acciones.

Buena suerte en la búsqueda de otro lugar para hacerse valer.

El mío no está aquí.
 
Renat Akhtyamov:
El mío no está aquí.

Yo compruebo mis fantasías, trabajo en ellas, las compruebo, pero tú no.

 

Probé esta serie de números:

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

Obtuve los siguientes números (aunque hay otro cero ahí, tendré que averiguar por qué):

10
13
15
21
40
42
46
51
56
78
81

Gráficamente se ve así:

El gráfico muestra que se encuentran grupos densos de números (Fila 2).

No se ve mal, pero sin la crítica objetiva y la verificación no puede - pido dispuesto a encontrar defectos en el algoritmo. Interesado en soluciones alternativas, pero con una base demostrable.