初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 731

 
Vitalie Postolache:

1万×1万は2次元ではないか?

double arr[10000][10000];

などなど...

トップ2n:
そうですね......2次元です。私の言い方が悪かったですね。どうやら行列ではなく、配列のようです。行列は多次元性を意味するのか?
私もそう思います。そんなことは言っていない、しかも誤解されている。

このコードでブレーキになっているのは、配列の書き込みではなく、ループの中のループです。
 
Alexey Viktorov:
同意見です。そのようなことは言っておらず、誤解されていた。

このコードでブレーキになっているのは、配列の書き込みではなく、ループの中のループです。

他のプログラミング環境に移植する必要があるのか、それとも、あらゆる種類の言語に共通する問題ではないのでしょうか。スピードアップのための解決策とは?

もし、あるループで、削除されたループから変数の値を増加させた場合

         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);


確認したかもしれませんが、パソコンに迷惑をかけたくないので、スピードアップしないと、またハードディスクに余計なストレスがかかってしまいます)))

 
Top2n:

他のプログラミング環境に移行する必要があるのか、それともあらゆる種類の言語に共通する問題ではないのか。スピードアップのための解決策とは?

あるループの中で、削除したループの変数の値を増やすと、速度が速くなるのでしょうか?

確認してもいいのですが、加速していないとまたハードディスクに余計なストレスがかかるので、パソコンをいためたくないのです)))

ループの後に配列が書けない?各ラインだけでいいんですか?私が言っているのは、最初の変形で、ループの中にあるものです。
 
Vitalie Postolache:
ループの後に配列を書くことはできないのでしょうか?各行にのみ行うことは可能でしょうか?私が言っているのは、ループの中にある最初のバリエーションです。
このサイズの配列は、割り当てられたRAMに収まりきらない。

もちろん、追加でカウンターを挿入し、各行を個別にではなく、このカウンターに書き込むことも可能ですが、計測せずに気づくほど高速化することはないと思われます。
 
Alexey Viktorov:
このサイズの配列は、割り当てられた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 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

アドバイスお願いします!ドキュメントには(コンパイラにも)こう書いてあります。"多次元配列にAS_SERIESフラグを設定 することはできません"。

質問:配列のソート方法について。

double m[][3];

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);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIESとソートは全く別の概念です。

1 - 配列のセルのインデックスを変更することなく、その内容を変更することができます。

さらに、ドキュメントには、配列は最初の次元でしかソートできないと書かれています。
 
Alexey Viktorov:
AS_SERIESとソートは全く別の概念です。

1 - 内容を変更せずに配列セルのインデックスの方向を変更する。 2 - インデックスを変更せずに、セルの内容を昇順または降順に並べ替える。

さらに、ドキュメントには、配列は最初の次元でしかソートできないと書かれています。

ここでは昇順にソートしています

ArraySort(mas);

今、どうすれば元に戻せるのか?降順でなければならない、ロットをソートしている。

 
Vitaly Muzichenko:

ここでは昇順にソートしています

ArraySort(mas);

今、どうすれば元に戻せるのか?降順で必要です、ロットをソートします。

すごい。mql5でソートを見るのは初めてです。私は記憶ではmql4を使っています。その場合は、読み取りループを逆にすればよい。特定の値を検索する必要がある場合は、どのようにソートしても配列のインデックスが 返されます。

そして、最も間抜けな選択肢は、配列全体を逆順に書き換えることです。その価値はあるのか?
 
Vitaly Muzichenko:

ここでは昇順にソートしています

ArraySort(mas);

今、どうすれば元に戻せるのか?降順で必要です、ロットをソートします。

また、ソート後にArraySetAsSeriesを 使用してインデックスの順序を変更した場合はどうなりますか?
 
Vitalie Postolache:
ソートした後、ArraySetAsSeriesを使ってインデックスの順番を変更した場合はどうでしょうか?

すると、こんな 感じになります。

理由: