ライブラリ: MT4Orders - ページ 44

 

そしてもうひとつ:

2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      0 - 1532297: 00:00:14.989
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      1 - 1528006: 00:00:04.983
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      2 - 1527412: 00:00:03.543
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      3 - 1528097: 00:00:01.812
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      4 - 1478424: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      5 - 1478368: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      6 - 1478410: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      7 - 1478344: 00:00:01.501
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      8 - 1733682: 00:00:01.480
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      9 - 737378: 00:00:00.346
 
Andrey Khatimlianskii:

それが現実なんだ:

情報をありがとう。この長い執行時間は、おそらくサードパーティのゲートウェイによるものだろう。取引所はどうなっているのだろう。

 
MT4では、このような状況の ためにアラートを書いた。このようなチェックがどれほど高価になるかをチェックする必要があったので、測定するためのハード・バリアントを書いた。
#include <MT4Orders.mqh>
#include <Debug.mqh>

// 履歴からすべてのチケットを取得する。
void GetTickets( TICKET_TYPE &Tickets[] )
{
  for (int i = ArrayResize(Tickets, OrdersHistoryTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket();
}

// 履歴からすべてのチケットを選択します。
int CheckTickets( const TICKET_TYPE &Tickets[] )
{
  int Count = 0;
  
  for (int i = ArraySize(Tickets) - 1; i >= 0; i--)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET))
      Count++;
      
  return(Count);
}

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  GetTickets(Tickets); // チケットを手に入れた。
  
  ArraySort(Tickets);
  
  BENCH(CheckTickets(Tickets)); // チケットをチェック。
  
  _P2(CheckTickets(Tickets));
}


これがMT4での結果だ。

Time[CheckTickets(Tickets)] = 9667
CheckTickets(Tickets) = 20240

10msで20K枚。


MT5で。

Time[CheckTickets(Tickets)] = 5262
CheckTickets(Tickets) = 833

5KのMT4チケットが0.8ms。


Time[CheckTickets(Tickets)] = 700707
СheckTickets(Tickets) = 170458

700msで170K MT4チケット。


MT5は、取引履歴が比較的少ない場合はMT4よりも高速です。取引履歴が大きい場合(数十万件)、MT5は大幅に遅くなります。

 

MT5の興味深いケース。

テイクが部分的に実行され、その後削除された。この場合、DEAL_ORDER のステータスが FILLED/PARTIAL ではなく ORDER_STATE_CANCELED になります。

この場合、DEAL_TIME_MSCはORDER_TIME_DONE_MSCと等しくありません。

 
fxsaber:

DEAL_TIME_MSC が ORDER_TIME_DONE_MSC と等しくない。

これはリミッターの部分実行で発生する。


 

ネクタイの拒否。

このような状況はよく起こりうる:

  1. 価格がオープンポジションのテイクプロフィットに達した。
  2. MT5が成行注文を生成した。対応する指値注文が流動性プロバイダーに送信された。
  3. 指値注文が再登録されます。その後、テイクに対応する MT5 注文が削除されます。
  4. ポイント 1 に切り替えます。
履歴でプロバイダの拒否を確認できるので、良い実装だ。そして、ティアをリミッターとして強制的に内部実装した。
 
fxsaber:
  1. 価格がオープンポジションの利益確定に達した。
  2. MT5が成行注文を生成した。 対応する指値注文が流動性プロバイダーに送信されました。
  3. 指値注文が再登録されます。その後、テイクに対応する MT5 注文が削除されます。
  4. ポイント 1 に切り替えます。
履歴でプロバイダーの拒否を確認できるので、良い実装だ。そして、ティアをリミッターとして 強制的に内部実装

リミッターはどこにあるのか?

この実装は、テイクを設定した瞬間に即座にリミッターとして送信するよりも優れているのか?最安値のLPを選ぶ?

 
Andrey Khatimlianskii:

どこにリミッターがあるんだ?

MT5 は常にマークダウンの形でテイクを表示します。

この実装は、テイクを設定した瞬間に即座にリミットとして送信するよりもどのように優れていますか?ベストプライスのLPを選択するのですか?

そうです。取引所ではなく、アグリゲーションだからです。

 
fxsaber:

MT5は常にテイクをマーキーとして表示する。

誰に表示するのですか?

TPをリミットとして表示するサーバ・プラグインはないのか?


fxsaber:

そうです。取引所ではなく、アグリゲーションだからです。

その主張を検証してみたい。

集合体だからといって、マーケットプレイスでエントリーがより収益的になるわけではありませんよね?

 
Andrey Khatimlianskii:

誰に?

クライアントだ。

TPを制限値として表示するサーバー側のプラグインはないのか?

第三者だ。

私はこの主張を検証したい。

エントリーは集計だからマーケットプレイスで利益が上がるわけではないでしょう?

そうやって、非常に短い有効期限で指値フィードが送られる。