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

 
// 変更リスト:
// 04.05.2021
// 修正: 消去に失敗したMT5注文がMT4注文として表示されなくなりました。
// 修正: MT5のCloseByタイプの注文がMT4の注文として表示されなくなりました。

MT5のもう一つの機能(完全に執行された注文とそれによって生成されたポジションが一緒に存在できる)は、ライブラリによって回避される。

今回も、解決策を考え出すためにMT5の荒野に飛び込む必要がありました。このアップデートは実に重要なものだ。たとえそれが明白でなくても。


MT5の もう一つの非常に不快な機能に対する サードパーティの解決策を見つけようとしています。

 
Vitaly Muzichenko:

なぜそんなに悲しいのか?

KBからファイルをダウンロードすれば問題ないはずだ。

 
Vitaly Muzichenko:

なぜそんなに悲しいのか?


https://www.mql5.com/ru/forum/1111/page3003#comment_21981258 に報告したが、まだあるようだ。しかし、それは表示にしか影響しない。ファイルをクリックしてダウンロードすれば、すべて問題ない。

 
traveller00:

https://www.mql5.com/ru/forum/1111/page3003#comment_21981258 に報告したが、まだあるようだ。ただ、表示に影響があるだけです。ファイルをクリックしてダウンロードすれば、すべて正常です。

ありがとうございます!はい、その方法で問題なく表示されます。

 

これはMT4スタイルの興味深い特殊性である。


一見したところ、これら2つのコードは同じ結果を生むはずだ。

while (OrdersTotal() <= 1)
  if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
  else
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    


while (OrdersTotal() <= 1)
  if (!OrdersTotal())
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
  else if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);


実際はそうではない。その理由を考えてみよう。

Особенности языка mql4, тонкости и приёмы работы
Особенности языка mql4, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql4, примеры решения тех, или иных задач...
 
// 変更リスト:
// 12.05.2021
// 追加: MT4ORDERS_BYPASS_MAXTIMEマクロは、MT5に常に存在する取引環境の同期ミスを修正します。

画期的なライブラリの更新!MT5取引環境の恒常的な同期ズレを補正できる世界で唯一のライブラリ。控えめですが、真実です。


対応するマクロを書くだけです。以下はその例です。

// MT5でダブルポジションを建てる判断のデモ。
//https://www.mql5.com/ru/forum/368178/page13#comment_22171524

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 取引環境の同期を待つ最大時間(単位:µs
#include <MT4Orders.mqh> //https://www.mql5.com/ja/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // 組み込みの MT5-OrderSend 結果の修正を拒否します。
  
  while (!IsStopped() && OrdersTotal() <= 1)
    if (!OrdersTotal())
      OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0);    
    else if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    
  Print(MT4ORDERS::ByPass.ToString()); // 同期の統計情報を表示する。
}


このスクリプトは、ポジションのオープンとクローズを交互に繰り返すだけです。このスクリプトは、ポジションが反転した場合(MT5の一般的な問題)、つまりライブラリに障害が発生した場合にのみ停止します。このような問題に遭遇した人がいたら、ぜひ教えてください。


私にとって、このライブラリのアップデートは必須です。お勧めです。


ZY 同期の仕組みはとても速い。

Amount = 126/247 = 51.01%, Time(mcs) = 983/9915 = 9.91%, TimeAvg = 40 mcs, MaxInterval = 2483 mcs.
このメカニズムは247回(9915μs.)起動され、そのうち126回(983μs.)は非同期であった。メカニズムの平均時間は40μs。最大は2483μsである。
 
Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

バグが見つかりました:

OrderOpenReason()関数が、利益確定で決済された注文に対して(ENUM_DEAL_REASON)DEAL_REASON_TPを返します。

 
fxsaber:
#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 取引環境の同期を待つ最大時間(単位:µs

アップデートをありがとう!

この1秒が経過した後はどうなるのでしょうか?同期が取れていない状態でも動き続けるのでしょうか?


fxsaber:
MT4ORDERS::OrderSend_MaxPause = 0; // 組み込みの MT5-OrderSend 結果の修正を拒否します。

これは戦闘ロボットで規定する必要が ありますか?

 
Andrey Khatimlianskii:

この1秒が経過した後はどうなるのか?同期がない場合、その動作は継続するのでしょうか?

それとも、取引操作の 前にMT4ORDERS::ByPass.Is()をチェックするだけで十分ですか(非同期がないことを確認するため)?