MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1426

 
Aleksei Stepanenko:
両方の行の値をソートするのか、それとも最初の行だけをソートするのか?

最初の1枚だけです。コードにエラーがあります。

申し訳ありません...コードの削除の仕方がわからない。 つまり、ブロック2ではLoY[S2][0]=Bidではなく、LoY[0][52]=Bidが必要 だと言うことです。

 

行と列を一度に入れ替えることができないのですが?

double LoY[31][2];
 

正しい順番を一度に行うと、値0.5555で埋めたいセルの番号を挙げることができますか?


 
Aleksei Stepanenko:

行と列を一度に入れ替えることができないのですが?

その場合、ArrayFill(LoY,0,10,0.5555);は機能しません。しかし、値を変更する配列の 要素は、順番に必要である。しかし、LoY[31][2]
、値を変えたい配列の要素は1を通過します。この場合、まず31行分の配列を1行に「まとめる」ことになります。

 
Aleksei Stepanenko:

正しい順序で行うのであれば、0.5555で埋めたいセルの番号を教えてください。


最初の行には、セル1~10が含まれています。でも、0.5555で埋めたら、1行目全部をソートしないといけない...。は、昇順としましょう。ArrayFill(LoY,0,10,0.5555) の代わりに ArrayFill(LoY,0,10,0.5555) では、私には合いませんね。

コードの誤りを修正しました

 

これがそのスクリプトです。

void OnStart()
   {
   int arr[31,2]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
                  31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61};
   //до заполнения              
   string str="";
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   //после заполнения
   str="";
   ArrayFill(arr, 0, 10, 555); 
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   }

の結果です。

2021.03.20 19:42:26.602 primer AUDUSD,H1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

2021.03.20 19:42:26.602 primer AUDUSD,H1: 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

なのか、それとも違うのか?

 
Aleksei Stepanenko:

これがそのスクリプトです。

の結果です。

そうなのか、そうでないのか?

ありがとうございました。これは私に必要なもののように見えます。しかし、このコードをスクリプトとしてではなく、私のコードの中に入れていただけるとありがたいのですが。そうすれば、新しい情報をより早く理解し、吸収することができますから。ただ、配列の中に整数値ではなく、価格値を入れています。

また、お世話になります。

 
の代わりに、別の方法で記入する必要があります。
ArrayFill()

使い道

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
もし、別の方法で記入する必要がある場合は、代わりに

使い道

オッケーです。今日は、自分にとって新しい情報を吸収していきたいと思います。そして、その結果は明日お知らせします。

いつもありがとうございます。

 
ANDREY:

のコードをスクリプトとしてではなく、私のコードに貼り付けてください。

私は何も書いていません、あなたのコードを繰り返しただけです。

視覚的に数字が正しく 配置されていない(31行ではなく2行 になっている)ので、それが必要だと思ったのでしょう。

もっとも、ArrayFillの 代わりに0.5555をループに代入する必要があったかもしれません。試してみてください。

double LoY[31][2],LoU,LoU1;
int S,S1,S2;

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
for(int i=0; i<10; i++) LoY[i,0]=0.555;
S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[S2][0]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[1][0]-- В ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [30] ",   LoY[30][0],"  [60] ",   LoY[60][0]);
S2++;
if (S2==62)
{
S2=0;
}
S=Minute();
}
}