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

 

互換性のためにゼロにしたことは明らかですが、未使用のenum =WRONG_VALUEを 正しく初期化したときに、なぜ正しく動作しないのかが不明です。この方法は移植性に欠け、隠れたエラーの発生確率が著しく高くなる。

 
A100: 未使用の enum =WRONG_VALUE が正しく初期化されたときに、なぜ正しく動作しないのかが不明です。

このルールを覚えていますか?

ルール:名前付き定数 - 列挙のメンバに特定の値が明示的に割り当てられていない場合、その値は自動的に生成 されます。列挙の最初のメンバーである場合、値 0 が割り当てられる。それ以降のメンバーについては、前のメンバーの値をベースに1加算して計算されます。

ほとんどの場合、クエリーフィールドの正しさのチェックは、列挙されたメンバーの値が負であってはならないことを前提としています。列挙メンバにWRONG_VALUEが 代入される可能性は考慮されない。

 
Yedelkin:

ただし、列挙メンバにWRONG_VALUEが 代入される可能性は考慮されていない。

ここはまさにエラーだと思います。具象列挙型を使用しない場合、例えばORDER_TYPE_BUY が実際には 0 である代わりに、その値はWRONG_VALUE になるのは論理的である。

そして最も重要なことは、互換性を維持したまま OrderCheck() と OrderSend() のロジックを変更することを妨げるものは何もない、ということです。

 
A100: ここはまさにエラーだと思います。具象列挙型を使用しない場合、その値は、実際には = 0である ORDER_TYPE_BUY の代わりにWRONG_VALUE になるのが論理的である。

そして最も重要なことは、互換性を維持したまま OrderCheck() と OrderSend() のロジックを変更することを妨げるものは何もない、ということです。

開発者の意見を理解する方法として、そのエラーについてサービスデスクに書き込むという方法があります。
 

不思議な "バグ "を発見しました。

私はこのコードをEAで使用しています。

void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
    {
     if(trans.symbol == "EURUSD") EURUSD_K = 1;
    }    
  }

テスターでの1回の実行は問題なく通過しますが、フルサーチでパラメータを選択した途端、テスターの動作が10倍も10倍も遅くなるのです。1回の実行で十分な速度が出て、最適化で顕著に落ちるというのは理解できない。しかも、幾何学的に低下する。割合で見ると、最初のうちは問題ないのですが、最後のほうはどんどん速度が落ちていくのがわかります。自分のコードに問題がないか、ループなどを探したのですが、見つかりませんでした。その後、上記のコードを自分のアルゴリズムで置き換えたら、あら不思議!?最適化が正常で均一な速度で実行されるようになりました。このことから、問題はMQL5内のOnTradeTransaction関数の ボディのどこかにあるという結論に達しました。そのあたりは、開発者に注意してもらうようにします。

p.s. Expert Advisorのコードを掲載できません。上記のコードをあなたのEAで使ってみて、2000年から今日までのOHLC M5の最適化のスピードを見てみてください。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
lordlev:

不思議な "バグ "を発見しました。

私はこのコードをEAで使用しています。

テスターでの1回の実行は問題なく通過しますが、フルサーチでパラメータを選択した途端、テスターの動作が10倍も10倍も遅くなるのです。1回の実行で十分な速度が出て、最適化で顕著に落ちるというのは理解できない。幾何級数的に減少している。割合で見ると、最初のうちは問題ないのですが、最後のほうはどんどん速度が落ちていくのがわかります。自分のコードに問題がないか、ループなどを探したのですが、見つかりませんでした。その後、上記のコードを自分のアルゴリズムで置き換えたら、あら不思議!?最適化が正常で均一な速度で実行されるようになりました。このことから、問題はMQL5内のOnTradeTransaction関数の ボディのどこかにあるという結論に達しました。そのあたりは、開発者に注意してもらうようにします。

p.s. Expert Advisorのコードを掲載できません。上記のコードをあなたのEAで使ってみて、2000年から今日までのOHLC M5での最適化のスピードを見てみてください。

異なるパラメータを使用すると、Expert Advisorは異なる時間で動作する可能性があります。
 
Konstantin83:
異なるパラメータでは、EAの実行時間が異なる場合があります。
この場合、Expert Advisorやパラメータに問題があるわけではありません。問題はMQL5自体にあります。
 
lordlev:

上記のコードをあなたのアルゴリズムに置き換えた後

つまり、OnTradeTransaction() を使うのを諦めたのでしょうか?- であれば、速度が上がったのは当然で、その都度呼び出されます。
 
A100:
つまり、OnTradeTransaction()を使うのを諦めたのでしょうか?- であれば、速度が上がったのは当然で、その都度呼び出されます。
使用を拒否するのは当然です。どのような場面でも呼び出されることは明らかです。ただ、1回の実行では十分な速度が出ているのに、最適化で急に速度が落ちるのはなぜなのかが不明です。パラメータそのものとは関係なく、上で別の友人が書いているように、10回ほど徹底的にチェックしました。こうなると、開発者がどこかでミスをしたのではと思えてきます。
 
lordlev:

最小限のテストケースを行い、サービスデスクに報告することを止める理由は何でしょうか?