文章 "MetaTrader 5 中的订单、持仓和成交" - 页 5

 

以下是 fxsaber 就此问题 提供的信息:https://www.mql5.com/ru/forum/366029/page3#comment_22547881 https://www.mql5.com/ru/forum/366029/page3#comment_22547881


@RashidUmarov

请开发人员回复。

Библиотеки: 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 个条形图、一个符号、无资源、无图形。

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

消耗很大。10 个同步(OrderSend)EA 需要消耗 4GB 资源。两个选项

  1. 开立一个新账户,将资金转入该账户并继续交易。不幸的是,这并不总是可行的。
  2. 通过异步(OrderSendAsync)将所有机器人合并为一个。在超级活跃的交易情况下,这是一种很难捕捉错误的变体。
就第二点而言,仍有必要为嵌入单一智能交易系统的机器人编写管理器(图形用户界面等)。
 
fxsaber:



  1. 通过异步(OrderSendAsync)将所有机器人合并为一个。在超级活跃交易中捕捉错误的重磅变种。

别无他法。(当然,除非您切断旧的历史记录并重做处理历史记录的整个算法,但这仅限于 MQ 不返回旧排序的情况)。

 

大家好!

@MetaQuotes 将本文升级为交易类(CAccountInfoCSymbolInfoCOrderInfoCHistoryOrderInfoCPositionInfoCDealInfoCTradeCTerminalInfo)将会有所帮助。在面向对象范例下开发的 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 终端中的浮动头寸指标 "市值 "和 "利润 "是由终端根据翻译后的报价和符号规格自行计算的,还是由 MT5 服务器翻译后缓存在磁盘上的?

如果是缓存,是否会出现接收到的报价与当前"市值 "和 "利润 " 指标不同步的情况