//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в пунктах |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
double p;
int i, k=OrdersTotal(), pr=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderTicket()== GetTicketMaxMinOrder(0) || OrderTicket()== GetTicketMaxMinOrder(1) ) {
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
if (OrderType()==OP_BUY) {
pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
}
if (OrderType()==OP_SELL) {
pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
}
}
}
}
}
}
return(pr);
}
你仍然需要在每个新的刻度上检查条件,如果它在前一个刻度上不起作用,在新的刻度上就会改变。
而且必须进行错误处理。
错别字?我认为这两个函数只能接受一个参数。
如果你通过一个数组来做,那么就只检查写到数组中的修改过的订单的刻度,而不是其他所有的。 差不多吧,是的,谢谢。在这种情况下,如果我们要保存到对象,我们最好有唯一的majicks而不是门票,
否则会有几十个同名的对象。
错别字?我 认为这两个函数只能接受一个参数。
他们不会的。
对不起
https://www.mql5.com/ru/docs/objects/objectname
这是针对MT5的
而这是针对MT4的
他们不会的。
对不起
顺便问一下,你是否碰巧知道为什么会周期性地出现以下错误?对于100个成功打开的订单,大约有10个这样的订单。
2021.10.10 16:18:09.853 2021.01.05 21:15:00 test EURUSD,M5: 4051 | order.sl_price: 2.813499706815862e-262 2021.10.10 16:18:09.853 2021.01.05 21:15:00 test EURUSD,M5: OrderSend error 4051 2021.10.10 16:18:09.853 2021.01.05 21:15:00 test EURUSD,M5: unknown trade cmd 406958564 for OrderSend functionorder.sl_price: 2.813499706815862e-262 - 止损价格,显然这个数字不应该是。
4051 - "函数参数的无效值"
- 这是订单类型吗?这也不应该是个问题。
你说的 "最小和最大 "是指门票还是价格?
按票价计算
顺便问一下,你是否碰巧知道为什么会周期性地出现以下错误?对于100个成功打开的订单,大约有10个这样的订单。
order.sl_price: 2.813499706815862e-262 - 停止价格,显然这个数字不应该是。
4051 - "函数参数的无效值"
- 这是订单类型吗?这方面也不应该有任何问题。
尝试移动 "NormalizeDouble"
按票价计算
尝试移动 "NormalizeDouble " 的位置
不变的是。
到目前为止,Makar在EA中插入了代码,只是为了比较货币的利润和点数的利润,据我所知,当这些函数的值为零时,就可以理解。