記事"MetaTrader 5 の注文、ポジション、取引"についてのディスカッション - ページ 5

 

この 問題に関するfxsaberからの情報です:https://www.mql5.com/ru/forum/366029/page3#comment_22547881 https://www.mql5.com/ru/forum/366029/page3#comment_22547881


ラシッド・ウマロフ

開発者に対応をお願いします。

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.05.21
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 

履歴を使った作業のブレーキが発表された後、開発者たちはキャッシュを作るために多くの作業を行った。そのブレーキがなくなった。

おそらく、より経済的なキャッシュのメカニズムがあるのだろう。しかし、ブレーキを許すことは確かに不可能だ。


ZY 歴史を最速で扱う方法についてのコメントはありません。今のところ100%速い方法は、どこでもHistorySelectだけを 呼び出すことです。

HistorySelect(0, INT_MAX)
 
fxsaber:

履歴を使った作業のブレーキが発表された後、開発者たちはキャッシュを作るために多くの作業を行った。ブレーキはなくなった。

おそらく、より経済的なキャッシュのメカニズムがあるのだろう。しかし、ブレーキを許すことは確かに不可能だ。


ZY 履歴を扱う最速の方法についてのコメントはありません。今のところ100%速い方法は、どこでもHistorySelectだけを 呼び出すことです。


HistorySelect(t, INT_MAX)

ここで、tはそれほど前の日付ではなく、呼び出しごとに変化しない任意の日付です(プログラム全体が一定に統一されています)。

 
mktr8591:

ここで、tはあまり古くなく、呼び出しごとに変化しない任意の日付(プログラム全体で一様な定数)ですか?

これでキャッシュが小さくなるかどうかはわからない。

 
fxsaber:

それでキャッシュが小さくなるかどうかはわからない。

消費量は減ります。最初の頃は処方していた。

bool HistorySelect2( const datetime From, const datetime To )
{
  static const datetime NewFrom = ::TimeCurrent() - 24 * 3600 & 30; // 月。
  
  return(::HistorySelect(From ? From : NewFrom, To));
}

#define HistorySelect HistorySelect2

でも、深刻な問題があって 断念せざるを得なかった。

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

void OnStart()
{
  PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  
  if (HistorySelect(0, INT_MAX))
  {
    PRINT(HistoryDealsTotal());
    PRINT(HistoryOrdersTotal());
    
    PRINT(MQLInfoInteger(MQL_MEMORY_USED));
    PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED));
  }
}

ターミナル上でM1チャート、5000バー、1シンボル、リソースなし、グラフィックなしで実行した結果。

TerminalInfoInteger(TERMINAL_MEMORY_USED) = 426
HistoryDealsTotal() = 134502
HistoryOrdersTotal() = 218740
MQLInfoInteger(MQL_MEMORY_USED) = 1
TerminalInfoInteger(TERMINAL_MEMORY_USED) = 789

かなりの量です。10個の同期(OrderSend)EAが4ギガを消費します。選択肢は2つ:

  1. 新しい口座を開設し、そこに資金を移して取引を続ける。残念ながら、常に可能とは限りません。
  2. 非同期(OrderSendAsync)ですべてのボットを1つにまとめる。これは、超アクティブな取引の場合、バグを捕捉するのが非常に難しい変種である。
2点目は、やはり1つのExpert Advisorに組み込まれたボットのマネージャー(GUIなど)を書く必要がある。
 
fxsaber:



  1. 非同期(OrderSendAsync)ですべてのボットを1つにまとめる。超アクティブな取引でバグをキャッチする非常にヘビーなバリエーション。

他に方法はない。(もちろん、古い履歴を切り離し、履歴を扱うアルゴリズム全体をやり直す場合は別だが、これはMQが古いソートを返さない場合に限る)。

 

皆さん、こんにちは!

MetaQuotesが この記事をトレードクラス(CAccountInfo,CSymbolInfo,COrderInfo,CHistoryOrderInfo,CPositionInfo,CDealInfo,CTrade,CTerminalInfo)とともにアップグレードしてくれると助かります。オブジェクト指向のパラダイムでEAを開発すれば、キャッシュを同期させたり、シンボル、注文、ポジション、取引、トレードなどのデータを取得するために、この操作を変更(単純化)することができます。

そうだろうか?

Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
Documentation on MQL5: Standard Library / Trade Classes / CAccountInfo
  • www.mql5.com
CAccountInfo - Trade Classes - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

注文手数料の計算方法を教えてください。

"利益 += 利益 + スワップ + 手数料 "

 

質問の答えを教えてください!

MT5ターミナルのフローティングポジションインジケータ「Market Value」と「Profit」は、翻訳された気配値とシンボル仕様に基づいてターミナル自体によって計算されるのですか、それともMT5サーバーによって翻訳され、ディスクにキャッシュされるのですか?

キャッシュされている場合、受信した気配値と現在の「Market Value」と「Profit」 インジケータが同期しない可能性はありますか?