MT4のEAの件ですが、10個の値を比較して、その最大値(価格)を出したいのですが、…

コンパイルエラーになってしまいます。
comma or semicolon expected となってしまいます。
下記の様に書いてます。

double num_array_High[10]={gd_HighPrice_1,gd_HighPrice_2,gd_HighPrice_3,gd_HighPrice_4,gd_HighPrice_5,gd_HighPrice_6,gd_HighPrice_7,gd_HighPrice_8,gd_HighPrice_9,gd_HighPrcie_10};
int maxValueIdx=ArrayMaximum(num_array_High);
Print("Max value = ", num_array_High[maxValueIdx]);

gd_HighPrice_1 〜gd_HighPrice_10 は、上記プログラムの上の行で、算出していて、

double HighPrice_1 = 0;
・・・
double HighPrice_10 = 0;
と定義しています。

{}内が数字だった場合は、コンパイルは普通に通ります。
{}内が変数だからだめなのでしょうか?

..[補足]..
if(Vo lume[0] == 1 && Close[3] <= Close[2] && Close[2] >= Close[1] ){
gd_HighPrice_10 = gd_HighPrice_9;
・・・
gd_HighPrice_3 = gd_HighPrice_2;
gd_HighPrice_2 = gd_HighPrice_1;
gd_HighPrice_1 = Close[2];
}

直前の値の算出を上記の様に書いています。
この場合、教えて頂いた num_array_High[0] = 0;というのは、どういう風に記載すればいいのでしょうか?

回答1

shihsiyouhiさん へ

補足に対する回答:
どうやら、特徴的な過去レートを保持したいようですので、
配列変数の定義は、グローバル変数として、double num_array_High[10]; と宣言するか、ローカル変数として、static double num_array_High[10];と宣言した方が良いでしょう。
プログラムは、以下のような感じで内容をシフトすると良いでしょう。
※MT4では、宣言するだけで内容が0に設定されます。
※gd_HighPrice_1〜10という変数は使用しない前提です。m(_ _)m

if(Volume[0] == 1 && Close[3] <= Close[2] && Close[2] >= Close[1] ){
for(int index = 8; index >= 0; index–){
num_array_High[index+1] = num_array_High[index];
}
num_array_High[0] = Close[2];
}

//補足回答以上です。m(_ _)m
——————————————————- —–
>{}内が変数だからだめなのでしょうか?

はい、そのとおりです。
MT4の配列の初期化は、固定値でないとダメなようです。

>gd_HighPrice_1 〜gd_HighPrice_10 は、上記プログラムの上の行で、算出していて、

直前で計算させているのでしたら、直接

double num_array_High[10];
gd_HighPrice_1 = 0;→ num_array_High[0] = 0; //配列に直接計算値を代入するように変更

のように変更していただければ、いいかなと思います。

※もし、つごうが悪ければ理由を教えて下さい。代案を考えます。
m(_ _)m

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA