在交易过程中,有时需要查询某个持仓订单的当前浮动盈亏,或者一个已平仓订单的最终盈亏。通常有两种方式来获取这些盈利信息。若要得到以账户存款货币(例如美元)计价的盈利,可以使用 OrderProfit()
函数。但在此之前,必须先通过 OrderSelect()
函数选中目标订单。
// 示例:获取特定订单的盈利
OrderSelect(Ticket, SELECT_BY_TICKET); // Ticket 为订单号
double ProfitInCurrency = OrderProfit(); // 获取当前选中订单的盈利
OrderProfit()
函数返回的值,应当与您在交易终端“历史”标签页中看到的该订单的实际盈亏金额完全一致。
若想知道订单的盈亏点数(pips),则需要自行计算订单的开仓价与平仓价之间的差值。同样,这也需要先用 OrderSelect()
函数选中订单,以获取其开仓价和平仓价。
// 示例:计算特定订单的盈利点数
OrderSelect(Ticket, SELECT_BY_TICKET); // Ticket 为订单号
double ProfitInPips = 0.0;
if(OrderType() == OP_BUY) // 如果是买单
{
ProfitInPips = OrderClosePrice() - OrderOpenPrice();
}
else if(OrderType() == OP_SELL) // 如果是卖单
{
ProfitInPips = OrderOpenPrice() - OrderClosePrice();
}
// 将价格差转换为点数 (假设 PipPoint() 是一个自定义函数,用于获取当前品种一个标准点的价格小数位)
// 例如,对于 EURUSD,一个点是0.0001,PipPoint(Symbol()) 可能返回 0.0001
if (PipPoint(Symbol()) != 0) // 防止除零错误
{
ProfitInPips /= PipPoint(Symbol());
}
对于买入订单(OP_BUY
),盈利点数 = 平仓价格 – 开仓价格。对于卖出订单(OP_SELL
),计算方式相反,盈利点数 = 开仓价格 – 平仓价格。计算出价格差之后,我们再将其除以 PipPoint(Symbol())
函数返回的单点价值(例如,对于小数点后4位的货币对是0.0001,对于日元对是0.01),便可得到以整数点表示的盈亏。
举个例子:假设我们有一个买单,开仓价为 1.4650,平仓价为 1.4700。那么 OrderClosePrice() - OrderOpenPrice()
的差值为 0.0050。若 PipPoint(Symbol())
对于该品种返回 0.0001,则 0.0050 / 0.0001 = 50。这意味着该订单盈利了 50 点。反之,如果平仓价是 1.4600,那么差值为 -0.0050,即亏损 50 点。