最適化中の単一アレイ計算 - ページ 7

 
forexman77:

グローバルレベルで配列を宣言して みた(mql4コード)

イニテに記入する

開始時に設定されていない場合、1971年の日付を表示する、つまり配列は空である

スタートで配列を埋めていくと、値が表示される。配列がデータタイムに再初期化されるのが原因かもしれませんが、それがないとコンパイルできないのでしょうか?

アレイが消える。何が間違っているのか?

ここで、もし誰かがそれを必要とするならば、私はアイデアを持っています。ある配列を別の配列にコピーした。

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

こちらも必要な人がいれば、アイデアを出します。ある配列から別の配列にコピーする。

これは何のため?

当初の質問は、その後の最適化の繰り返しで配列が再計算されないようにするためでした。これで、もう一方に記入・コピーするだけです。何の役にも立ちません。この配列T[40]は、説明のためにこのように表現されているだけで、実際には順次計算されて充填されるはずだと私は考えています。次の最適化実行の たびに、この配列は以前と同じように再計算されますが、唯一の違いは、配列の構成が異なるということです。

 
Alexey Viktorov:

何のために?

当初の質問は、その後の最適化の繰り返しで配列が再計算されないようにするためでした。そして今、それは単に埋められ、別のものにコピーされています。何の役にも立ちません。この配列T[40]は、説明のためにこのように表現されているだけで、実際には順次計算されて充填されるはずだと私は考えています。次回の最適化実行の たびに、この配列は以前と同じように再計算されますが、唯一の違いは、配列が異なることです。

中括弧を通して宣言された配列が保存されませんでした。グローバルに宣言してからiniteで埋めることができませんでした(配列は1つの実行の内部で保存されませんでした)。

最適化の繰り返しの間は、私の理解では、配列は保存されず、つまり、プログラムはそれまでのものをすべてリセットしてしまいます。

 
forexman77:

中括弧で宣言された配列が保存されませんでした。グローバルに宣言して、initeで埋めることができませんでした(配列が1回の実行で保存されませんでした)。

最適化の繰り返しの間は、私の理解では、配列は保存されず、つまり、プログラムはそれまでのものをすべてリセットしてしまいます。

そうやってループで埋めていくとあっという間です。しかし、配列項目の 計算に時間がかかるようでは、また別の問題です。その場合、配列の要素は反復処理ごとに再計算されます。また、この方法で配列が満たされると、中括弧で囲まれたすべての要素をグローバルに列挙することができます。 このワザは意味が分かりませんが......。
 
Alexey Viktorov:
また、このように配列が埋め尽くされると、グローバルレベルですべての要素を中括弧で囲んで一覧表示することもできます。 何か、このワザは意味がわからない......。
グローバルにもできる。でも、そこに数千個の元素の塔を乗せるのはちょっと......)
 
forexman77:
グローバルなものでやってもいいんじゃない?でも、その上に数千個の元素の塔を建てるというのは、ちょっと嫌でしたね(笑)。

思い通りになってよかったですね。

スピードは上がったのでしょうか?

 
Alexey Viktorov:

思い通りになってよかったですね。

スピードは上がったのでしょうか?

速くなっていますね。
 

新しいトピックを作成したわけではありません。

今、私は次のことをしようとしています:最初の値date、2番目と3番目の数字doubleを持つ配列があります。配列を日付でソートする必要があるのですが、2番目と3番目の値を日付にバインドしたいのです。

そして、複数の配列を1つにまとめて、日付順に並べ替えようと思っています。

この方法でやってみましたが、私の理解では、ソートは配列のインデックス、つまりiで行われます。

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

新しいトピックを作成したわけではありません。

今、私は次のことをしようとしています:最初の値date、2番目と3番目の数字doubleを持つ配列があります。日付の値で配列をソートする必要がありますが、2番目と3番目の値が日付に関連付けられます。

...

こちらをご覧ください: https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
こちらをご覧ください: https://www.mql5.com/ru/forum/42036

ほとんど授業ばかりで、私にとっては暗黒の森のようなものです。しかし、ある思いが湧いてきました。日付と数字を別々に配列にする。ただ、ソート後の日付があるインデックス番号を取得する方法、つまり、2次元にあるiを取得する方法はありますか?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;