You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
ln(a) is defined as the area under the curve f(x) = 1/x from 1 to a
Will it help?
ln(a) is defined as the area under the curve f(x) = 1/x from 1 to a
Will it help?
How can it help?
It's all there.
What function can I use to find out:
1. Number of number groups;
2. The density of each group in relation to each other;
3. The average density of the groups in relation to each other;
4. The percentage of the groups that fill the numerical row.
With which function I can find out:
I don't know. I read the title of the thread.
I see. Apparently the title of the thread isn't a good one, as it doesn't really get to the heart of the matter.
Making a filter is half the battle. Criticism of the code, with the aim of improving it, is welcome!
//| 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 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
}
//+------------------------------------------------------------------+
Making a filter is half the battle. Criticism of the code, in order to improve it, is welcome!
Made a filter, describe its characteristics.
What to criticise - the quality of the code or the quality of the filter?
Have you made a filter, describe its characteristics.
What to criticise - the quality of the code or the quality of the filter?
Description of the filter here https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Criticise the code or the idea - I'm happy to communicate on this topic.
Description of the filter here https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Criticise the code or the idea - I'm happy to have any communication on the subject.
> I am testing such an algorithm to filter data before processing:
> 1. Sum the two deltas in sequence and multiply the value by two
> 2. we find the mean value of the resulting numerical series
this is child's play.
Point 1 is (SMA 2) * 4
point 2 - you get the average value of the "resulting numerical series" of what length?