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

 

В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.

Видимо, вычисление потребляемой памяти зависит от ОС.

 
fxsaber:

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

Здесь делал определение наличия себя же. Вроде, работало при переключении ТФ.

Я особо не вникал, но судя по этим строкам:

    const int Total = ::IndicatorParameters(handle, Type, Params);
    ::IndicatorRelease(handle);

    uchar Bytes[];

    for (int i = 1; i < Total; i++)
    {
      ::ArrayCopy(Bytes, _R(Params[i].double_value).Bytes, ::ArraySize(Bytes));
      ::ArrayCopy(Bytes, _R(Params[i].integer_value).Bytes, ::ArraySize(Bytes));
      ::ArrayCopy(Bytes, _R(Params[i].string_value).Bytes, ::ArraySize(Bytes));
    }

имя индикатора (в 0-м параметре) в создании сигнатуры не используется, что довольно странно.

 
fxsaber:

В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.

Видимо, вычисление потребляемой памяти зависит от ОС.

Скорее резервирование памяти на сервячных осях более оптимальное.
 
Stanislav Korotky:

Я особо не вникал, но судя по этим строкам:

имя индикатора (в 0-м параметре) в создании сигнатуры не используется, что довольно странно.

return("::" + (string)::ChartID() + (string)INIT_SYNC::crc64(Bytes) + ::MQLInfoString(MQL_PROGRAM_NAME));
 
fxsaber:

Да, сталкивался. Validate запускает первый проход, следующие - нет. Кнопка Старт не запускается.

Дебажил - запускается. Делал распринтовку в релизе, все якобы хорошо, а не работает.


Сейчас специально запускаю дебаг-версию. Она нажимает на кнопку Старт без помех.

Причину бага так и не смог выяснить.

Хех недавно увидел эот ответ.

Как я понял это у меня локальные агенты не стартуют, почему не понял. В последних версиях терминала стало лучше вроде стартовать.

 
fxsaber:

В 10-ке потребление памяти Терминалом показывается большим. А на Windows Server - много меньше.

Видимо, вычисление потребляемой памяти зависит от ОС.

Ощущение что на виндовс сервер как то не совсем правильно определяет.

Или точнее постоянно сбрасываются настройки графиков, а это зависит от нехватки оперативной памяти. При этом по диспетчеру вроде как всё норм. Или впс ограничивается или мт5 прожорливее.

 
Print(PERIOD_H4);

даёт результат 16388. Как проделать обратную процедуру: подставить значение 16388 и в результате получить строку с названием периода PERIOD_H4? Есть ли встроенная функция или надо писать свой конвертер? Если нет встроенной, как примерно могла бы выглядеть кастомная функция? Возможно, придётся писать что-то типа соответствия "ключ — значение"?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

даёт результат 16388. Как проделать обратную процедуру: подставить значение 16388 и в результате получить строку с названием периода PERIOD_H4? Есть ли встроенная функция или надо писать свой конвертер? Если нет встроенной, как примерно могла бы выглядеть кастомная функция? Возможно, придётся писать что-то типа соответствия "ключ — значение"?

Print(EnumToString((ENUM_TIMEFRAMES)16388));
 
fxsaber
Print(EnumToString((ENUM_TIMEFRAMES)16388));

 Оказывается, есть. Это радует. Благодарю!

 

 Пытаюсь предоставить пользователю возможность выбирать как таймфреймы, так и их количество из списка меню настроечного окна индикатора:

enum PERIOD
  {
   NO_PERIOD=0,      // NOT USED
   P1=PERIOD_H1,     // H1 
   P2=PERIOD_H2,     // H2 
   P3=PERIOD_H4,     // H4 
  };

input PERIOD TIMEFRAME_1=P1;
input PERIOD TIMEFRAME_2=P2;
input PERIOD TIMEFRAME_3=P3;

ENUM_TIMEFRAMES PArray[3]={P1,P2,P3};

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

implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      28
   'ENUM_TIMEFRAMES::PERIOD_H1' will be used instead of 'PERIOD::P1'    test.mq5        23      28
implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      31
   'ENUM_TIMEFRAMES::PERIOD_H2' will be used instead of 'PERIOD::P2'    test.mq5        23      31
implicit conversion from 'enum PERIOD' to 'enum ENUM_TIMEFRAMES'        test.mq5        23      34
   'ENUM_TIMEFRAMES::PERIOD_H4' will be used instead of 'PERIOD::P3'    test.mq5        23      34

 При попытке заменить последнюю строку на:

ENUM_TIMEFRAMES PArray[3]={TIMEFRAME_1,TIMEFRAME_2,TIMEFRAME_3};

компилятор вообще выдаёт ошибку:

'TIMEFRAME_1' - constant expression required    test.mq5        23      28
'TIMEFRAME_2' - constant expression required    test.mq5        23      40
'TIMEFRAME_3' - constant expression required    test.mq5        23      52

 Кроме того, NO_PERIOD=0 означает PERIOD_CURRENT, а мне это не нужно, мне нужно что-то типа false или EMPTY_VALUE, но они вообще не подходят.

 Как починить?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5