숫자 계열의 밀도 - 페이지 6

 
-Aleks- :

나는 질문을 반복합니다 - 숫자 시리즈의 평균을 계산하기 위해 어떤 창으로 제안합니까?

화면에서 빨간색으로 표시된 사각형은 무엇입니까?

음, 어...

글쎄, 행의 숫자 값이 떨어지면 오른쪽으로 이동하여 행의 숫자 값을 밀어 넣습니다.

당신은 SMA를 가질 것이고 또한 밀도입니다

 
Renat Akhtyamov :

화면에서 빨간색으로 표시된 사각형은 무엇입니까?

음, 어...

글쎄, 시리즈의 숫자 값이 떨어지면 오른쪽으로 이동 하여 숫자 값을 밀어 넣습니다.

당신은 SMA를 가질 것이고 또한 밀도입니다

빨간색은 위의 알고리즘에 따라 찾은 숫자 시리즈의 숫자 밀도 영역을 나타냅니다. 숫자 값을 오른쪽으로 이동하여 상자에 밀어 넣는 것이 좋지만 이 상자를 찾는 방법은 무엇입니까? 감정에 대해 이야기하지 말고 숫자에 대해 이야기합시다. 숫자 시리즈가 있습니다. 화면에서와 같이 빨간색 사각형을 찾는 방법을 보여줍니다.
 
-Aleks- :
빨간색은 위의 알고리즘에 따라 찾은 숫자 시리즈의 숫자 밀도 영역을 나타냅니다. 숫자 값을 오른쪽으로 이동하여 상자에 밀어 넣는 것이 좋지만 이 상자를 찾는 방법은 무엇입니까? 감정에 대해 이야기하지 말고 숫자에 대해 이야기합시다. 숫자 시리즈가 있습니다. 화면에서와 같이 빨간색 사각형을 찾는 방법을 보여줍니다.

SMA 기간 - 원하는 대로 이루어집니다.

그는 광장이다

처음부터 MA-shki 공식을 보았습니까?

 
Renat Akhtyamov :

SMA 기간 - 원하는 대로 이루어집니다.

그는 광장이다

처음부터 MA-shki 공식을 보았습니까?

내가 이미 말했듯이 - 다른 사람들이 바보라고 생각한다면 실제로 마음을 증명하십시오 - 계산과 알고리즘을 제공하십시오.

 
-Aleks- :

내가 이미 말했듯이 - 다른 사람들이 바보라고 생각한다면 실제로 마음을 증명하십시오 - 계산과 알고리즘을 제공하십시오.

그리고 황금 테두리가있는 접시는 어디에 두어야합니까?

팁이 충분하지 않다면 성공을 기원합니다!

 
Renat Akhtyamov :

그리고 황금 테두리가있는 접시는 어디에 놓을까요?

팁이 충분하지 않다면 성공을 기원합니다!

글쎄, 이제 당신이 행동으로 환상을 뒷받침 할 수 없다는 것이 분명해졌습니다.

자기 주장의 다른 장소를 찾는 행운을 빕니다!

 

조밀한 숫자의 그룹을 할당하는 순간까지의 알고리즘을 재현했습니다. 다음으로 다음과 같이 실제 동작을 확인해야 합니다.

1. 초기 데이터 변경

2. 선택한 번호의 결과 저장

3. 데이터 시각화


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

글쎄, 이제 당신이 행동 으로 환상 을 뒷받침 할 수 없다는 것이 분명해졌습니다.

자기 주장의 다른 장소를 찾는 행운을 빕니다!

내 것은 여기에 없다
 
Renat Akhtyamov :
내 것은 여기에 없다

그런 다음 나는 내 환상을 확인합니다. 나는 그것에 대해 작업합니다. 확인하지만 당신은 그렇지 않습니다.

 

나는이 숫자 줄을 시도 :

40
56
31
42
46
51
545
열셋
65
71
78
81

열 다섯
190
21
223
232
250
260

나는 다음과 같은 숫자를 얻었습니다.


열셋
열 다섯
21
40
42
46
51
56
78
81

그래픽으로 보면 다음과 같습니다.

그래프는 밀집된 숫자 그룹이 발견되었음을 보여줍니다(2행).

나쁘지는 않은데 객관적인 비판과 검증이 없이는 불가능합니다 - 알고리즘의 단점을 찾아보고 싶은 분들께 여쭤봅니다. 대안 솔루션도 흥미롭지만 증거 기반이 있습니다.