使用 PositionSelect() 函数选择仓位,然后使用PositionGetInteger() 函数和 mql5 标识 -POSITION_IDENTIFIER,获取其标识符。
帮助中的示例:
//+------------------------------------------------------------------+ //| 贸易功能| //+------------------------------------------------------------------+ void OnTrade() { //--- 检查位置是否可用,并打印位置变化的时间 if(PositionSelect(_Symbol)) { //--- 获取位置标识符,以便进一步操作 ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- 以毫秒为单位获取自 1970 年 1 月 1 日以来位置形成的时间 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- 以秒为单位获取自 1970 年 1 月 1 日以来最后一次位置变化的时间 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- 以毫秒为单位获取自 1970 年 1 月 1 日以来最后一次位置变化的时间 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
使用 PositionSelect() 函数选择一个位置,然后使用PositionGetInteger() 函数和 mql5 标识符POSITION_IDENTIFIER 获取其标识符 。
示例来自帮助:
谢谢,tol64!原则上,你是对的。
尽管我提供了位置标识符 的参考,但第一个问题还是太简短了,对此我深表歉意。
问题是这样的。在开仓后,有必要在CDealInfo 类的帮助下,使用方法 ::PositionId() 在交易历史中捕捉这次开仓。最好是在开仓时刻和 历史记录中出现 DEAL_ENTRY_IN 或DEAL_ENTRY_INOUT 类型交易的时刻 之间的时间间隔最小 。
谢谢你,tol64!原则上,真理是属于你的。
我对第一个问题的简短表示歉意......尽管我给出了立场 ID 的链接。
问题是这样的。建仓后,有必要使用CDealInfo 类的 ::PositionId() 方法在交易历史中捕捉建仓。开仓时刻与 历史记录中出现 DEAL_ENTRY_IN 或DEAL_ENTRY_INOUT 类型的交易时刻 之间的时间差最好最小。
在我看来,在OnTrade() 中跟踪事件(如上面的示例)非常适合。但我认为,突然无法通过交易事件选择仓位,而且下一个仓位也不会很快出现。那么就需要通过计时器来跟踪环境。现在甚至可以设置毫秒。
那么,或者不跟踪未结头寸,而是扫描历史交易(交易次数)。我们会记住之前的交易,并将其与当前的交易进行比较。您也可以在计时器中这样做。有很多变体。这完全取决于具体任务。
阿纳托利,我在这里遇到了一个问题。请分享您的经验。要么是使用函数时出现了错误,要么是我 "走错了路"。但我认为我做的一切都是正确的....。
我有一个关于函数变体的问题,其中第二个变体不 "工作"。
例如
1)
double HistoryOrderGetDouble( ulong ticket_number, // 机票 ENUM_ORDER_PROPERTY_DOUBLE property_id // 属性标识符 );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // 机票 ENUM_ORDER_PROPERTY_DOUBLE property_id, // 属性标识符 double& double_var // 在这里,我们获取属性的值 );
我附上了源代码。
阿纳托利,我在这里遇到了一个问题。请分享您的经验。要么是使用函数时出现了错误,要么是我 "走错了路"。但我认为我做的一切都是正确的....。
问题是关于函数变体,其中第二个变体不 "工作"。
...
你在日志中看到了什么?我在运行脚本时没有看到任何问题。
我看到在脚本的默认设置下,有一个类似 "Failure to returnHistoryOrderGetDouble() function"(返回HistoryOrderGetDouble() 函数 失败)的条目。
也就是说,布尔版本的函数无法获取属性值。
新文章 MQL5 Cookbook: 交易历史和取得仓位信息的函数库已发布:
现在是时候简单总结一下之前关于仓位属性文章的内容了,在本文中,我们会额外创建几个函数来取得只能通过访问交易历史才能获得的属性,我们也会对数据结构更加熟悉,这使我们可以用更加方便的方法访问仓位和交易品种属性。
作者:Anatoli Kazharski