Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
Faire un filtre est la moitié de la bataille. Toute critique du code, dans le but de l'améliorer, est la bienvenue !
//+------------------------------------------------------------------+ //| 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 | //+------------------------------------------------------------------+ voidOnStart() { int massivSize=19; //размер массива double Digit[19]= { 10, 20, 30, 40, 50, 51, 52, 53, 54, 60, 70, 80, 120, 150, 190, 210, 223, 232, 250, 260 }; double summDelta[19-1]; int N=massivSize-1;//Количество оставшихся цифровых значений double avrMass=0;//Среднее значение массива дельт int SizeMass=0;//Узнаем размер массива int SizeMassDigit=0;//Узнаем размер массива
//-Фильтр //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);
SizeMass=ArraySize(summDelta);//Узнаем размер массива avrMass=iMAOnArray(summDelta,0,SizeMass,0,0,0); Print("Среднее значение получившегося числового ряда=",avrMass);
//-Основной алгоритм //1. Находим разницу между числами - это как раз их близость друг от друга.
//2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.
//3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0.
//4. Находим максимальное значение из пункта 3.
//5. Определяем диапазон - находим значение из пункта 4 и ищем вверх из пункта 3 число с нулевым значением, потом увеличиваем найденное число на единицу. //Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим. } //+------------------------------------------------------------------+
ln(a) est défini comme l'aire sous la courbe f(x) = 1/x de 1 à a
Cela aidera-t-il ?
ln(a) est défini comme l'aire sous la courbe f(x) = 1/x de 1 à a
Cela aidera-t-il ?
En quoi cela peut-il aider ?
Tout est là.
Quelle fonction puis-je utiliser pour le savoir :
1. Nombre de groupes de chiffres ;
2. La densité de chaque groupe par rapport aux autres ;
3. La densité moyenne des groupes les uns par rapport aux autres ;
4. Le pourcentage des groupes qui remplissent la ligne numérique.
Avec quelle fonction je peux le découvrir :
Je ne sais pas. J'ai lu le titre du fil de discussion.
Je vois. Apparemment, le titre du fil de discussion n'est pas bon, car il n'entre pas vraiment dans le vif du sujet.
Faire un filtre est la moitié de la bataille. Toute critique du code, dans le but de l'améliorer, est la bienvenue !
//| 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,
250,
260
};
double summDelta[19-1];
int N=massivSize-1;//Количество оставшихся цифровых значений
double avrMass=0;//Среднее значение массива дельт
int SizeMass=0;//Узнаем размер массива
int SizeMassDigit=0;//Узнаем размер массива
//-Фильтр
//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);
//-Основной алгоритм
//1. Находим разницу между числами - это как раз их близость друг от друга.
//2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.
//3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0.
//4. Находим максимальное значение из пункта 3.
//5. Определяем диапазон - находим значение из пункта 4 и ищем вверх из пункта 3 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
}
//+------------------------------------------------------------------+
Faire un filtre est la moitié de la bataille. La critique du code, afin de l'améliorer, est la bienvenue !
Fabriquez un filtre, décrivez ses caractéristiques.
Que critiquer - la qualité du code ou la qualité du filtre ?
Vous avez fabriqué un filtre, décrivez ses caractéristiques.
Que critiquer - la qualité du code ou la qualité du filtre ?
Description du filtre ici https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Critiquez le code ou l'idée - je suis heureux de communiquer sur ce sujet.
Description du filtre ici https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Critiquez le code ou l'idée - je suis heureux d'avoir toute communication sur le sujet.
> Je suis en train de tester un tel algorithme pour filtrer les données avant traitement :
> 1. Additionner les deux deltas en séquence et multiplier la valeur par deux
> 2. on trouve la valeur moyenne de la série numérique résultante
c'est un jeu d'enfant.
Le point 1 est (SMA 2) * 4
point 2 - vous obtenez la valeur moyenne de la "série numérique résultante" de quelle longueur ?