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

 

マーケットプレイスでの製品の自動検証に仕様を追加することを提案します。バリデータが報告する一般的なエラーに加えて、実行されたテストのコンテキストとログを強く要求する。特に、あるインジケーターの更新は、「テスターに時間がかかりすぎる」というエラーが出て、ここ数年更新できていない。最初のバージョンは、"人間 "のモデレーションのもとでアップロードされ、何の不満もなかった。オートバリデーターがこのエラーを出す基準は全く不明である。

ここで具体的な質問ですが、「テスターに時間がかかりすぎる」ということがないように、どのようなハードウェアで、どの程度の時間で、どの程度の刻みを提供 すればよいのでしょうか。

このインジケータは、MapReduceアルゴリズムによるティック処理を想定しており、整数演算が用いられているため、アルゴリズム自体を捨てない限り、圧縮するものはありません。プロファイラを 使用し、与えられた周期で新しいティックの配列を再計算するためにトロットラインを追加しました。無駄なこと

私のパソコンでは、数分で年号がテストされます。オートバリデーターで実際に何が起こっているのか、なぜ減速しているのか、今のところ知ることはできない。

適切な製品サポートがないことは、ユーザーとMQの双方にとって問題であり、実装に影響する。

 

こんなんでいいのか?

class cA
  {
public:
   int               Add(int i1,int i2)
     {
      return i1+i2;
     };
                     cA()
     {
      Print("+++");
     };
                    ~cA()
     {
      Print("---");
     };
  };

void OnStart()
  {
   cA a=cA();
  }

ログです。

2020.04.17 18:39:32.996 test3 (EURUSD,M1)       +++
2020.04.17 18:39:32.996 test3 (EURUSD,M1)       +++
2020.04.17 18:39:32.996 test3 (EURUSD,M1)       ---
2020.04.17 18:39:32.996 test3 (EURUSD,M1)       ---

2つのオブジェクトが作成され、削除されるように、コンストラクタとデストラクタが2回呼び出されます。新規作成と削除を使用する場合はすべて問題ありません。

ビルド2380。

 
Aliaksandr Hryshyn:

のように、2つのオブジェクトが作成され、削除されます。

そういうことなんです。

 
fxsaber:

そうなんです。

そして、私のオブジェクトは2番目に作成されます。

class cA
  {
public:
   int               my_i;
   int               Add(int i1,int i2)
     {
      return i1+i2;
     };
                     cA()
     {
      static int i=0;
      my_i=i;
      i++;
      Print("+++");
     };
                    ~cA()
     {
      Print("---");
     };
  };

void OnStart()
  {
   cA a=cA();
   Print(a.my_i);
  }
2020.04.17 18:47:34.771 test3 (EURUSD,M1)       +++
2020.04.17 18:47:34.771 test3 (EURUSD,M1)       +++
2020.04.17 18:47:34.771 test3 (EURUSD,M1)       ---
2020.04.17 18:47:34.771 test3 (EURUSD,M1)       1
2020.04.17 18:47:34.771 test3 (EURUSD,M1)       ---
 
Aliaksandr Hryshyn:

そして、私のオブジェクトは2番目に作成されます。

最初のオブジェクト。

cA a=cA();


2つ目のオブジェクト。

cA a=cA();
 

それならそれで仕方がない。

cA a;
Print(a.my_i);
 
Stanislav Korotky:

私のパソコンでは、1年のテストは数分で終わります。オートバリデーターで実際に何が起こっているのか、なぜ減速しているのか、今のところ知ることはできない。

数分で1年というのは、大変なことです。EAであれば)ほとんど誰も待たなかっただろう。
視覚的に正常に描画されているか?テスターを観察すれば何でもわかるのでしょうか?

市場向けのプラグインを追加する - 正確さを犠牲にしてでも計算を高速化 する(可能であれば)、あるいは「似たようなもの」を完全に描き出す。製品が明確に特定されており、それを必要とする人が適切なパラメータを切り替えられるようになっているのです。

 
Andrey Khatimlianskii:

数分で1年というのは、大変なことです。EAであれば)ほとんど誰も待たなかっただろう。
ビジュアル的に描画は大丈夫なのか?テスターを観察することで、何かを理解することは可能なのでしょうか?

市場向けのスタブを追加する - 正確さを犠牲にして計算を高速 化する(可能であれば)、あるいは「似たようなもの」を完全に描画する。製品が明確に特定されており、それを必要とする人が適切なパラメータを切り替えられるようになっているのです。

私見ですが、ポチッとなモードで数分で1年は大丈夫だと思います。昔は選手権に15~20分という制限があった(正確には覚えていない)。すでにストールも追加されている(タイムラプス・トロットリング)。ダニを飛ばすことはできますが、そうすると製品の意味がなくなってしまいます。特異性とは相対的な概念で、ティッキングモードで動作するものが多いことは知っています(そして、それらはすべて価格や出来高をチェックするアドオンを持っています)。そして、より正確な基準を持ち、さらにオートバリデーターからのフィードバックがあることがより重要です(フォーラムで「あなたの端末は動いていません」と言えば、私たちは何を聞けばいいのか、MQ?- ログと再生条件を教えてください。ここでは、私たちの製品が動作しないというメッセージを受け取りますが、具体的な内容はありません)。そして、製品の仕様を考慮する方が正しいのです。結局、製品の総実行時間は、MQL-codeの時間だけでなく、端末そのものの時間でもあるのです。CopyTicksRangeなど、より高価なコールもあります。これらのオーバーヘッドをMQL-productの欠陥とみなすようになりました。

PS.指標の場合、より重要なのはティックによる操作ではなく、バッファの数(タスクの特殊性から多い)のようです。テスターのために、その数を制限するようにします(製品がより複雑になり、エラーが発生しやすくなります。また、トロットなどの外部条件によって課されるフラグもあります)。これは、オートバリデーターがいくつかのパラメータで性能スコアを変化させる必要性を改めて証明するものである。

PPSです。最終日の刻みを要求しているのですが、テスターは2年分積んでいるんですよ~、それも時間がかかるんです。

 
Stanislav Korotky:

PPSです。最終日のダニをリクエストしているのですが、テスターは2年分積んでいます

なぜかこの挙動は公式なものです。

インジケータやアドレスバーなどを使用しないExpert Advisorでは、バーを全く生成しないようにすべきなのでしょう。

例えば、SymbolInfoTickしかない場合、バーを生成せず、コピーチックのための履歴を保存しないようにします。


Testerのような本格的なアルゴトレーディングツールでは、このバロフィリアが全く理解できません。しかし、MOの美学者ですらこのサボテンをむしゃむしゃ食べ続けるのだから、理解は得られないのだろう。

 

なぜMQLではファクトリーメソッドからプロテクトされたコンストラクタを呼び出すことができないのですか?

class A1
{
  protected:
    A1(const bool x = false){}
  public:  
    static A1 *creator()
    {
      return new A1(true);
    }
};

void OnStart()
{
  A1 *a = A1::creator();
}

このコードはコンパイルエラー"'A1::A1' - cannot access protected member function" を出し、コンストラクタが呼ばれる場所ではなく、クラスの説明が始まる行を指定します(つまり、問題がある場所を手動で探す必要があります)。

しかし、要は誤差が全くないことが重要なのです。C++は問題なくコンパイルできます。