Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
ln(a) se define como el área bajo la curva f(x) = 1/x desde 1 hasta a
¿Servirá de algo?
ln(a) se define como el área bajo la curva f(x) = 1/x desde 1 hasta a
¿Servirá de algo?
¿Cómo puede ayudar?
Todo está ahí.
¿Qué función puedo utilizar para averiguarlo?
1. Número de grupos numéricos;
2. La densidad de cada grupo en relación con los demás;
3. La densidad media de los grupos en relación con los demás;
4. El porcentaje de los grupos que llenan la fila numérica.
Con qué función puedo averiguarlo:
No lo sé. He leído el título del hilo.
Ya veo. Por lo visto, el título del hilo no es bueno, ya que no llega al meollo de la cuestión.
Hacer un filtro es la mitad de la batalla. Las críticas al código, con el fin de mejorarlo, son bienvenidas.
//| 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 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
}
//+------------------------------------------------------------------+
Hacer un filtro es la mitad de la batalla. Las críticas al código, para mejorarlo, son bienvenidas.
Realiza un filtro, describe sus características.
¿Qué criticar, la calidad del código o la calidad del filtro?
Si has hecho un filtro, describe sus características.
¿Qué criticar, la calidad del código o la calidad del filtro?
Descripción del filtro aquí https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Critique el código o la idea: estoy encantado de comunicarme sobre este tema.
Descripción del filtro aquí https://www.mql5.com/ru/forum/163871/page3#comment_3940913
Criticar el código o la idea - estoy feliz de tener cualquier comunicación sobre el tema.
> Estoy probando un algoritmo de este tipo para filtrar los datos antes de procesarlos:
> 1. Suma los dos deltas en secuencia y multiplica el valor por dos
> 2. encontramos el valor medio de la serie numérica resultante
esto es un juego de niños.
El punto 1 es (SMA 2) * 4
punto 2 - se obtiene el valor medio de la "serie numérica resultante" ¿de qué longitud?