Ошибки, баги, вопросы - страница 3717

 

lynxntech #:

сравниваем запрос и first_bar_time ?

Может запросто быть равен нулю при больших значениях MaxBars.

 
Добрый день!

Обращаюсь с просьбой помочь решить проблему скрипта OX при работе с MultiTester - библиотека для MetaTrader 5.
Библиотека установлена последней версии: www.mql5.com/ru/code/26132 

Необходимо загрузить сет 214-10000 HEX-449.set в робота F, который находится в тестере стратегий (но оптимизация не включена).
В него вручную загружен сет 214-10000 MFI-3218.set.

Скрипт OX сначала считывает сет 214-10000 HEX-449.set из папки в локальной песочнице при помощи процедуры FileLoad в строку Settings.
Распечатывает Settings для проверки правильности считывания (здесь все нормально, печатает размер Load: 3498).
Потом идет попытка загрузки в робота при помощи команды:
MTTESTER::SetSettings(Settings).

Вот эта команда и не работает, хотя и возвращает true. 
Но в параметрах робота F ничего не меняется, там по-прежнему вручную загруженный сет 214-10000 MFI-3218.set,
хотя картинка тестера дёргается (т.е. может идёт попытка загрузки, но неудачная).

Qwen-coder и DeepSeek дали несколько советов, но ни один не помог.
Замена SetSettings на SetSettings2 тоже не помогает.

Если кто-нибудь встречался с похожей ситуацией, помогите, пожалуйста.

С уважением, Александр.
Файлы:
 
fxsaber # :
В Учебнике такая фраза. Но у меня не возникает ошибки. Как понять, что бары не все получены из-за низкого MaxBars?

Данная часть документации относится к случаям использования параметра "count".


 
Alain Verleyen #:

Данная часть документации относится к случаям использования параметра "count".

К сожалению, это работает только на реальных символах. На пользовательских символах ошибка не возникает.

 
fxsaber # :

К сожалению, это работает только на реальных символах. На пользовательских символах ошибка не возникает.

Верно, возвращается только одна полоска, последняя.

Я сообщу об этом как об ошибке.

 
fxsaber #:

К сожалению, это работает только на реальных символах.

Столкнулся с ситуациями, когда не работает это условие.
bool IsFullAccess( const string Symb = NULL )
{
  MqlRates Rates[1];
  
  bool Res = false;
/*
  if (!SymbolInfoInteger(Symb, SYMBOL_CUSTOM))
    Res = (CopyRates(Symb, PERIOD_M1, D'1970.01.01', 1, Rates) != -1);    
  else
*/  
  if (CopyRates(_Symbol, PERIOD_MN1, D'1970.01.01', 1, Rates) > 0)
  {
    MqlRates Rates2[1];
    
    Res = (CopyRates(_Symbol, PERIOD_M1, D'1970.01.01', 1, Rates2) > 0) &&
          (Rates[0].time == GetMonth(Rates2[0].time)) && (Rates[0].open == Rates2[0].open);  
  }
  
  return(Res);
}

Ставил ограничение на 6000 баров и перезагружал терминал.

 
fxsaber # :
Столкнулся с ситуациями, когда не работает это условие.

Ставил ограничение на 6000 баров и перезагружал терминал.

Сложно понять, чего вы пытаетесь добиться?

(Этот код не компилируется).

 
Alain Verleyen #:

Сложно понять, чего вы пытаетесь добиться?

Узнать, смогу ли через CopyRates получить все исторические бары.

(Этот код не компилируется).

Забыл добавить.

datetime GetMonth( const datetime time )
{
  MqlDateTime sTime;
  
  TimeToStruct(time, sTime);
  
  const MqlDateTime sTime2 = {sTime.year, sTime.mon, 1};
  
  return(StructToTime(sTime2));
}
 
Обнаружил странное поведение при использовании iCustom в эксперте, которое больше похоже на баг, а не на фичу. Причем супер баг! Так как ведет к неконтроллируемуму размножению индикатора, и как следствие неконтролируемой утечки памяти и CPU ресурсов. 
Для воспроизведения скачиваем прилагаемый индикатор и эксперт. Запускаем эксперт и начинаем переключать таймфреймы в окне. Видно что для каждого старого предыдущего тайфрейма будет жить и работать свой индикатор, который никак не обнаруживается кроме как через пользовательские прерывания и принтовку из самого индикатора. 

2026.02.26 15:22:23.796 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:23.796 Test_Ind (EURUSD,M12)   Size = 847966
2026.02.26 15:22:23.797 Test_Ind (EURUSD,M12)   From Ind: Current TF = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:23.797 Test_Ind (EURUSD,M15)   Size = 680072
2026.02.26 15:22:23.797 Test_Ind (EURUSD,M15)   From Ind: Current TF = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:23.797 Test_Ind (EURUSD,H1)    Size = 175718
2026.02.26 15:22:23.797 Test_Ind (EURUSD,H1)    From Ind: Current TF = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:23.797 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:23.809 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:23.811 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:25.691 Test_Ind (EURUSD,M1)    Size = 9838775
2026.02.26 15:22:25.691 Test_Ind (EURUSD,M1)    From Ind: Current TF = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:25.692 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:25.693 Test_Ind (EURUSD,M4)    Size = 2519904
2026.02.26 15:22:25.693 Test_Ind (EURUSD,M4)    From Ind: Current TF = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:25.694 Test_Ind (EURUSD,M10)   Size = 1015776
2026.02.26 15:22:25.694 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:25.694 Test_Ind (EURUSD,M10)   From Ind: Current TF = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:25.695 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:25.695 Test_Ind (EURUSD,M12)   Size = 847966
2026.02.26 15:22:25.695 Test_Ind (EURUSD,M12)   From Ind: Current TF = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:25.695 Test_Ind (EURUSD,M15)   Size = 680072
2026.02.26 15:22:25.695 Test_Ind (EURUSD,M15)   From Ind: Current TF = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:25.695 Test_Ind (EURUSD,H1)    Size = 175718
2026.02.26 15:22:25.696 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:25.696 Test_Ind (EURUSD,H1)    From Ind: Current TF = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:25.707 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:25.708 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:25.891 Test_Ind (EURUSD,M1)    Size = 9838775
2026.02.26 15:22:25.892 Test_Ind (EURUSD,M1)    From Ind: Current TF = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:25.892 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:25.893 Test_Ind (EURUSD,M4)    Size = 2519904
2026.02.26 15:22:25.911 Test_Ind (EURUSD,M4)    From Ind: Current TF = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:25.912 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:25.912 Test_Ind (EURUSD,M10)   Size = 1015776
2026.02.26 15:22:25.920 Test_Ind (EURUSD,M10)   From Ind: Current TF = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:25.920 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:25.921 Test_Ind (EURUSD,M12)   Size = 847966
2026.02.26 15:22:25.921 Test_Ind (EURUSD,M12)   From Ind: Current TF = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:25.922 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:25.922 Test_Ind (EURUSD,M15)   Size = 680072
2026.02.26 15:22:25.923 Test_Ind (EURUSD,M15)   From Ind: Current TF = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:25.923 Test_Ind (EURUSD,H1)    Size = 175718
2026.02.26 15:22:25.924 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:25.924 Test_Ind (EURUSD,H1)    From Ind: Current TF = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:25.934 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:26.393 Test_Ind (EURUSD,M1)    Size = 9838775
2026.02.26 15:22:26.394 Test_Ind (EURUSD,M1)    From Ind: Current TF = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:26.394 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:26.396 Test_Ind (EURUSD,M4)    Size = 2519904
2026.02.26 15:22:26.399 Test_Ind (EURUSD,M4)    From Ind: Current TF = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:26.400 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:26.400 Test_Ind (EURUSD,M10)   Size = 1015776
2026.02.26 15:22:26.400 Test_Ind (EURUSD,M10)   From Ind: Current TF = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:26.401 Test_Ind (EURUSD,M12)   Size = 847966
2026.02.26 15:22:26.401 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:26.401 Test_Ind (EURUSD,M12)   From Ind: Current TF = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:26.402 Test_Ind (EURUSD,M15)   Size = 680072
2026.02.26 15:22:26.402 Test_Ind (EURUSD,M15)   From Ind: Current TF = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:26.402 Test_Ind (EURUSD,H1)    Size = 175718
2026.02.26 15:22:26.402 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:26.402 Test_Ind (EURUSD,H1)    From Ind: Current TF = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:26.415 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:26.415 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:27.396 Test_Ind (EURUSD,M1)    Size = 9838775
2026.02.26 15:22:27.397 Test_Ind (EURUSD,M1)    From Ind: Current TF = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:27.398 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M1,  Total indicators = 0
2026.02.26 15:22:27.399 Test_Ind (EURUSD,M4)    Size = 2519904
2026.02.26 15:22:27.399 Test_Ind (EURUSD,M4)    From Ind: Current TF = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:27.400 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M4,  Total indicators = 0
2026.02.26 15:22:27.400 Test_Ind (EURUSD,M10)   Size = 1015776
2026.02.26 15:22:27.401 Test_Ind (EURUSD,M10)   From Ind: Current TF = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:27.402 Test_Ind (EURUSD,M12)   Size = 847966
2026.02.26 15:22:27.402 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M10,  Total indicators = 0
2026.02.26 15:22:27.403 Test_Ind (EURUSD,M12)   From Ind: Current TF = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:27.403 Test_Ind (EURUSD,M15)   Size = 680072
2026.02.26 15:22:27.403 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M12,  Total indicators = 0
2026.02.26 15:22:27.404 Test_Ind (EURUSD,M15)   From Ind: Current TF = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:27.404 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_M15,  Total indicators = 0
2026.02.26 15:22:27.404 Test_Ind (EURUSD,H1)    Size = 175718
2026.02.26 15:22:27.404 Test_Ind (EURUSD,H1)    From Ind: Current TF = PERIOD_H1,  Total indicators = 0
2026.02.26 15:22:27.415 Test_Exp (EURUSD,H1)    From Exp: Current TF = PERIOD_H1, TF(ind) = PERIOD_H1,  Total indicators = 0

Да, это лечится с помощью IndicatorRelease(handle); в OnDeinit эксперта. Но это не очевидно и нигде не написано в документации. Уверен что подавляющее большинство использует iCustom в своих экспертах без IndicatorRelease, что ведет к постоянной утечке ресурсов при переключении таймфреймов.

ЗЫ На выходных на закрытом рынке не сможете это воспроизвести

Файлы:
Test_Exp.mq5  3 kb
Test_Ind.mq5  3 kb
 
Nikolai Semko #:
Обнаружил странное поведение при использовании iCustom в эксперте, которое больше похоже на баг, а не на фичу. Причем супер баг! Так как ведет к неконтроллируемуму размножению индикатора, и как следствие неконтролируемой утечки памяти и CPU ресурсов. 
Для воспроизведения скачиваем прилагаемый индикатор и эксперт. Запускаем эксперт и начинаем переключать таймфреймы в окне. Видно что для каждого старого предыдущего тайфрейма будет жить и работать свой индикатор, который никак не обнаруживается кроме как через пользовательские прерывания и принтовку из самого индикатора. 

Да, это лечится с помощью IndicatorRelease(handle); в OnDeinit эксперта. Но это не очевидно и нигде не написано в документации. Уверен что подавляющее большинство использует iCustom в своих экспертах без IndicatorRelease, что ведет к постоянной утечке ресурсов при переключении таймфреймов.

ЗЫ На выходных на закрытом рынке не сможете это воспроизвести

В индикаторах при использовании iCustom всегда в OnDeinit прописываю IndicatorRelease - это как-бы обязательно, потому что меняем таймфреймы.

В советнике не использую, так как советник не предполагает постоянное переключение таймфреймов - раз запустил и забыл.

Если не использовать IndicatorRelease, то индикатор iCustom держится в памяти если к нему не обращались, вроде 7 минут (не точно), потом выгружается.

Как баг, Я бы это не назвал, скорее недоработка со стороны программиста.