MT5 и скорость в боевом исполнении - страница 91

 
Anton:

Тормоза ObjectGetInterger - норма?

 
fxsaber:

Тормоза ObjectGetInterger - норма?

Get методы уже синхронные, поэтому ждут. Работа с объектами идет через специальную очередь команд, а не через прямой доступ к объектам.

Для информации: очень не рекомендуется смешивать Set и Get методы. Лучше множественно записать и потом множественно прочитать. Или наоборот.

 
Renat Fatkhullin:

Get методы уже синхронные, поэтому ждут. Работа с объектами идет через специальную очередь команд, а не через прямой доступ к объектам.

Для информации: очень не рекомендуется смешивать Set и Get методы. Лучше множественно записать и потом множественно прочитать. Или наоборот.

С этим проблемы, к сожалению. Показал кодом выше.

Спасибо за пояснения.

 
Выкрутился в определенных ситуациях.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: TradesID

fxsaber, 2021.03.29 16:39

Результат запуска приложенного скрипта на реальном счете.

2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryDealsTotal() = 99663
2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryOrdersTotal() = 174307

2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

Библиотека быстрее штатной реализации в ~2500 раз. Только альтернативный подход позволяет делать некоторые вычисления за приемлемое время.


 

Чтобы завставить терминал отдать память, можно запустить такой скрипт

void OnStart()
  {
   short arr[];
   ArrayResize(arr,INT_MAX);
   ArrayInitialize(arr,0);
   Print(ArraySize(arr));
   Sleep(5000);
  }

Размер массива подбирайте под свой размер озу

 
Rorschach:

Чтобы завставить терминал отдать память, можно запустить такой скрипт

Размер массива подбирайте под свой размер озу

В чем идея?

 
fxsaber:

В чем идея?

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

 
traveller00:

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

Да, терминалу не хватает памяти и он начитает сбрасывать закешированные данные

 

Возникла нестандартная ситуация. Советник на основании сигнала индикатора делает скриншот и если фильтры пропускают, дает команду на открытие/закрытие позиций.
Скриншот в своем названии содержит время: день, час и секунду, например, CHFJPY_d29_h10_m24_s17. Время берется из функции TimeCurrent().

В терминале работало 28 экземпляров советника. В какой-то момент, на 44 минуты, терминал как будто завис и в 10:27 снова пошла нормальная работа. Вот часть лога самого терминала:


Обрывов связи не видно. Первая запись по EURUSD в 10:27 - в истории сделок - это закрытие по sl в 10:14.

Ниже часть лога из советника. Как видно, по верхним красным рамкам, время записи журнала и время TimeCurrent(), которое в названии скриншота - почти совпадают.
А в нижних рамках, разница уже в полчаса.


На символе CHFJPY, формирование одного скриншота с сигналом на открытие произошло - в 10:12, формирование второго скриншота с сигналом в 10:24. Но открытие/закрытие и новое открытие произошло в течение одной минуты в 10:27.

В общем, такие странности получились с 9:43 по 10:27 :
1) TimeCurrent() работает и получает актуальное время сервера, советник получает корректные сигналы от индикатора.
2) Записи журнала попали в лог только в 10:27. Скриншоты записались на жесткий диск в папку Files в 10:27, открытия новых ордеров (по устаревшим сигналам) произошли в 10:27.

Может кто-то сталкивался, в чем может быть причина таких зависаний или торможений? Подскажите, какими функциями отлавливать причину? Такая ситуация с апреля уже повторялась несколько раз.

 
Vasiliy Pushkaryov:

Подскажите, какими функциями отлавливать причину?

Мониторьте расхождение между TimeLocal и TimeCurrent.