在MQL5语言中,为了获得开仓的当前TP (套期保值模式),我使用
if (PositionSelectByTicket(positionId)) {
return PositionGetDouble(POSITION_TP);
}
一旦该职位关闭,我将搜索相应的ENTRY_IN交易,并查询TP的相应订单:
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?
发布于 2022-01-04 21:43:10
通过MQL5论坛,我从@fxsaber获得了以下建议: DEAL_TP属性DEAL_ENTRY_OUT deal包含最后一个TP集。那确实有效!
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);
}
}
https://stackoverflow.com/questions/70557487
复制相似问题