Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2443

 
Vitaly Muzichenko #:

Спасибо! Успел только глазами моргнуть :)

Однако… За 48 минут успел моргнуть только один раз?


Aleksandr Slavskii #:

Обычно это очень быстро.

А почему и зачем цикл в цикле? Разве это ускорит работу?

 
Alexey Viktorov #:
зачем цикл в цикле?
На одном тике закрыть все с проверкой, что ничего не осталось. 
Хотя.... 
 
Alexey Viktorov #:

Однако… За 48 минут успел моргнуть только один раз?

Не понял.

Alexey Viktorov #:

А почему и зачем цикл в цикле? Разве это ускорит работу?

Бывает, что не закрывает все позиции за раз, особенно если их штук 500 и они на каких нибудь экзотических инструментах с низкой ликвидностью. Поэтому цикл в цикле.

Решение не айс, так как если пинг большой, этот скрипт задолбит сервер запросами. Но зато закроет всё наверняка)

 
Artyom Trishkin #:
На одном тике закрыть все с проверкой, что ничего не осталось. 
Хотя.... 

Ну да… Мозгами пошевелил и понял. Внешний цикл while может отработать только один раз. Решение интересное…

Но возникает вопрос: При асинхронном исполнении не может ли получиться, что позиция поставлена в очередь, а по завершении цикла for не зарегистрировано закрытие и будет повторная попытка закрыть? Конечно это не смертельно, ну получили ошибку и флаг ей … Но ведь валидатор не пропустит с ошибкой.

 
Aleksandr Slavskii #:

этот скрипт задолбит сервер запросами.

Проверил.

#include <Trade\Trade.mqh>
CTrade         m_trade;
//+------------------------------------------------------------------+
void OnStart()
  {
   int count = 0;
   m_trade.SetAsyncMode(true);
   ulong start = GetMicrosecondCount();

   while(PositionsTotal() > 0 && !IsStopped())
      for(int i = PositionsTotal() - 1; i >= 0; i--)
        {
         m_trade.PositionClose(PositionGetTicket(i));
         count++;
        }

   Print(GetMicrosecondCount() - start);//341393
   Print(count);//128
// ping 227
  }
//+------------------------------------------------------------------+

Выбрал сервер с пингом больше 200 мс. 

Скрипт закрыл 8 позиций за 341 мс, при этом стучался на сервер 128 раз.

Я хз насколько это критично.

Кто знает, расскажите. Критично или нет.

 
Aleksandr Slavskii #:

Проверил.

Выбрал сервер с пингом больше 200 мс. 

Скрипт закрыл 8 позиций за 341 мс, при этом стучался на сервер 128 раз.

Я хз насколько это критично.

Кто знает, расскажите. Критично или нет.

Может тогда убрать while и поставить флаг?

 
Vitaly Muzichenko #:

Может тогда убрать while и поставить флаг?

Можно и убрать, но практика показывает, что в этом случае некоторые позиции могу закрываться довольно таки долго.

В зависимости от пинга закрытие может растянуться до нескольких секунд. Правда это касается совсем запредельных пингов больше 400мс.

 
Господа приветствую. Подскажите, пожалста: если в число элементов для iHighest попадется две свечки с одинаковыми максимальными значениями, то вернет индекс правой или левой из них? 
 
Andrei Sokolov #:
Господа приветствую. Подскажите, пожалста: если в число элементов для iHighest попадется две свечки с одинаковыми максимальными значениями, то вернет индекс правой или левой из них? 

Ну так вручную посчитайте. Это гораздо быстрей, чем ждать пока посчитает кто-то…

 
Alexey Viktorov #:

Ну так вручную посчитайте. Это гораздо быстрей, чем ждать пока посчитает кто-то…


Я, конешн, могу написать по находящее два максимума, прогнать и найти такое (если оно вообще найдется). Но отвечать об этом нет смысла, я это и сам знаю.

Отвечу почему я спросил а не стал выяснять сам, раз такого требует ситуация - у меня ограничен временной ресурс, по этому решил поинтересоваться, может кто знает.