ライブラリ: マルチテスター - ページ 25

 
fxsaber:

KBのバグを利用しよう:ZIPファイルには最初のリリースが含まれている。

残念なことに、中には12/25/20のファイルが入っている。
私はまだ2019年11月からのファイルを持っていますが、すでに...
ありますか?
 
Edgar Akhmadeev:
あなたは持っていますか?

2019年12月のものしか見つかりませんでした。MTTesterは古い機能を削除していないようです。

 
fxsaber:

2019年12月分のみ見つかりました。MTTesterの古い関数は削除していないと思います。

多分、少なくともアイデアの形で - コードからExpert Advisor最適 化のパラメータを設定する方法?
おそらく、私は長い時間前に混乱しており、そのような可能性はありません。
 
Edgar Akhmadeev:
もしかしたら、少なくともアイデアの形で - コードからExpert Advisorの最適 化のパラメータを設定する方法?
おそらく、私は長い時間前に混乱しており、そのような可能性はありません。

そのような可能性だけです。



しかし、共通のクリップボードを介して並行して動作することを妨げるものはありません。ただ、追加チェックをするだけです。

 
fxsaber:

しかし、共通のクリップボードを使って並行して作業することを妨げるものは何もない。余計なチェックをするだけだ。

これが最初に試したことだ。COMMONのファイルセマフォのデバッグに数日費やしたが、安定した動作は得られなかった。多分、内蔵のファイル関数は、私が思っているのとはちょっと違うタイミングで動いているのだろう。
もしかしたら、WinAPIや共有メモリー、あるいはセマフォAPIを使ったファイルを試してみるべきかもしれない。
もし僕のLock関数とRelease関数を分析したければ(短いけど)、明後日にでも投稿するよ。ダメ?
 
Edgar Akhmadeev:
これが最初に試したことだ。COMMONでファイル・セマフォのデバッグに数日費やしたが、安定して動作するようにはならなかった。多分、内蔵のファイル関数は、私が思っているのとは少し違ったタイミングで動作しているのだろう。
WinAPIや共有メモリー、あるいはセマフォAPI(確かにある。)
もし僕のLock関数とRelease関数を分析したければ(短いけど)、明後日にでも投稿するよ。ダメ?

まあ、あなたは物事をめちゃくちゃにしている!文字列入力を入力し、そこにバッファを通してターミナルへのパスを押し込む。設定を押し込んだら、それを読んで正しいかどうかチェックする。特に、この文字列入力によって。チェックが成功したらすぐにスタートボタンを押す。


似たようなことさえ行われている。

  static bool SetSettings2( string Str, const int Attempts = 5 )
  {
    bool Res = false;

    for (int j = 0; (j < Attempts) && !Res; j++)
    {
      string Str1;
      string Str2;
      string Str3;

      Res = MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str1) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str2) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str3) &&
            (Str1 == Str2) && (Str1 == Str3);
    }

    return(Res);
  }
 
fxsaber:

よくわかったね!文字列入力を入力し、そこにバッファを通してターミナルへのパスを押し込む。設定を押し込んだら、それを読んで正しいかどうかチェックする。特に、この文字列入力によって。チェックが成功したら、すぐにスタートボタンを押してください。

賢いというわけではなく、直接的すぎるのだ。マルチアクセスとはセマフォのことである。
まあ、アイデアを求めて、それを手に入れたんだ。ありがとう!
 

GAの加速

フレームモードのExpert AdvisorはAgentからOnTesterを受け取ります。100-1000パスして何も良いものが見つからなければ、Stopを押す。

最適化は 一桁加速 できる。
 

私は470の最適化(それぞれ異なるシンボル)を実際のティック(1ヶ月)で4.5時間で行った。

 

1.私なら Sleep2で GetTickCount()をGetTickCount64() に切り替える。 そうしないと、オーバーフローは正しいロジックとは言えない。そして、それは64-variantで顕著に少ない頻度で起こる。他の作品では、おそらくあなたもそれに切り替える必要があります。


2.2番目のArrayResizeには 疑問がある。

      ::ArrayResize(Buffer, (int)Size / sizeof(T));

      kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0);
      Res = ::ArrayResize(Buffer, Read);

ほとんどの場合、これは

Res = ::ArrayResize(Buffer, Read / sizeof(T));


3.最後に、いくつかの異なる型

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);