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

 
Fia:

開発者の皆さん、こんにちは。

MQL5コンパイラで、せめて警告を出すように変更できないでしょうか?

このようなコード上のエラーに対して

if(Flag_Exitl=true) {break;}


この比較条件は正しくありません(==であるべきです)ので、常にbreakになります。

この状況をコンパイラでどのように対処すれば(もし可能であれば)、コードを書くときにぶつかることが少なくなるでしょうか?

(うまくいかないと思った、ifで代入と比較を分けた方がよさそうなので、疑問は解消される)。

条件として、右側に定数を持つブーリアン代入が含まれていれば、可能です。
bool 型の 変数は、true/false と比較することはできず、直接使用することができる(本質的には yes/no フラグである)。
if(Flag_Exitl) {break;}
あなたのやり方はバタバタしていますね。
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
notused:

定期的にエラー4401が発生する

err_history_not_found

以下のインジケーターコード

は、(D1でない場合)起動直後にエラーになります。というか、一旦ターミナルを 起動して、チャートを開いて〜インジケータを付けると、エラーが出ます。端末が閉じられていなければ、起動時にこのようなエラーは発生しません。

しかし、しばらくすると(数時間、私は2時間で十分でした)、すでに開いているチャートでエラーが発生することがわかります。(m30で動かしていました)。

代表、MetaQuotesさん、コメントお願いします!こんな感じでいいんでしょうか?
 
struct SDaylyRange {double min, max, open, close;};
struct SNoDaylyRange {
   uint x;
   double y;
 };

void OnStart()
  {
   SNoDaylyRange tmp;
   SDaylyRange tmp2 = tmp;
  }
このコードは、一度も警告を出さずにコンパイルされます。おそらくコンパイルすらできないはずですが
 
notused:
...エラー4401が定期的に表示される。

を参照してください。

データアクセスの整理

データアクセシビリティ

HCCフォーマット、あるいはHC ready-to-useフォーマットのデータが入手できても、これらのデータをグラフに表示したり、mql5プログラムで使用したりすることが必ずしも無条件に可能とは限りません。

mql5-programから価格データやインジケータの値にアクセスする場合、ある瞬間、ある時点から利用できることが保証されていないことを忘れてはならない。これは、MetaTrader 5がmql5-programに必要なデータの完全なコピーを保存せず、リソースを節約するためにターミナルのデータベースに直接アクセスするという事実と関係があります。

すべての時間枠の価格履歴はHCC形式の共通データから構築されており、サーバーの更新はすべての時間枠のデータ更新と指標の再計算につながります。そのため、ついさっきまで利用できていたデータであっても、アクセスが拒否されることがあります。

コピーレート

インジケータにデータを要求する際、要求されたタイムシリーズがまだ構築されていないか、サーバからダウンロードする必要がある場合、この関数は直ちに-1を返しますが、ダウンロード/構築のプロセスは開始されます。
これがあるべき姿のようです。コピーレートSERIES_SYNCRONIZEDの 前に確認することができます...
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Swan:

ファクトシート

そうあるべきようだ。CopyRateSERIES_SYNCRONIZEDまで 確認できます...

頭に灰を振りかけているところです、ええ。ありがとうございます。

0小節しか変化しないのに、2小節の要求と履歴が利用できないのは不思議ですが。しかし、気にしないでください。ドキュメントに記載されているのであれば、エラーにはなりません

 

IsNewBarでエラーが出ていました。

の代わりに

CopyTime(sym, period, 0, 1, currentTime);

と書くべきでした。

   if (CopyTime(sym, period, 0, 1, currentTime) < 1) return (false);

そして、数時間おきにIsNewBar(PERIOD_D1) == true→それ故にヒストリーアクセス不可を知ったのですが、1~2年前に書いた関数が思い浮かばなかったので、不思議に思っています。

 
sergeev:

インジケータが複数のバッファを持つカラータイプ(COLOR_ARROWなど)を扱えない理由

コードサンプル

2 つの DRAW_COLOR_ARROW (buf1 と buf2) を設定し、それぞれに追加のカラーバッファ(clr1 と clr2) を設定します。

同時に、2番目のバッファbuf2にはHigh/Lowバーが取得されるものの、チャートには表示されません。このバッファの矢印の色 = clrNONE と思われます。つまり、clr2バッファの色設定が機能しない


buf1/clr1の値のみが表示され、2番目のバッファの値は受信されているにもかかわらず、色付きで表示されていません。


エラーはどこにあるのか?

MQL5 DNAで」と答えるために作られただけの質問です。

DRAW_FILLINGや比較的正常なDRAW_HISTOGRAM2(もちろんそれほど安定していませんが、バグが発生します)でもこのようなナンセンスなことがあります。

バグの不安定さだけを見ると、CDがないと回答が得られない可能性が高いというのが結論です。

 

Win32用Bild 642

3次元double配列の場合,Print関数で出力する際に誤って配列の限界を超えて しまうという問題がある

スクリプトが勝手に無限ループに入る。

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

}
//-------------------------------------------------------
double f(double x){return(1/(1+MathExp(-x)));}
 
IgorM:

Win32用Bild 642

Print関数で出力する際に、誤って配列の外に出てしまうと、3次元配列の2重の問題が発生することがあります。

実際には、2行前にオーバーランが発生しています

で、存在しない要素から指数を呼び出しているわけですが、おそらくはゼロでしょう。

ログを見る

 
sergeev:

一般に、境界外は2行前に発生する

で、存在しない要素から指数を呼び出しているわけですが、おそらくはゼロでしょう。

ログを見る

そうなんです、ランタイムエラーが発生しないコードを引用しましたが、スクリプトをループさせる