Densidade de séries numéricas - página 6

 
-Aleks-:

Repito a pergunta - que janela você propõe para a média de uma série numérica?

Qual é o quadrado em vermelho em sua captura de tela?

Oh meu Deus...

Bem, empurre os valores numéricos da série para dentro dela com um deslocamento para a direita, se eles se encaixarem.

Você receberá SMA e densidade

 
Renat Akhtyamov:

Qual é o quadrado em vermelho em sua captura de tela?

Oh meu Deus...

Bem, empurre os valores numéricos da série para a direita, se eles se encaixarem.

Você terá SMA e densidade.

O vermelho mostra a área de densidade de números na série numérica, encontrada de acordo com o algoritmo acima. Você quer enfiar os valores numéricos no quadrado com um deslocamento para a direita, mas como encontrar este quadrado? Não vamos discutir emoções, mas números - há uma série numérica - me mostre como encontrar o quadrado vermelho, como na captura de tela.
 
-Aleks-:
A cor vermelha indica a área da densidade de números na série numérica, encontrada de acordo com o algoritmo acima. Você quer colocar valores numéricos no quadrado com um deslocamento para a direita, mas como encontrar este quadrado? Não vamos discutir emoções, mas números - existe uma série numérica - me mostre como você encontra o quadrado vermelho, como na captura de tela.

Período SMA - o que você quiser que seja

é também um quadrado

Você já olhou sequer para a fórmula MA para começar?

 
Renat Akhtyamov:

Período SMA - o que você quiser que seja

É um quadrado.

Você já olhou sequer para a fórmula de MA para começar?

Já lhe disse - se você acha que os outros são idiotas, prove sua inteligência na prática - me dê um cálculo e um algoritmo.

 
-Aleks-:

Já lhe disse - se você acha que os outros são idiotas, então prove sua inteligência na prática - dê um cálculo e um algoritmo.

E onde está o pires com a travessa dourada, onde devo colocá-lo?

Se lhe faltou uma pista, só posso desejar-lhe sucesso neste caso!

 
Renat Akhtyamov:

e onde está o pires com a bandeja de ouro, onde o coloco?

Se lhe faltou uma pista, só posso desejar-lhe sucesso neste caso!

Bem, é óbvio agora que você não pode respaldar suas fantasias com ação.

Boa sorte para encontrar outro lugar para se afirmar!

 

Reproduzir o algoritmo até o ponto de selecionar grupos de números densos. A seguir, você precisa verificar seu desempenho real da seguinte forma:

1. Alterar os dados iniciais

2. salvar o resultado de números selecionados

3. Visualizar os dados


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

Bem, é óbvio agora que você não pode respaldar suas fantasias com ação.

Boa sorte para encontrar outro lugar para se afirmar!

O meu não está aqui.
 
Renat Akhtyamov:
O meu não está aqui.

Eu verifico minhas fantasias - eu trabalho nelas - eu as verifico, mas você não.

 

Tentei esta série de números:

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

Tenho os seguintes números (embora haja outro zero aí dentro - terei que descobrir o porquê):

10
13
15
21
40
42
46
51
56
78
81

Em termos gráficos, é o que parece:

O gráfico mostra que grupos densos de números são encontrados (Linha 2).

Não parece ruim, mas sem crítica e verificação objetiva não pode - peço que esteja disposto a encontrar falhas no algoritmo. Interessado em soluções alternativas, mas com uma base comprovável.

Razão: