フォルツァ執行上の問題点 - ページ 107

 
Aleksey Vyazmikin:

困ったことに、すべての証拠は証券会社か証券取引所からしか得られないのです。従って、当面はこのまま対応することにします。

ブローカーから返信がありました。

"

Alexey Vyacheslavichさん、こんにちは! 開発者からの回答です。

クライアント側のネットワーク遅延の ようですが、トレーディングサーバー側の実行状況は以下の通りです。

"

ログから理解した通り。

1.実行時間はほぼ同じ

2. 実行情報がサーバーから送られてきて、3秒遅れでプログラムが処理した場合

私のインターネットは有線のルーターまでは十分に良好で、チャンネルはオーバーロードしていなかったので、私の方で3秒の遅延というのはかなり奇妙に聞こえます。コンピュータのコアは100%負荷がかかっていなかったが、もしかしたら一部のコアは100%負荷がかかっていたかもしれない。

そして、判明する。

1.開発者は、CPUが最初に処理すべきタスクの優先順位(スレッド)を適切に管理せず、MT5コアは常に最も負荷の低いCPUコアを占有するよう強制された可能性があります。また、負荷が100%の時は、指標用計算や他のユーザーコードの実行優先度を下げる。

2)MT5のログは信用できない。

そう、今、あなたは誰も全く信用できない。

ロシアでは、行われたことに対する罰は、決してそれに見合ったものではありません。

マッチ1箱を盗んでも3年は刑務所だが、車1台分のマッチを盗めば

ざまあみろ

MT5のログによると

2018.04.25 16:49:28.972 Trades  '***': exchange buy 10.00 Si-6.18 at market                                       - терминал отдал приказ серверу МТ5 на покупку
2018.04.25 16:49:29.186 Trades  '***': accepted exchange buy 10.00 Si-6.18 at market                              - сервер МТ5 проверил ордер и утвердил его правильность 
2018.04.25 16:49:29.387 Trades  '***': exchange buy 10.00 Si-6.18 at market placed for execution                  - сервер МТ5 отправмл ордер на Биржу
2018.04.25 16:49:30.002 Trades  '***': order #87849076 buy 10.00 / 10.00 Si-6.18 at market done in 1030.179 ms    - сервер МТ5 рапортовал, что ордер исполнился

であり、これらは

2018.04.25 16:49:30.405 Trades  '***': deal #48508923 buy 1.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:30.819 Trades  '***': deal #48508924 buy 1.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:31.032 Trades  '***': deal #48508925 buy 5.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:31.635 Trades  '***': deal #48508926 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)
2018.04.25 16:49:32.058 Trades  '***': deal #48508927 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)
2018.04.25 16:49:32.264 Trades  '***': deal #48508928 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)

は、あくまでトレードの記録です。

によって追加されました。

サーバーのログからは、プラザ2の取引が別のストリームであるため、交換のコアは、すべて瞬時に、3-4 msの遅延を実行し、ブローカーから交換のコアに、この遅延を示しています。

は、リアルタイムではなく、"スライス "である。

要するに、ブローカーや開発者をゆすぶらなければならないのです。

"ネットワークの遅延 "は、あなたや私のせいではありません。

追加

毎朝(時々午後も)、数秒間、コマンドが実行されません。

2018.04.26 10:02:35.202 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:36.208 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:37.222 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:38.236 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:39.250 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:40.263 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:41.277 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:42.291 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:43.305 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:44.319 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:45.333 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:46.348 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:47.362 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:48.376 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:49.390 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
 
Aleksey Vyazmikin:

ブローカーから返信がありました。

ええ、私は証券取引所の方がいいと思いました )注文の実行 に10ms。でも、どうせ2秒もかからない。
 
prostotrader:

"ネットワークの遅延 "は、あなたや私とは関係ない、彼らだ!

追加

毎朝(時々午後も)、数秒間、コマンドが実行されません。

知りたいのは、時刻がどこに設定されているかということです。私のターミナルログでは私のパソコンの時刻で、相手にはMT5サーバーの時刻があるのでしょうか?

私は、時間の同期 - 適切なサーバ(ntp2.stratum2.ru)によって10分ごと、私は私のマザーボードのバッテリーを変更した、それは時間が正確であるべきであることを意味しています。しかし、画面上では、時計の時刻はすでに過ぎているのに、バーがそわそわし続けているのをよく見かけるのですが、そういうことなのでしょうか。交換時の時間は、ある種の左利きなのでしょうか?

 
Aleksey Vyazmikin:

ログにある私の端末では私のPCの時間、彼らはMT5サーバーの時間を持っている - 私はどのような時間が指定されているにも興味があります?

適当なサーバー(ntp2.stratum2.ru)で10分ごとに時刻を同期しているだけです。マザーボードのバッテリーを交換したので、時刻は正確なはずです。しかし、画面上では、時計の時刻はすでに過ぎているのに、バーがそわそわし続けているのをよく見かけるのですが、そういうことなのでしょうか。取引所には、何か残された時間があるのでしょうか?

MT5サーバーの時刻とExchangeの時刻の同期を、MQがどのように実装しているかはわかりません。

しかし、我々はbmrzで取引しているので、したがって、それはあなたのコンピュータまたはMT5サーバ、交換時間である何が重要である何時間問題ではありません!

同期にはExchange時間を使用する必要があります。

//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  sv_time.year = 0;
  TimeCurrent(sv_time); //Возвращает последнее известное время сервера
  if(sv_time.year > 0)
  {
    MqlDateTime cur_time;
    cur_time.year = 0;
    TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.
    if(cur_time.year > 0)
    {
      if((cur_time.day_of_week == int(FirstDay)) ||
         (cur_time.day_of_week == int(SecondDay))) return(false); //Проверка на выходные
      if(cur_time.day_of_week == sv_time.day_of_week)
      {
        ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
        if(((tr_time >= time_st_mon) && (tr_time < 50370)) ||  //10:00:01 - 13:59:30
           ((tr_time >= time_st_day) && (tr_time < 67470)) ||  //14:05:01 - 19:44:30 
           ((tr_time >= time_st_evn) && (tr_time < 85770)))    //19:05:01 - 23:49:30
        {
          return(true);
        }  
      }   
    }   
  }
  return(false);
} 
TimeCurrent(sv_time); //Возвращает последнее известное время сервера

つまり、TimeCurrent()は正確な時間ではありません

TimeTradeServer(cur_time); //トレードサーバーの推定現在時刻を返します

TimeTradeServerは正確な時間ではありません

ポイントは、昨年から取引所では取引に必要な情報をすべて放送していることです。

を計算することができます。

プラザ2プロトコルの仕様書には、次のように書かれています。

サーバークロックサービステーブル

そして、このテーブルの中身は以下の通りです。



元々mt5はプラザ2のp2gateに「座って」いましたが、それが「死んで」しまい、MQが必要になりました。

を使えば、すぐにサーバーをCGateに書き換えることができますが、すでに書かれていて動いている以上、なぜ悩むのでしょうか?

何かを追加・修正すること。

追加

レイテンシーの問題は、深刻なバグの結果である。

端末が1秒間に60回以上のトランザクションを送信できない(例:2プラザ2ログイン)。

簡単な計算で、「速度」がどの程度のブローカーであるべきかがわかります。

МТ5 サーバーとゲートウェイを接続するもの。

 
prostotrader:

MQがどのようにMT5サーバーの時刻とExchangeの時刻の同期を実装しているのかわからないのですが。

しかし、我々はbmrzで取引するので、したがって、それはあなたのコンピュータまたはMT5サーバーが持っているどのような時間問題ではありません、何が重要である交換時間です!それは、あなたのコンピュータがあなたのためにそれを行うことができます。

Exchangeタイムに同期を行う必要があります。

そして、実際に何が起こるのか?もしかしたら、ExchangeにはPCユーザーの時刻を同期させるためのサーバーがあるのでは?

 
Aleksey Vyazmikin:

実際はどうなのでしょうか?もしかしたら、ExchangeにはユーザーのPCの時刻を同期させるためのサーバーがあるかもしれませんね。

前回の投稿に情報を追加しました。

 
Aleksey Vyazmikin:

私の端末のログでは私のPCの時間ですが、彼らはMT5サーバーの時間を持っているのでしょうか。

このスクリプトは何を出力するのですか?

#define  PRINT(A) Print(#A + " = " + (string)(A))

string TimeMscToString( const ulong time )
{
  return(TimeToString(time / 1000, TIME_DATE | TIME_SECONDS) + "." + IntegerToString(time % 1000, 3, '0'));
}

void OnStart()
{
  if (HistorySelect(0, LONG_MAX))
  {
    PRINT(TimeMscToString(HistoryDealGetInteger(48508923, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508924, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508925, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508926, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508927, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508928, DEAL_TIME_MSC)));
    
    PRINT(TimeMscToString(HistoryOrderGetInteger(87849076, ORDER_TIME_DONE_MSC)));
    PRINT(TimeMscToString(HistoryOrderGetInteger(87849076, ORDER_TIME_SETUP_MSC)));
  }
}
 
fxsaber:

このスクリプトは何を出すのですか?

2018.04.26 16:59:58.686 Test_sr (Si Splice,M15) arrK=0.2021591274299704

これは何でしょう?
 

 
Aleksey Vyazmikin:

2018.04.26 16:59:58.686 Test_sr (Si Splice,M15) arrK=0.2021591274299704

何ですか?

上のスクリプトとは関係ないので、わからない。問題が発生した取引口座での出力を見せてください。

理由: