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

 

Торговыми событиями считаются следующие изменения на счете:

  • 借记和收取资金;
  • 收取佣金、掉期和税费;
  • 设置、删除和修改订单;
  • 根据订单执行交易;
  • 开仓和平仓;
  • 改变头寸的数量和方向。

该清单不包括未结头寸的 "修改止损和/或止盈水平"(SL & TP 修改)等交易事件。这是否被视为 "根据订单 执行交易 "的一种特殊情况?

 
Yedelkin:

该列表不包括未结头寸的 "修改止损和/或止盈水平"(SL & TP 修改)这样的交易事件。还是说它被视为 "订单交易 "的一种特殊情况?

修改 未结头寸的" 止损和/或止盈水平"(SL & TP 修改)"更接近于 "设置、删除和修改 订单"。
  • 设置、删除和修改订单;
 
Rosh:
修改未结头寸的 "止损和/或止盈水平"(SL 和 TP 修改)"更接近于 "修改未结头寸的止损和/或止盈水平"。

我正在考虑这个问题。但事实上,在谈到 "设置、删除和修改订单 "时,我们说的是设置、删除和修改挂单 。修改未平仓头寸 的 SL 和/或 TP 水平则性质不同,因为相应的请求属于 "立即 执行订单 "类别。还是我对"立即执行"的理解有误?

 
Rosh:

文章给出了一个加载一天交易历史记录的例子(有一个代码给出了加载 3 天历史记录的例子)。是的,这是一个局限性,这个例子并不具有普遍性。但如果读者在阅读文章时理解了这一特殊性,他/她就能自己决定问题--他/她需要在什么时间 间隔内、从什么时候 开始将交易历史记录 加载 到缓存中。

读者已经获得了最简单的示例和算法,现在可以独立地将它们应用到必要的事件处理功能 中。他可以独立创建自己的交易历史库,并完成初始化和同步等工作。

如果要为所有情况下的交易历史最佳工作提供具体方法和功能,至少还需要一篇文章。更确切地说,不是例子本身,而是解决某些任务的方法。这篇文章的目的是让大家了解交易函数是如何工作的,以及应该注意哪些细微差别,从而避免浪费自己的研究时间。

我相信,读完这篇文章之后,一切都会变得简单。

拉希德,我并不是贬低这篇文章的作用。

只是,如果没有生活 中的例子(可以应用于编写 EA 的例子),这篇文章就显得很有参考价值。

是的,里面有有用的信息,明白人会用得上。但是,一个不谙世事的用户只读了这篇文章,就无法用历史来组织正常的工作,也就是说,这篇文章对他毫无用处。

 

文章中就有这样的部分:

"例如,这里有一个脚本,可以搜索最后一天的最后一笔订单并显示相关信息。

// --- 确定所需的交易历史界限
   datetime end=TimeCurrent();                 // 当前服务器时间
   datetime start=end-PeriodSeconds(PERIOD_D1);// 将起始时间设置为 24 小时前
//--- 在程序缓存中请求当天的交易历史记录
   HistorySelect(start,end);
//--- 获取历史订单数
   int history_orders=HistoryOrdersTotal();
//--- 从具有列表中最后一个索引的历史记录中获取订单的票据
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // 在缓存中获取历史订单,并对其进行处理
     {
      //--- 订单状态
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("订单 #%d:ORDER_MAGIC=#%d,ORDER_STATE=%d,ORDER_POSITION_ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // 试图获取订单未果

     {
      PrintFormat("历史订单总数 %d,选择订单失败"+
                  " 索引 %d。错误 %d",history_orders,history_orders-1,GetLastError());
     }

脚本说明中说搜索的是最后一笔订单,但代码本身说的是获取历史订单列表中具有最后一个索引 的票据:

//--- 从具有最后索引  的历史记录中获取订单的票据  в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
也就是说,这意味着具有最大指数的票据才是最后一笔订单。......如果列表中只有一个订单 那就没有问题。但是,如果列表中有更多的订单,我们是否总是可以依靠建议的方法找到最后一个订单呢?换句话说,最后一个历史订单是否总能保证 在历史订单列表中具有最大索引?
 

下午好!

1) 我查看了位置属性:

position_profit

是什么,用什么来衡量?

举例说明:

double profit =PositionGetDouble(POSITION_PROFIT);

结果:

EURUSD position #101470723: POSITION_MAGIC=0, open pos price=1.30825, close pos price=1.30835, type=POSITION_TYPE_BUY, profit=-2061584302, comment=.

profit=-2061584302 如何理解?

2) 谁能准确而简单地解释一下如何理解这个条目

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

也许 PositionGetInteger(POSITION_TYPE) 顺式函数请求的是一个预选位置的 POSITION_TYPE 属性的值,但这个值是以枚举序列号的形式返回的,为了以可消化的形式表示,我们已经从 ENUM_POSITION_TYPE 顺式枚举中将这个可消化的值导入了类型变量,而类型变量的类型同时被声明为 ENUM_POSITION_TYPE?

在这种情况下,我是否可以自己编写一个特定的类,这个类在意义上将成为一个函数, 大约是这样:

initialisation textPosition = that certain class; // in the constructor of which read into the position buffer and remember all parameters

然后使用:

tekPriceOpening=tekPosition.PriceOpening;

tekDirectionPosition=tekPosition.DirectionPosition;

tekDirectionPosition=tekPosition.DirectionPosition;

tekProfitPosition=tekPosition.ProfitPosition;

谢谢!

 
bivmail:

2) 谁能准确而简单地解释一下如何读取此条目

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

函数 PositionGetInteger("属性标识符")返回 long 类型的值。如果 "属性标识符 "的类型不是 long(例如 POSITION_TYPE 标识符的类型是ENUM_POSITION_ TYPE),则最好将 PositionGetInteger() 函数返回的值转换为所需类型的值(即转换为ENUM_POSITION_TYPE 类型的值)。

在您的示例中,声明了 ENUM_POSITION_TYPE 类型的变量类型,并为其分配了 ENUM_POSITION_TYPE 类型的值,该值是将 long 类型的值显式转换为 ENUM_POSITION_TYPE 类型的值的结果。

数值类型值的转换规则在MQL5 Reference Guide /Language Basics /Data Types / Type Casting /Casting Numeric Types 中有描述。

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

引自文章:"当与交易服务器的连接中断时,终端会定期 尝试恢复连接。

尝试恢复连接的频率是多少?

 
每 5 秒钟
 

明白了,谢谢。