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

 

昔の自分の開発したものを見てみようと思い、...このエラーの意味を教えてください。

---

Expert Advisorの初期化に成功しました。インフォパネルを 開こうとすると、驚きの声が上がる。その理由はどこにあるのでしょうか?))

 
tol64:

昔の自分の開発したものを見てみようと思い、...このエラーの意味を教えてください。

---

Expert Advisorの初期化に成功しました。インフォパネルを開こうとすると、驚きの声が上がる。その理由はどこにあるのでしょうか?))

問題の所在を明らかにする必要があります。私も同じような状況で、Printsを入れて、どこに飛んでいくのか見ていました。そして、あるいはサーベスクやフォーラム。あるいは、自分でエラーを見つけるかもしれません。
 
Valmars:
問題をローカライズする必要があります。同じような状況で、プリントを貼って、どこに飛んでいくかを見ています。そして、servicedeskかフォーラムに。あるいは、自分でエラーを見つけるかもしれません。

ドーピングしていないところをプリントしなければならない。))開発者はこのピクチャーコードから、どこから脚が生えているのかがわからないのでしょうか?ヒントが必要です。そこでは常に新しいコードが生成されますが。もうひとつの例をご紹介しましょう。

 
tol64:

ドプリントされていないところは、プリントしなければならないでしょう。))開発者はこのピクチャーコードから、どこから脚が生えているのかがわからないのでしょうか?ヒントが必要です。そこでは常に新しいコードが生成されますが。もうひとつの例をご紹介しましょう。

いずれにせよ、開発者は、すべてをローカライズし、SDでアプリケーションを作成し、専門家を付け、できるだけ詳細に説明するよう求めるだろう。

だから、彼らは開発者(ご存知でしょうが)であり、テレパスは今日も休んでいるのです。:)

 
メモリが確保されていない動的配列 some_ array_1[] を ArrayResize(some_ array_2, some_ array_2_quantity) でメモリが確保された動的配列 some_ array_2[] にコピーした後、 ArrayCopy(some_ array_1, some_ array_2) 演算子は some_ array_1 の要素数が 0 でなく some_ array_2_quantity だと判明します。配列 some_ array_1[] にメモリが割り当てられていないため、重大なエラーとなります。このような状況でも配列のサイズが勝手に変わってコンパイラがエラーを出すことがないように修正してください。
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Interesting:
開発者の皆様へ。

新しいビルド(555)に切り替えた後、ターミナルが「ツール」「マーケットウォッチ」「テスター」「データウィンドウ」の位置(正しい活動状況)を保存しなくなりました。

ターミナルを一度閉じてから再度開くと(最小化ではなく、閉じる)、メインフォームの外側のすべてが消えてしまいます。そのため、メニューからすべての項目をオンにし直さなければなりません(少なくとも位置情報は記憶されているのは良いことです)。

ナビゲーター」はいつものように、メインフォームウィンドウのチャートと一緒に配置されています、大丈夫です。

OSはWin XP32、Bild 555、モニターは2台です。1つのメインウィンドウ(ナビゲーターとチャートがある)、2番目のウィンドウに上記のすべて(「ツール」、「マーケットウォッチ」、「テスター」、「データウィンドウ」)を表示します。

追記

x64や他のOSについては、2つのモニターで確認することができないので、何とも言えません。

7を1つのモニターで見ても同じようなくだり。再インストールすることで解決しました。また、端末は再インストール後、異なる端末のRoamingのフォルダを混同してしまう。
 
-Alexey-:
メモリが確保されていない動的配列 some_ array_1[] を ArrayResize(some_ array_2, some_ array_2_quantity) でメモリが確保された動的配列 some_ array_2[] にコピーした後、オペレータ ArrayCopy(some_ array_1, some_ array_2) によって some_ array_1 の要素数が0ではなく some_ array_2_quantity となっていることが判明したためです。配列 some_ array_1[] にメモリが割り当てられていないため、重大なエラーとなります。この状態で配列のサイズが勝手に変わってコンパイラがエラーを出すようなことがないように修正してください。

エラーがなければ、ArrayCopy 関数はダイナミック配列のメモリをコピーされるデータのサイズに自ら割り当てます。

これはバグではなく、機能です。

 
Urain:

ArrayCopy関数は、ダイナミック 受信配列の メモリを勝手に確保するため、バグはありません。

これはバグではなく、機能です。

このような特徴があるため、偶然やアルゴリズムのミスで簡単にアルゴリズムエラーを起こすことができるのです。そうすると、いつ見つかってもおかしくないし、エラーがあってもわからない。コンパイラはそこでエラー検出のアシスタントをしてくれるので、プログラムをC++に翻訳したときだけエラーを発見したことがあります。だから、機能というよりバグだと思います。IMHO!
 
-Alexey-:
このような特徴があるため、偶然に、あるいはアルゴリズムに欠陥があるために、アルゴリズムの誤りを犯しやすいのです。そして、エラーがあることを決して見つけることができず、知ることもできないのです。コンパイラはそこでエラー検出のアシスタントをしてくれるので、プログラムをC++に翻訳したときだけエラーを発見したことがあります。だから、機能というよりバグだと思います。IMHO!
ArrayCopyだけが メモリを確保するのではなく、すべてのCopy関数が配列そのものをケアするので、注意してマニュアルを読んでください。
 

TimeCurrent() が直前の時系列値より小さいのはなぜですか?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   Print("time[rates_total-1] = ",time[rates_total-1]); 
   Print("TimeCurrent()         = ",TimeCurrent());  

   return(rates_total);
  }
TimeCurrent()         = 2011.12.09 18:47:29
time[rates_total-1]  = 2011.12.09 23:00:00