![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
ln(a), 1'den a'ya f(x) = 1/x eğrisinin altındaki alan olarak tanımlanır.
Yardım edecek?
ln(a), 1'den a'ya f(x) = 1/x eğrisinin altındaki alan olarak tanımlanır.
Yardım edecek?
Nasıl yardımcı olabilir?
Her şey burada.
Hangi işlevle öğrenebilirim:
1. Sayısal grupların sayısı;
2. Her grubun diğerine göre yoğunluğu;
3. Grupların kendi aralarındaki ortalama yoğunluğu;
4. Sayısal serilerin gruplarını doldurma yüzdesi.
Hangi işlevle öğrenebilirim:
bilmiyorum. Konu başlığını okuyun.
Anladım. Görünüşe göre şubenin adı konunun tüm özünü ortaya koymadığı için pek başarılı değil.
Bir filtre yaptım - savaşın yarısı. Kodun iyileştirilmesi için eleştiri - açığız!
//| 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 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
}
//+------------------------------------------------------------------+
Bir filtre yaptım - savaşın yarısı. Kodun iyileştirilmesi için eleştiri - açığız!
Bir filtre yaptım, özelliklerini tanımladım.
Neyi eleştirmeli - kod kalitesi mi yoksa filtreleme kalitesi mi?
Bir filtre yaptım, özelliklerini tanımladım.
Neyi eleştirmeli - kod kalitesi mi yoksa filtreleme kalitesi mi?
Filtre açıklamasını burada https://www.mql5.com/en/forum/163871/page3#comment_3940913
Kodu veya fikri eleştirmek için - Bu konuyla ilgili herhangi bir iletişim için memnunum.
Filtre açıklamasını burada https://www.mql5.com/en/forum/163871/page3#comment_3940913
Kodu veya fikri eleştirmek için - Bu konuyla ilgili herhangi bir iletişimden memnunum.
> İşlemeden önce aşağıdaki veri filtreleme algoritmasını test ediyorum:
> 1. Serideki iki deltayı toplayın ve değeri iki ile çarpın
> 2. Ortaya çıkan sayı serisinin ortalama değerini bulun
bu bebek konuşması.
madde 1 (SMA 2) * 4'tür
nokta 2 - Hangi uzunluktaki "sonuçlanan sayı serisinin" ortalama değerini alıyor musunuz?