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

 

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

MT5とスピードの関係

fxsaber, 2021.03.10 14:53

Market Watchを遅くするもののわかりやすい例です。

Processorの欄の値を見てください(右から2番目)。


Market Overviewはビデオカードが担当すべきなのでは?

 
BillionerClub:

市場概況はビデオカードが担当すべきなのでは?

特に、MTが仮想マシン内にある場合(珍しいケースではない)。

 
BillionerClub:

市場概況はビデオカードが担当すべきなのでは?

ターミナルにはFPS(Frames per Second)の制限はありません。Market Watchでは300fps以上になることもあります。

取引端末でfps50以上のビジュアライゼーションは、計算機資源の 無駄遣いになってしまいます。

 
BillionerClub:

市場概況はビデオカードが担当すべきなのでは?

は、むしろSysListView32をベースとするのではなく、それ自体は高速ではなく、レンダリングのための独自の要素を持っていますが、スクロールや ソートなどを実装 するすべての "ベルとホイッスル "を備えています。もう一つの質問ですが、このフォームで作業するとき、そんなに必要なのでしょうか? そして、作業期間中はオフにすることが、この問題を解決するための選択肢になると思います(問題であればですが...)。

 
グラフィカル オブジェクトのプロパティ キャッシュがないことを発見しました。
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  const string Name = "ObjectName";
  
  ObjectCreate(0, Name, OBJ_BITMAP_LABEL, 0, 0, 0);
  
  for (int i = 0; i < 10; i++)
    _B(::ObjectGetInteger(0, Name, OBJPROP_COLOR), 100); // Повторное обращение к тому же объекту должно быть быстрым, но этого не происходит.
    
  ObjectDelete(0, Name);
  
  Print(::ObjectSetInteger(0, Name, OBJPROP_COLOR, 0)); // true для удаленного объекта!
}


結果

Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 9361 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 396 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1399 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 987 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1111 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1040 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 639 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 796 mcs.
true


非常に高価なものです。 また、ObjectSet関数のエラーも同様です。

検索文字列:オシブタ026。

 
fxsaber:

そして、ObjectSet関数のエラーも同様に。

検索文字列:オシブタ026。

オブジェクト処理非同期

 
Andrey Khatimlianskii:

オブジェクトの取り扱いは非同期

ObjectSetは常にtrueを返さなければならないことが判明しました。

 
fxsaber:

ObjectSetは常にtrueを返さなければならないことが判明しました。

ヘルプを読む

https://www.mql5.com/ru/docs/objects/objectsetinteger

戻り値

グラフィックオブジェクトのプロパティを変更するコマンドがグラフィックに正常に送信された場合のみtrueを返し、そうでない場合はfalseを返します。エラーの 詳細情報を得るには、GetLastError() を呼び出します。


Документация по MQL5: Графические объекты / ObjectSetInteger
Документация по MQL5: Графические объекты / ObjectSetInteger
  • www.mql5.com
ObjectSetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:

ObjectSetは常にtrueを返さなければならないことが判明しました。

論理で同じ結論は出せない。

 
Andrey Khatimlianskii:

Anton:

false -ChartIDに 誤りがある場合のみ。自分のChartID(0)では常にtrueです。

偽を引き起こすには、相当な努力が必要です。