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);
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; elseif (i==0) summDelta[i]=0; if (i>0 && summDelta[i]>0) summDelta[i]=summDelta[i-1]+1; elseif (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]; elseif (i==0) Digit[i]=0; if (i<SizeMass && i>0 && (summDelta[i-1]>0 || summDelta[i]>0)) Digit[i]=Digit[i]; elseif (i<SizeMass && i>0 ) Digit[i]=0; if (i==SizeMass && summDelta[i-1]>0) Digit[i]=Digit[i]; elseif (i==SizeMass) Digit[i]=0; } for(int i=0;i<SizeMassDigit;i++) printf("Все группы чисел с подозрением на плотность Digit[%d] = %G",i,Digit[i]);
//5. Определяем диапазон - находим значение из пункта 4 и ищем вверх из пункта 3 число с нулевым значением, потом увеличиваем найденное число на единицу. //Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим. } //+------------------------------------------------------------------+
繰り返しになりますが、数値系列の平均化にはどのようなウィンドウを提案されますか?
スクリーンショットで赤く塗られた四角は何ですか?
やれやれ...。
まあ、シリーズの数値が合えば右にずらしながら 押し込んでください。
SMAと密度を取得します
スクリーンショットで赤く塗られた四角は何ですか?
やれやれ...。
まあ、シリーズの数値が合えば、右に 押し込んでください。
SMAと密度が出ますね。
赤色は、上記のアルゴリズムに従って求めた、数値系列の数値の密度の領域を示しています。 右にシフトした正方形に数値を入れたいのですが、この正方形をどのように見つけるのでしょうか。 感情ではなく、数値について議論しましょう。数値系列はあります。スクリーンショットのように、赤い正方形を見つける方法を示してください。
SMA期間 - 希望する期間
それもまた正方形
そもそもMAの数式を見たことがあるのか?
SMA期間 - 希望する期間
正方形なんです。
そもそもMAの数式を見たことがあるのでしょうか?
もう言ったでしょー、他人をバカだと思うなら、自分の知能を実践で証明しなさい、計算とアルゴリズムを出しなさいって。
私はすでにあなたに言いました--他人を馬鹿だと思うなら、自分の知能を実際に証明しなさい--計算とアルゴリズムを出しなさい。
そして、金色の大皿のついたソーサーは、どこに置けばいいのでしょうか?
手がかりを欠いていたのなら、今回の成功を祈るのみです
と、金の大皿のついたソーサーは、どこに置けばいいんだ?
手がかりを欠いていたのなら、今回の成功を祈るのみです
まあ、あなたが妄想の裏付けを行動で示すことができないのは、もう明らかですね。
また自己主張できる場が見つかると良いですね
密な数のグループを選択するところまでのアルゴリズムを再現する。次に、その実際の性能を以下のように確認する必要があります。
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 число с нулевым значением, потом увеличиваем найденное число на единицу.
//Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.
}
//+------------------------------------------------------------------+
まあ、あなたが妄想の 裏付けを行動で示すことができないのは、もう明らかですね。
また自己主張できる場が見つかると良いですね
私のはここにないんです。
私はファンタジーをチェックする - 私はそれに取り組む - 私はそれをチェックするが、あなたはそうしない。
このナンバーシリーズを試してみた。
40
56
31
42
46
51
545
13
65
71
78
81
10
15
190
21
223
232
250
260
次のような数字が出ました(もう一つ0が入っていますが、これは理由を考えないといけませんね)。
10
13
15
21
40
42
46
51
56
78
81
グラフィック的にはこのような感じです。
グラフでは、密集した数のグループが見られる(2行目)。
悪くはないが、客観的な批判や検証なしにすることはできません見える - 私はアルゴリズムの欠陥を見つけるために喜んで頼む。 代替ソリューションに興味があるが、証明可能な根拠を持つ。