首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Metatrader 5:如何获得收盘价的盈利水平?

Metatrader 5:如何获得收盘价的盈利水平?
EN

Stack Overflow用户
提问于 2022-01-02 15:59:44
回答 1查看 700关注 0票数 0

在MQL5语言中,为了获得开仓的当前TP (套期保值模式),我使用

代码语言:javascript
运行
复制
if (PositionSelectByTicket(positionId)) {
   return PositionGetDouble(POSITION_TP);
}

一旦该职位关闭,我将搜索相应的ENTRY_IN交易,并查询TP的相应订单:

代码语言:javascript
运行
复制
if (HistorySelectByPosition(positionId)) {
   for (int i = HistoryDealsTotal()-1; i >= 0; i--) {
      ulong dealId = HistoryDealGetTicket(i);
      if (HistoryDealGetInteger(dealId, DEAL_POSITION_ID) != positionId) continue;
      if ((ENUM_DEAL_ENTRY)HistoryDealGetInteger(dealId, DEAL_ENTRY) != DEAL_ENTRY_IN) continue;
      ulong orderId = HistoryDealGetInteger(dealId, DEAL_ORDER);
      if (HistoryOrderSelect(orderId)) {
         return HistoryOrderGetDouble(orderId, ORDER_TP);
      }
   }
}

但是,只有在打开职位时直接设置TP时,此操作才有效。如果稍后设置了TP,则此操作不起作用。我检查了与positionId相对应的所有交易和订单,但无法在任何地方找到TP。

什么是稳健的方法来获得一个封闭位置的TP?

EN

回答 1

Stack Overflow用户

发布于 2022-01-04 21:43:10

通过MQL5论坛,我从@fxsaber获得了以下建议: DEAL_TP属性DEAL_ENTRY_OUT deal包含最后一个TP集。那确实有效!

代码语言:javascript
运行
复制
if (HistorySelectByPosition(positionId)) {
   for (int i = HistoryDealsTotal()-1; i >= 0; i--) {
      ulong dealId = HistoryDealGetTicket(i);
      if (HistoryDealGetInteger(dealId, DEAL_POSITION_ID) != positionId) continue;
      if ((ENUM_DEAL_ENTRY)HistoryDealGetInteger(dealId, DEAL_ENTRY) != DEAL_ENTRY_OUT) continue;
      return HistoryDealGetDouble(dealId, DEAL_TP);
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70557487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档