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

 
x572intraday:

やっぱりエラーをキャッチ、参考文献より引用。

ジャーナルに印刷された - 了解しました。

これからどうしよう、どこに行こうか。私の腕が悪いのか、それとも......?

本当に課題なんですか?

ArraySize(Arr)=0

と比較するのではなく?

ArraySize(Arr)==0
 
Vitaly Muzichenko:

確かに課題であるべき

と比較しないのですか?

つまり、これはプログラムコードではなく、「Terminal Log」の「Print」の結果です。そして、そのコードそのものがこちらです。

   int c=CopyTime(_Symbol,tf,0,1,Arr);
   if(c<1)
   {
      Print("ArraySize(Arr)=",ArraySize(Arr),
            "; copied=",c,
            "; TF=",EnumToString((ENUM_TIMEFRAMES)tf)
            //"; Arr[0]=",Arr[0]
           );
      Print("Error Code = ",GetLastError());
      ResetLastError();
      return;
   }
だから、配列の範囲を見落としたのは私ではなく、長者番付の履歴がなぜかいつも読み込まれていないはずなのです。いつも思うのですが、履歴は左側に読み込まれるので、完全に読み込まれていないときは欠落しているのかもしれませんね。しかし、右側(新しいバー)に十分な履歴がない - これは私にとってナンセンスだ!.............................。それに、ArraySetAsSeries=falseにしているのですが、もしそれが重要であれば。
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Print - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

つまり、これはプログラムコードではなく、「Terminal Log」の「Print」の結果です。そして、そのコードそのものがこちらです。

だから、配列の範囲を見落としたのは私ではなく、長者番付の履歴がなぜかいつも読み込まれていないはずなのです。いつも思うのですが、履歴は左側に読み込まれるため、読み込みきれていない時は物足りないかもしれませんね。しかし、右側(新しいバー)に十分な履歴がない - これは私にとってナンセンスだ!.............................。それに、ArraySetAsSeries=falseにしています。

何も入っていない空の配列を読み込む?

ArraySize(Arr)

お試しください

Print("ArraySize(Arr)=",Arr[0],
 
Vitaly Muzichenko:

何も入っていない空の配列を読み込む?

お試しください

出力文字列Arr[0] を特にコメントアウトしています(上記参照)。Journalに出力しようとすると、4401エラーメッセージに ならず、「array out of range」エラーを出力して終わってしまうからです。

...とりあえずhttps://www.mql5.com/ru/docs/series/timeseries_access を吸っておくが、このコードで自分のコードを肥大化させるのは不気味だ...。
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Ошибки компиляции - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

私の出力文字列Arr[0] は特別にコメントアウトされています(上記参照)。これをJournalに出力しようとすると、エラーメッセージ 4401にはならず、「array out of range」エラーで終わってしまうからです。

 
Vitaly Muzichenko:

はい、配列は空であることが判明しました。つまり、新しいバーは コピーされません。

 
x572intraday:

はい、配列は空であることが判明しました。つまり、新しいバーは コピーされません。

これは、最初のクエリの場合です

 
Vitaly Muzichenko:

最初のリクエストで発生する

おかしいのは、https://www.mql5.com/ru/docs/series/timeseries_access、コードに履歴を読み込むという記事でSleep()に触れていることです。 しかし、Sleep()のヘルプには「Sleep()関数はカスタムインジケーターから呼び出すことはできません。なぜなら、インジケーターはインターフェーススレッドで実行されているので、それを遅くしてはいけないからです」と書かれています。インジケータで履歴を読み込む必要があることがわかりました。

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Организация доступа к данным - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

クレイジーなのは、https://www.mql5.com/ru/docs/series/timeseries_access、コードに履歴を読み込むという記事でSleep()に触れていますが、Sleep()のヘルプには「Sleep()関数はカスタムインジケーターからは呼び出せません、なぜならインジケーターはインターフェーススレッドで実行されているので、それを遅くさせてはいけないからです」と書かれていることです。インジケータで履歴を読み込む必要があることがわかりました。

さて、データがコピーされなかったら終了させましょう

int c=CopyTime(_Symbol,tf,0,1,Arr);
if(c<1) return;

次のクリックですべてがコピーされ、コードが正しく動作します。

 

こんにちは、私は自分のロボットをテストしています、テストが終わった 後、ログにrequotesと多くのフィールドを見ました、これらのメッセージスタックは何を意味し、それらを表示しないようにするには、コードに何を追加することができますか?ありがとうございます!あけましておめでとうございます

ファイル:
1.jpg  412 kb