MetaTrader 4 Build 529 ベータ版リリース、新コンパイラー搭載 - ページ 39

 
Out of rangeは、明確にコードのエラー、つまり配列の外に出ていることを示します。そこには文字列とエラーの場所が表示されているので、エラーを探します。
 

以下はそのコードです。


datetime   prevtime0 = 0;
double prevVolume0 =0;
double prevClose0 =0;
void init()
{
   Print("_______Test init");
   prevtime0 = iTime(NULL,PERIOD_M1,0); 
   prevVolume0 = iVolume(NULL,PERIOD_M1,0);
   prevClose0 = iClose(NULL,PERIOD_M1,0);
}

void start()
{
  Print(" prevtime0!!!!! = ",prevtime0," iTime(NULL,PERIOD_M1,0) =",iTime(NULL,PERIOD_M1,0) );
  Print(" prevVolume0!!!!! = ",prevVolume0," iVolume(NULL,PERIOD_M1,0) =",iVolume(NULL,PERIOD_M1,0) );
  Print(" prevClose0!!!!! = ",prevClose0," iClose(NULL,PERIOD_M1,0) =",iClose(NULL,PERIOD_M1,0) );
  Print("");

  prevtime0 = iTime(NULL,PERIOD_M1,0); 
  prevVolume0 = iVolume(NULL,PERIOD_M1,0);
  prevClose0 = iClose(NULL,PERIOD_M1,0);

}

以下は、ターミナルでの実行結果です。 バージョン 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!!!!= 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!!!!= 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!!!!= 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!!!!= 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!!!!= 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

iCloseもiVolumeもiTimeも変化しないことがおわかりいただけると思います。

そうだと思いますし、iで始まる他の関数もそうです。

また、この例のiVolume機能は明らかにVolumeでないことを示しています。

同時にテスターでは、iVolume以外はすべて動作し、変化します。そこもうまくいかない。

 
thecore:

以下はそのコードです。


以下は、ターミナルでの実行結果です。 バージョン 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!!!!iVolume(NULL,PERIOD_M1,0) =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 テスト EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!!!!=133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!!!!iVolume(NULL,PERIOD_M1,0) =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!!!!=2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

iCloseもiVolumeもiTimeも変化しないことがおわかりいただけると思います。

iで始まる他の関数も変わらないと思います。

また、この例のiVolume機能では、明らかにVolumeでないことを示しています。

同時にテスターでは、iVolume以外はすべて動作し、変化します。そこもうまくいかない。

まあ、そうなんですけどね。どうしたんですか?
 
tara:
まあ、そうなんですけどね。どうしたんですか?


そうですね...

iTime(NULL,PERIOD_M1,0) 関数は、左側の端子から間違った時刻を出力します。

Terminal は 2013.11.11 22:53:08 と表示し、iTime は 2013.11.11 22:38:00 と表示するはずです。

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) は、1, 2, 3, 100 のような整数を返すべきであり、そうではありません。

この例のように 133.02

iCloseは最初のケースで133.02、2番目のケースで133.03を出力するはずです。

 

これらの機能はすべて、分単位で少しずつ違う動きをします。印刷は刻みで行われます。MTの時間は秒単位でカウントされます。

そして、2番目の端末は、一般的には左側です :)

 
tara:

これらの機能はすべて、分単位で少しずつ違う動きをします。印刷は刻みで行われます。MTの時間は秒単位でカウントされます。

そして、2番目の端末は、一般的には左側です :)

あのね、夜になると話し相手がいないのはわかるよ。

そのため、SPECIALの結果をプリントアウトして見せました。

2つの結果を異なる分単位で表示します。

それに、このメッセージはあなたに向けたものではなく、開発者に向けたものです。

 
thecore:

iVolume(NULL,PERIOD_M1,0) は、1, 2, 3, 100 のような整数を返すべきですが、そうではありません。

この例のように 133.02

iVolumeは本当に出来高の代わりに最終価格(終値)を返すようですね。

しかし、ヘルプの記述にはかなり面食らった(1枚目はファイルから、2枚目はウェブサイトから引用)。

1

datetime  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

2

double iVolume(string symbol, int timeframe, int shift)
 
thecore:


そうですね...

iTime(NULL,PERIOD_M1,0) 関数は、左側の端子から間違った時刻を出力します。

Terminal は 2013.11.11 22:53:08 と表示し、iTime は 2013.11.11 22:38:00 と表示するはずである。

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) は、1, 2, 3, 100 のような整数を返すべきであり、そうではありません。

この例のように 133.02

iCloseは最初のケースで133.02を、2番目のケースで133.03を出力するはずです。


RefreshRates()を使用してみてください。OnTickでも同じ問題があり、テスターでは時刻と価格が更新されませんが、RefreshRates()を使用するとすべてうまくいきます ...
 
インジケーターの問題が2つ 増えました!サービスデスクをご覧 ください。
 
thecore:

見ての通り、iCloseもiVolumeもiTimeも変化していません。

iで始まる他の関数も同様だと推測されます。

また、この例のiVolume機能は明らかにVolumeでないことを示しています。


修正しました。ありがとうございました。