エラー、バグ、質問 - ページ 438

 
joo:
もしかしたら、コードにスリープがあるだけで(ない場合に比べて)全体の実行時間に何らかの影響を与えるかもしれませんが、テスターではスリープがカウントされないという事実、それは確かなことです。
まあ、ここは専門家ではないので...。Sleep()関数に 負の 引数を与えて処理するのに半分遅れ、17日間ものテスト時間をロスしたこと、これが事実です。
 

コードは端末をハングアップさせる。

   MqlRates s1[];

   int count=TerminalInfoInteger(TERMINAL_MAXBARS);
   int s1_copied=CopyRates(Symbol(),Period(),0,count,s1);
   if(s1_copied<=0)
      Print("Ошибка копирования ценовых данных ",GetLastError());
   else Print("Скопировано ",ArraySize(s1)," баров");

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

   ArrayFree(s1);

その理由は何でしょうか。

 
Graff:

コードが端末をハングアップさせる。

その理由は何でしょうか。

まずは手始めに。
 int count=TerminalInfoInteger(TERMINAL_MAXBARS);
 Print("count=",count);

端末が Unlimに設定されていませんか?

 
uncleVic:
まずは手始めに。

Unlimは端末の設定 にないのでしょうか?


最大バー数が5000に設定されていますが、この値を小さくすることはできますか?
 
Graff:
バーの最大値が5000になっていますが、この値を小さくすることはできますか?

もっと少なくてもいいと思う(確信がない)。

Print(count)は何を示しているのでしょうか?

 
uncleVic:

もっと少ないのは無理だと思う(確信がない)。

さて、Print(count)は何を返すのでしょうか?

2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 bars copied
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

コメントで -1

別の記号で試してみましたが、コメントには表示されませんでした -1

REMARK: 数秒後にフリーズします。int OnInit()からコードを開始します。

 
joo:
はい、そしてテスターではSleepは無視されるため、テスターで動作します。

スリープテスターではスリープを 完全かつ正確にエミュレートしています。

この例では、整数値を扱う際の算術オーバーフローにより、ちょうど17.5日分の待ち時間が発生していました。テスターはまさにその時間を待っていた。

したがって、テスターやMQL5の実行環境にはミスはないが、プログラマーが作った明らかなミスがある。

 

Renat:

つまり、テスターやMQL5実行環境のミスはないが、 プログラマーの明らかなミスが あるのだ。

極めて明確です。

レナート

テスターでは、スリープを完全に、しかもかなり正確にエミュレートしています。

整数値を扱う際の算術オーバーフローにより、待ち時間は17.5日となっています。テスターの待ち時間はまさにその通り。

うーん、そうきましたか。そして、スリープは無視されるだけだと勘違いしていました。

では、例えばテスト モードのExpert AdvisorでSleep(3ヶ月)を設定すると、テスターは単純に3ヶ月間履歴を早送りしてくれるのでしょうか?- それは素晴らしいことです。

 
はい、巻き戻されます。機能の限界は、ミリ秒カウンタが一杯になるまでの49日間だけです。

待機期間中もテスターは、以前に発注した注文の処理を含め、取引環境を完全にエミュレートしています。MT5のテスターは非常に細かい。
 
Graff:
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 bars copied
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

コメントで -1

別の記号で試してみましたが、コメントには表示されませんでした -1

REMARK: 数秒後にフリーズします。int OnInit()のコードを実行します。

そうなんです、象さんにも気がつかなかったんです。

この台詞を聞くと、とても怪しいと思います。

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

ArrayMaximum

は、1次元の数値配列 の最大項目を検索する。

intArrayMaximum(
二重array[],// 検索する配列
intstart=0// どのインデックスから検索を開始 するかを指定します.
intcount=WHOLE_ARRAY,// チェックするインデックスの数
);


と、私たちの場合は

   MqlRates s1[];

コンパイラはこれを省略してはいけないと思う。何があるんだ?警告もないのか?もし、そうでなければ、サービスデスクにリクエストして ください。いい?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.