for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X { int arr++ if(arr=ARRAY_SIZE_X) {z++;arr=0;}
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA } //--- запишем данные массива в конец файла FileTell IsFileLineEnded FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arra);
void BySort(double &mas[][3]) { // Сортируем по размеру лота от большего к меньшему ArraySort(mas); ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает
void BySort(double &mas[][3])// выделенное лишнее { // Сортируем по размеру от большего к меньшему ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5
ArraySort(mas); ArraySetAsSeries(mas,true); // а при такой записи ругается // это тоже лишнее }
1万×1万は2次元ではないか?
などなど...
そうですね......2次元です。私の言い方が悪かったですね。どうやら行列ではなく、配列のようです。行列は多次元性を意味するのか?
このコードでブレーキになっているのは、配列の書き込みではなく、ループの中のループです。
同意見です。そのようなことは言っておらず、誤解されていた。
このコードでブレーキになっているのは、配列の書き込みではなく、ループの中のループです。
他のプログラミング環境に移植する必要があるのか、それとも、あらゆる種類の言語に共通する問題ではないのでしょうか。スピードアップのための解決策とは?
もし、あるループで、削除されたループから変数の値を増加させた場合
{
int arr++
if(arr=ARRAY_SIZE_X) {z++;arr=0;}
arra[q]=sm.d[q].m[nBar-z]; // M(I) SMA
}
//--- запишем данные массива в конец файла FileTell IsFileLineEnded
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arra);
確認したかもしれませんが、パソコンに迷惑をかけたくないので、スピードアップしないと、またハードディスクに余計なストレスがかかってしまいます)))
他のプログラミング環境に移行する必要があるのか、それともあらゆる種類の言語に共通する問題ではないのか。スピードアップのための解決策とは?
あるループの中で、削除したループの変数の値を増やすと、速度が速くなるのでしょうか?
確認してもいいのですが、加速していないとまたハードディスクに余計なストレスがかかるので、パソコンをいためたくないのです)))
ループの後に配列を書くことはできないのでしょうか?各行にのみ行うことは可能でしょうか?私が言っているのは、ループの中にある最初のバリエーションです。
もちろん、追加でカウンターを挿入し、各行を個別にではなく、このカウンターに書き込むことも可能ですが、計測せずに気づくほど高速化することはないと思われます。
このサイズの配列は、割り当てられたRAMに収まりきらないだろう。
もちろん、追加でカウンターを挿入し、各行を個別に記録するのではなく、このカウンターで記録することもできますが、測定せずに気づくほど処理が速くなることはないでしょう。
教えてください、ドキュメントには(コンパイラにも)そう書いてあるのですが。"多次元配列にAS_SERIESフラグを設定 することはできません"
質問: mql5で配列をソートするにはどうすればよいですか?
void Func()
{
double m[][3];
if(условия)
{
// много кода
c++;
ArrayResize(m, c);
m[c-1][0]= Lots();
m[c-1][1]= Ticket();
m[c-1][2]= Profit();
}
BySort(m); // передаём в функцию "BySort"
}
void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
ArraySort(mas);
ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает
... здесь работа с массивом и основной код
}アドバイスお願いします!ドキュメントには(コンパイラにも)こう書いてあります。"多次元配列にAS_SERIESフラグを設定 することはできません"。
質問:配列のソート方法について。
if(условия)
{
// много кода
c++;
ArrayResize(m, c);
m[c-1][0]= Lots();
m[c-1][1]= Ticket();
m[c-1][2]= Profit();
}
void BySort(double &mas[][3])// выделенное лишнее
{
// Сортируем по размеру от большего к меньшему
ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5
ArraySort(mas);
ArraySetAsSeries(mas,true); // а при такой записи ругается // это тоже лишнее
}
1 - 配列のセルのインデックスを変更することなく、その内容を変更することができます。
さらに、ドキュメントには、配列は最初の次元でしかソートできないと書かれています。
AS_SERIESとソートは全く別の概念です。
1 - 内容を変更せずに配列セルのインデックスの方向を変更する。 2 - インデックスを変更せずに、セルの内容を昇順または降順に並べ替える。
さらに、ドキュメントには、配列は最初の次元でしかソートできないと書かれています。
ここでは昇順にソートしています
今、どうすれば元に戻せるのか?降順でなければならない、ロットをソートしている。
ここでは昇順にソートしています
今、どうすれば元に戻せるのか?降順で必要です、ロットをソートします。
そして、最も間抜けな選択肢は、配列全体を逆順に書き換えることです。その価値はあるのか?
ここでは昇順にソートしています
今、どうすれば元に戻せるのか?降順で必要です、ロットをソートします。
ソートした後、ArraySetAsSeriesを使ってインデックスの順番を変更した場合はどうでしょうか?
すると、こんな 感じになります。