Функция mql4: закрылся ли предыдущий ордер по тейк-профиту?
Функция возвращает: если true — по тейку, false — еще как-то. Нажмите лайк и функция откроется.[sociallocker]
bool isCloseLastPosByTake(string sy="", int op=-1, int magic=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (OrderMagicNumber() == magic || OrderMagicNumber() == -1) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
[/sociallocker]
Входные данные:
Sy- символ;
op — тип ордера OP_BUY или OP_SELL (-1 — любой тип);
magic — если -1 ордер с любым магиком или вообще без магика (ручной ордер).
Вот и все. Приятных вам функций!
Почему не публикуете сообщения, нахрена тогда добавлять комментарии тратить свое время, если функции кривые или не полностью описано как их прикручивать, как в этом разбираться, если вы коменты удаляете.
drivermql Reply:
29 декабря, 2021 at 20:57
инициализируете t нулём. Это легко делается.
Функция не работает.
‘isCloseLastPosByTake’ — function declarations are allowed on global, namespace or class scope only
possible use of uninitialized variable ‘t’
possible loss of data due to type conversion
expression not boolean
expression not boolean
1 errors, 4 warnings
drivermql Reply:
29 декабря, 2021 at 20:56
переведите гуглом и поймете. Дело не в функции, а в том, как Вы ее используете