Там разные слипы. Те которые в цикле, это... ну в общем ситуация такая: когда но дилинг деск или на спокойном рынке, то с первых попыток ордер закрывается. Когда сидит девочка, то ей нужно десять раз повторить, да ещё дождаться когда она губки накрасит. А бывает ещё сервер тормозит. Это всё для "реальных ДЦ".
Слипы после PlaySound, это что бы другие звуки не затеняли, PlaySound прерывает звучание предыдущего.
Глобальные переменные умеючи весят терминал. Да и нет необходимости, внешний алгоритм должен нормально отрабатывать не закрытые ордера.
RefreshRates там неного для другого. Так я пытался бороться с ситуациями, когда OrderClose возвращает false, а ордер таки реально закрывается. Вот после паузы и RefreshRates идет OrderSelect(). Как там оно внутри я не знаю, но вроде работает.
Ask и Bid это вообще чудо в перьях, их ещё нормализовать иногда нужно :)
---
Про десять повторов и зачем в глобальные переменные это я не понял. Их десять, с запасом. В extern что ли?
Просто снижает количество сбоев в несколько раз. Конечно не все ситуации именно в этом блоке отрабатываются. Если ордер закрывается минуту, программа должна ожидать всё это время. Вот эти ожидания, даже оборванные, цикл задерживают и в итоге всё получается как надо.
---
> Дык чтобы избежать магических чисел и легко настраивать.
Настраивать эту десятку? Да она с таким запасом, что проще ДЦ поменять :) А ради мегалота, если уж так пришлось, можно и в коде поправить.
//+------------------------------------------------------------------+//функция подсчета открытых ордеров по типу и маджику//tip - тип ордера БАЙ или СЕЛЛ, imagic - маджик номер//возвращает кол-во открытых оредров//+------------------------------------------------------------------+int CountTrades(int tip, int imagic) {
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
if (!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
count ++;
}
return (count);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//поиск последней цены//tip - тип ордера БАЙ или СЕЛЛ, imagic - маджик номер//возвращает цену открытия последнего открытого ордера//+------------------------------------------------------------------+double FindLastPrice(int tip, int imagic) {
int ticket=FindLastOpenTime(tip, imagic);
if (ticket==-1) return(-1);
OrderSelect(ticket, SELECT_BY_TICKET);
double order_price = OrderOpenPrice();
return (order_price);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//поиск последнего лота//imagic - маджик номер//возвращает объем последнего открытого ордера//+------------------------------------------------------------------+double FindLastLot(int imagic) {
int ticket=FindLastOpenTime(-1, imagic);
if (ticket==-1) return(-1);
OrderSelect(ticket, SELECT_BY_TICKET);
double order_lot=OrderLots();
return (order_lot);
}
//+------------------------------------------------------------------+
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
А вот я из кучи кода достал:
Один вопрос -- зачем слипы? Ну и 10ку (кол-во повторов) вынести куда-нить в глобальные переменные.
А как вам такой вариант?
Там разные слипы. Те которые в цикле, это... ну в общем ситуация такая: когда но дилинг деск или на спокойном рынке, то с первых попыток ордер закрывается. Когда сидит девочка, то ей нужно десять раз повторить, да ещё дождаться когда она губки накрасит. А бывает ещё сервер тормозит. Это всё для "реальных ДЦ".
Слипы после PlaySound, это что бы другие звуки не затеняли, PlaySound прерывает звучание предыдущего.
Глобальные переменные умеючи весят терминал. Да и нет необходимости, внешний алгоритм должен нормально отрабатывать не закрытые ордера.
Глобальные переменные умеючи весят терминал.
А, еще забыл -- RefreshRates в начало цикла после захвата контекста, тогда не надо будет изгаляться с аском и бидом. Да и другими значениями тоже.
RefreshRates там неного для другого. Так я пытался бороться с ситуациями, когда OrderClose возвращает false, а ордер таки реально закрывается. Вот после паузы и RefreshRates идет OrderSelect(). Как там оно внутри я не знаю, но вроде работает.
Ask и Bid это вообще чудо в перьях, их ещё нормализовать иногда нужно :)
---
Про десять повторов и зачем в глобальные переменные это я не понял. Их десять, с запасом. В extern что ли?
А если ордер минуту закрываться будет? Такую ситуацию кодом не победишь. Это сбой связи терминала.
gip:
Про десять повторов и зачем в глобальные переменные это я не понял.
Просто снижает количество сбоев в несколько раз. Конечно не все ситуации именно в этом блоке отрабатываются. Если ордер закрывается минуту, программа должна ожидать всё это время. Вот эти ожидания, даже оборванные, цикл задерживают и в итоге всё получается как надо.
---
> Дык чтобы избежать магических чисел и легко настраивать.
Настраивать эту десятку? Да она с таким запасом, что проще ДЦ поменять :) А ради мегалота, если уж так пришлось, можно и в коде поправить.
Есть один советник. Надо его привести в приличный вид.
Это функции из него. Есть возможность все это привести в удобоваримывый видДобавил для упрощения работы две функции
Одна проверяет тип ордера, а вторая ищет последний открытый ордер
Часть переделанных авторских функций