Анализировал с владельцем MT5-сервера тормоза торговых приказов. Запускался OrderSend-Test2.mq5 в том же месте, где MT5-сервер стоит. Т.е. нулевой пинг. Демо, все внутри. Изучались логи MT5-сервера (2170) и MT5-клиента (2280). Логи сервера не буду приводить, просто словами опишу. Думаю, результаты буду интерсны всем, т.к. это поможет раскрыть...
証券取引所と実際の取引、ブローカーOtkrytie上の実際のアカウントで、たとえ10秒間待っても助けにはなりませんでしたが、それでも履歴との同期がとれていないことをallertsポップアップ表示されます。そして、彼らはかなり頻繁にポップアップ表示されます。私の意見では非常に奇妙である、他の特別なラグが見られない、ping 4ミリ秒、注文の実行は、通常15ミリ秒未満である。私は、すべてが正しいかどうか疑いさえ持ち始めました。私はINOUTを使用せず、すべてのINとOUTを別々に使用していますが。このケースを回避する方法はありますか?例えば、自分でチケットを覚えるとか。また、これを解決する優先順位はどの程度なのでしょうか?
両方のログを掲載してください。
fxsaberさん、こんにちは、
2020年に向けて頑張ってください!
MT4OrderClose 関数の取引リクエストにマジックナンバーを含めないのは設計上の選択ですか?
現在、MT4OrderClose からのDEAL_ENTRY_OUT は magic == 0 となります。
ポジションIDでDEAL_ENTRY_INからマジックナンバーを追跡できるため、大きな違いはありませんが、履歴分析目的では、DEAL_ENTRY_IN / DEAL_ENTRY_OUTが一致する方が柔軟性が増すと思われます。
Hi fxsaber,
2020年に向けて頑張ってください!
MT4OrderClose 関数の取引リクエストにマジックナンバーを含めないのは設計上の選択ですか?
現在、MT4OrderClose の DEAL_ENTRY_OUT はマジック==0 となります。
ポジションIDを使用すれば、DEAL_ENTRY_INからマジックナンバーをバックトラックすることが可能であるため、大きな問題ではありませんが、履歴分析の目的では、DEAL_ENTRY_IN/DEAL_ENTRY_OUTを一致させた方が柔軟性が増すと思われます。
MT4OrderClose 関数の取引リクエストにマジックナンバーを含めないのは、設計上の選択ですか?
現在、MT4OrderClose からのDEAL_ENTRY_OUT は magic == 0 となります。
ポジション ID を使用すれば、DEAL_ENTRY_IN からマジックナンバーを追跡できるため、大きな違いはありませんが、履歴分析目的では、DEAL_ENTRY_IN / DEAL_ENTRY_OUT を一致させた方が、おそらく柔軟性が高まります。
OrderClose では、必要に応じて MagicNumber を設定できます。
MT5 では、ポジションを部分的に決済するときに、オープンポジションの MagicNumber を変更できるので、選択肢が与えられます。
たとえば、MagicNumber = 5 のオープンポジションがあり、手動でポジションをクローズする場合、DEAL_ENTRY_OUT_MAGIC = 0 となります。この場合でも、ライブラリは OrderMagicNumber() = 5 を返します。
バグなのか機能なのかわかりませんが、先物の場合、利益と始値が正確に計算されません。例えば、12:00 にポジションがオープンさ れ、18:40 にポジションがクリアされて自動的に再オープンされ、20:00 にポジションがクローズされたとします。4 回目の取引(ポジションを決済)のチケットの GetHistoryPositionData は、MT4ORDERS::Order.Profit = ::HistoryDealGetDouble(Ticket, DEAL_PROFIT); として利益を選択します。しかし、MT4ORDERS::Order.OpenPrice = ::HistoryDealGetDouble(OpenTicket, DEAL_PRICE);として始値を返します。つまり、最初の取引の始値が返されます。私の意見では、最初の取引(始値と利益の両方)からすべてを引き出すか、最後の始値(3回目の取引から清算まで)からすべてを引き出すか、どちらかに統一するのが理にかなっていると思います。それとも、これは機能であり、こうあるべきで、私が何かを見逃しているのでしょうか?
ライブラリーを通してネッティングの履歴を分析しているのですね。これはまさに、ライブラリーが完成していない、最初に声が上がったケースです。そして、完成するかどうかは大きな問題だ。というのも、いじくり回すことが多く、実際にはそのような必要性がないからだ。
私は今でもネッティングで同じライブラリを使っているが、歴史を扱うのは迂遠だ。
https://www.mql5.com/ru/blogs/post/733393
ブログの記事から、ある状況でのスピードを測定。
結果。
HistorySelect関数にどれだけコストがかかっているかがよくわかる。
OrdersHistoryTotal on hotは、少ないとはいえ、やはり目立つので、On-eventごとに1回以上呼び出さないようにすることを常に推奨していた。
履歴によるOrderSelectは無料であることが判明した。
成行注文(TP/SLを含む)の約定に費やされた時間の統計を収集できます。
結果
稼働中の口座で最大2分の約定。統計をここで共有してください。このスクリプトはライブラリを使用していませんので、Netting/Hedgeに適しています。
MT4/5では、取引履歴を扱うときにデバッグするのはかなり不愉快です。さまざまな松葉杖ソリューションを使用する必要があります。
MT5 では、MT4Orders を介して選択された注文のすべてのフィールドをすぐに確認できます。これを行うには、MT4ORDERS::OrderをMT4ORDERS::Order 観察に追加する必要があります。
こうすると、選択した注文のすべてのプロパティを見ることができます。
統計情報を共有しましょう。このスクリプトは、Netting/Hedgeに適したライブラリを使用していません。
これが本当の姿です: