MT5とスピードの関係 - ページ 78

 
Valeriy Yastremskiy:

端末のメモリは、mclやtixなどの端末プログラムメモリとスタックされていることを正しく理解すること。

いいえ。CopyTicksは、要求されたティックのキャッシュを10秒間保存するだけです。例えば、3Gbのメモリを要求された場合、ターミナルはこの3Gbをさらにキャッシュに保存します。合計で6GBを消費します。ArrayFreeを 行い、別のシンボルに3Gbを要求すると、端末は9Gbを消費します。といった具合に。

 
Valeriy Yastremskiy:

端末のメモリに端末のプログラムmclやtixなどが追加されることを正しく理解すること。

もちろんです。
 
複数のシンボルのティック履歴を 元に数式でカスタムシンボルを作成するスクリプトを作りたいのですが
MqlTick Formula( const MqlTick &Symbol1_Tick
                 const MqlTick &Symbol2_Tick,
                 const MqlTick &Symbol3_Tick,
                 const MqlTick &Symbol4_Tick,
                 const MqlTick &Symbol5_Tick );

この作業には、10億ティックでも100MBのRAMがあれば十分だと思われます。しかし、MT5では、CopyTicksを使用してこのタスクを解決することはできません。

これが松葉杖です。

  1. CopyTicksは各シンボルに対して個別に呼び出され(そして、呼び出しのたびにキャッシュの解放を待つ必要がある)、FileSaveを介してティック履歴を対応するファイルに書き出します。
  2. そして、これらのファイルからダニを読み出し、そのダニに対してFormulaを呼び出すことになります。

確かに気持ち悪い松葉杖だが、他に選択肢はない。そのため、CopyTicksと直接連携することはできません。ティックのファイルアーカイブを使用する必要があります。


呼び出しのたびにキャッシュが解放されることを想定した場合でも、最もメモリを消費するのはp.1.であろう。この場合、p.2.は無料で実行されます。

 

私は一度に8つのペアで取引しており、各ペアで複数のExpert Advisorを使用しています。また、リソース面では、メモリ使用量は25%以下、CPUは10%以上負荷がかからないなど良好のようですが、一般的な取引と同様に新しいチャートが数秒開くなど、ラグが目立ちます。少なくとも抽象的な話ですが、どうすれば全部を詰め込んで速く動作させることができるのか、ベストプラクティスがあるのかもしれませんね。複数のExpert Advisorを1つに仮想化しているとのことですが。落とし穴は?トレードオーダーの 送信はどのように実施されたのですか?どんなことに気をつければいいのでしょうか?

追伸:私自身はVirtualで同期をとり、MT4Ordersでトレード、1チャート1EAという使い方をしています。

 
fxsaber:

同じく。VPSを利用する。マーケットスクリーニングが効かない。

ZS 何カ月も続いているしゃっくりを解消するのはいいことだと思います。このスクリプトは、RAMが無限のマシンで実行してください。例えば、6月1日からのティックを1文字ずつだけアップロードすることができないのです。CopyTicksをハングアップさせるだけで、リソースの消費はゼロです。

ハングアップ」した時の端末のダンプを取る。その原因を見てみましょう。

 
traveller00:

私は一度に8つのペアで取引しており、各ペアで複数のExpert Advisorを使用しています。また、リソース面では、メモリ使用量は25%以下、CPUは10%以上負荷がかからないなど良好のようですが、一般的な取引と同様に新しいチャートが数秒開くなど、ラグが目立ちます。少なくとも抽象的な話ですが、どうすれば全部を詰め込んで速く動作させることができるのか、ベストプラクティスがあるのかもしれませんね。

新しいMT4Orders(このブランチが作成された後、履歴処理が加速される)を使用し、現在の環境:注文とポジションをスナップショットします。全部飛んでるよ。

複数のExpert Advisorを1つに仮想化しているとのことですが。落とし穴は?トレードオーダーの 送信はどのように実施されたのですか?どんなことに気をつければいいのでしょうか?

synchronous OrderSendを使っていますが、MT5のチェックを無効にしています。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

ライブラリ:MT4Orders

fxsaber, 2020.09.29 08:45

このセリフで。

MT4ORDERS::OrderSend_MaxPause = 0; // Отключение проверки корректности работы MT5-OrderSend.

を使用すると、すべてを無効にすることができます。MT4Ordersは、この履歴を参照してMT5-OrderSendの正しさをチェック(修正)することもあるため、MT5の取引履歴が滞っている 場合に有効かもしれません。

これはお勧めしません。


各セット(入力パラメータのセット)には、それぞれ独自のVirtualが与えられます。シンクロナイザーはすべてのVirtualを通過し、それぞれのVirtualのシンクロを行う。これは最初のVirtualからではなく、ループで行う必要があります。

シンクロナイザー内部で)OrderSendを呼び出すと、必ずスナップショットが作成され、OrderSend実行時間中に来た新しい目盛りが(すべてのVirtualに)追加されます。つまり、仮に一時停止した後でも、すべてを新しく作り直すのです。

新鮮なティックは、毎回CopyTicks経由でのみ撮影しています。ロールスルーするSymbolInfoTickがない。CopyTicks_LastTick.time_msc < SymbolInfoTick.time_msc(呼び出しが次々と(どんな順序であっても)頻繁に起こる) なら、シンクロナイザーが有効でないことを確認します。そうでない場合、実時間制限は実行されるが、仮想時間制限は実行されないという現象が発生する可能性があります。また、同期の問題も出てくるでしょう。

VIRTUAL::Snapshotでスナップショットを作っています。スピードだけでなく、自分のシンボルを他のシンボルから切り離すことができるため、自分のシンボルだけがそこに届くことになります。これにより、さらなるスピードアップを実現しています。さらに、スナップショットで無効になるのは履歴だけではありません。

#define  VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Отказ от снепшота истории для повышения производительности

のみならず、履歴へのアクセスを必要とする分野(以下にマーク)。

#define  MACROS(A) this.##A = ::Order##A();

  bool ORDERS::Copy( const bool WithoutHistory = false )
  {
    MACROS(CloseTimeMsc)

    if (WithoutHistory && !this.CloseTimeMsc) // Для исторических ордеров оставляем все без изменений.
    {
      const string Str = NULL;
      this.comment = Str;

      this.Commission = 0;
      this.OpenPriceRequest = this.OpenPrice;
    }
    else // В MT4Orders требуется обращение к истории.
    {
      const string Str = ::OrderComment();
      this.comment = Str;

      MACROS(Commission)
      MACROS(OpenPriceRequest)
    }

以前は、LastDeal.time_mscがLastTick.time_mscより大きくないかどうかもチェックしました。この条件が満たされない場合は、当然のことながら同期を拒否しました。しかし、そのようなチェックは多くのリソースを消費する(履歴で動作する)ので、お断りしました。


トレードオン機能 - OnTick。


おそらく主なものを挙げてみたと思います。

 

同期とは、OrderSendだけでなく、変更、削除などを含む全ての取引注文の ことですね?


SymbolInfoTickは、ティックの順序が台無しになる可能性があるため、スロースルーされません?そして、CopyTicksはまさに正しい順番で並んでいます。


SymbolInfoTickは時刻を確認するためだけに必要なことがわかりましたが、それだけでしょうか?トレードなどはすべてCopyTicksだけで 修正されるのですか?


1on1チャートに複数のEAを詰め込もうとすることに意味はあるのでしょうか?不可能ではないが、手間をかけて書き直す価値があるのか、それとも利益はわずかなものなのか、理解しようとしているのだ。

 
traveller00:

1on1チャートに複数のEAを詰め込もうとするのは意味があるのでしょうか?不可能ではないが、手間をかけて書き直す価値があるのか、それとも利益はわずかなものなのか、考えているところだ。

その利益はどこから出てくるのでしょうか?トレードの 際には、誰もがそのどれかを待ち望んでいることでしょう。

そして、パラレルが少ないだけです。

注文のキャッシュをひとつにまとめておけば別ですが、そのメリットは疑問です...。

 
Anton:

端末が「ハングアップ」したときのダンプを取る。何が原因かを確認する

問題を再現するコードで十分ではないでしょうか?それとも再生産されないのでしょうか?

 
traveller00:

同期とは、OrderSendだけでなく、変更、削除などを含む全ての取引注文の ことですね?

MT5-OrderSendのことです。

SymbolInfoTickが渡されないのは、ティックの順序が台無しになる可能性があるから?そして、CopyTicksはすべて正しい順序で正確に進みます。

穴があくからです。

つまり、SymbolInfoTickが必要なのは時間の確認だけ、それだけ?

はい。

トレードなどは全てCopyTicksだけで行って いるのでしょうか?

だけです。

1on1チャートに複数のEAを詰め込もうとするのは意味があるのでしょうか?不可能ではないが、手間をかけて書き直す価値があるのか、それとも利益はわずかなものなのか、考えている。

これは私にとって大きな助けです。


最後のすべてのシングルパス(シングルテストモード)は、そのインステップを同じファイルに書き込みます。そこで、最適化後のパスをいくつか見てみると、それらのパスのデータが入ったファイルを入手することができます。そして、このファイルでフィルタリングし、良さそうなものだけを残すのです。そして、ロボットの起動時にFileSelectDialogを使って、このファイルを選択するだけです。このように、ポートフォリオを取引するのです。


Optimizationに20分かかることが判明。パスのプレビュー - 3分そのフィルター-3分ロボットの稼働開始-秒ロボットはコンパイルする必要がありません。バージョンとチャートの管理 - 似たようなもの。

起動時に、各セットのレポートを見ることができます。いつでもリアルからバーチャルとその名前のステータスを見ることができ、ホットキーでバーチャルとリアルの両方の詳細なHTML-Reportを見ることができるのです。1セットでも、ポートフォリオ全体でも。


バーチャルの売買統計は特別に早く書かれているので、その場で(キーボードから)素早くセットを比較 することが可能です。

ファイル:
clip0184.gif  64 kb