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

 
joo:
Не воспроизводится видео в постах форума. на месте видео пустое место. перепробовал много браузеров. устройство - Lenovo K900. 
На сайте ютюба видео играется нормально. и на других сайтах ютюбовское видео воспроизводится.... 
Проверим.
 
Renat:
А установленную в Windows 8.1 программу вы как запускаете? Через /portable?
Нет. Запускаю обычно, без /portable. Мало того, чтобы удостоверится я два раза устанавливал и удалял МТ5. После деисталла вручную еще удалял папки в AppData.
 

Если работать в Windows 8.1 с правами обычного пользователя - то терминал MT5 не запоминает введенные номера счетов. Так-же MetaEditor не сохраняет состояние MQL5 Storage. Лечиться все, только если работать под учётной записью администратора или если в свойствах файлов metaeditor64.exe и terminal64.exe выставить «Выполнять эту программу от имени администратора». 

 

Но в таком случае, при работе из-под учетной записи обычного пользователя приходится вводить пароль администратора – правильно ли это, если рассматривать вопросы безопасности?

P.S. терминал самый последний - но проблема не нова. 


 

Добрый день.

У меня довольно ресурсоемкий индикатор (который высчитывается из 7+ массивов), загружается он нормально только «через раз» в терминале, не знаю по какой причине. Ошибок нет в нем, это уже с самим терминалом MT5 что-то...

Хотелось бы протестировать его в тестере, но в тестере он постоянно выдает ошибку: скриншот прикрепил.

 

Подскажите, есть ли ли возможность обработать ошибку до старта тестера и принудительно перезагружать индикатор в тестере если она появляется? 

 

 
M1k3:

Добрый день.

У меня довольно ресурсоемкий индикатор (который высчитывается из 7+ массивов), загружается он нормально только «через раз» в терминале, не знаю по какой причине. Ошибок нет в нем, это уже с самим терминалом MT5 что-то...

Хотелось бы протестировать его в тестере, но в тестере он постоянно выдает ошибку: скриншот прикрепил.

 

Подскажите, есть ли ли возможность обработать ошибку до старта тестера и принудительно перезагружать индикатор в тестере если она появляется? 

 .

Ошибка у Вас в коде, а не в терминале. Даже есть подсказка, где искать ошибку: строка 302, позиция 49. Ошибка эта - выход массива из своего диапазона. Т.е.,например, есть массив размерностью [4], а Вы пытаетесь получить значение [5].
 
barabashkakvn:
Ошибка у Вас в коде, а не в терминале. Даже есть подсказка, где искать ошибку: строка 302, позиция 49. Ошибка эта - выход массива из своего диапазона. Т.е.,например, есть массив размерностью [4], а Вы пытаетесь получить значение [5].

Я не могу ее поправить, массив заполняется котировками (100%) или значениями индикаторов. В терминале в определенный момент времени значение котировок или индикаторов X выдает NULL, а в другой момент - выдает нормальное значение (не на 0-м баре). Я не в курсе почему так происходит.

Значение NULL в тестере присутствует постоянно. Ошибка возникает, когда я пытаюсь умножать котировку или значение индикатора, но там NULL.

 
M1k3:

Я не могу ее поправить, массив заполняется котировками (100%) или значениями индикаторов. В терминале в определенный момент времени значение котировок X выдает NULL, а в другой момент - выдает нормальное значение (не на 0-м баре). Я не в курсе почему так происходит.

Значение NULL в тестере присутствует постоянно. Ошибка возникает, когда я пытаюсь умножать котировку или значение индикатора, но там NULL.

Используйте отладку кода или вставляйте операторы Print() в сомнительные участки кода. Таким образом поймёте где ошибка.
 
barabashkakvn:

Код который я привёл - это код из индикатора и из функции OnInit(). Соответственно OnInit() обрабатывается в момент запуска терминала - и этот код правильно отображает стоимость тика. Именно OnInit() , а не  init() - как у Вас. Если ошибка повторяется, то выкладывайте код и версию терминала. 

Ошибка в том, что Вы пытаетесь получать рыночную информацию (MarketInfo...) в OnInit() из индикатора. Индикатор не имеет торговых функций и, соответственно, при инициализации не ждет обновления информации о счете и о рыночной информации.

Для получения данных о рыночном окружении используйте OnInit() эксперта, а не индикатора.

Если же нужно использовать рыночную информацию в индикаторе, то следует вводить флаг (bool) и проверять корректность информации о счете (Account...) в функции OnCalculate() в случае первого запуска или в OnInit() в случае смены таймфрейма или настроек индикатора.

Не вводите людей в заблуждение. Вне зависимости от того, используется ли init() или OnInit() индикатора, терминал не гарантирует, что этот обработчик будет вызван тогда, когда уже произведен логин и стоимость тика известна. Так что в OnInit тоже легко получить ноль. Также нет никаких запретов на использование в индикаторах рыночной информации. Но в этом случае действительно приходится переносить инициализацию в расчетную часть индикатора и выполнять её на первых тиках.
 
marketeer:
Не вводите людей в заблуждение. Вне зависимости от того, используется ли init() или OnInit() индикатора, терминал не гарантирует, что этот обработчик будет вызван тогда, когда уже произведен логин и стоимость тика известна. Так что в OnInit тоже легко получить ноль. Также нет никаких запретов на использование в индикаторах рыночной информации. Но в этом случае действительно приходится переносить инициализацию в расчетную часть индикатора и выполнять её на первых тиках.

В индикаторе нет торговых функций. В советнике есть торговые функции. Поэтому в советнике, при обращении к рыночному окружению и/или к информации о счете, в OnInit() всё проходит корректно.

В подтверждение моих слов - вот простой советник у которого в OnInit() идёт обращение к торговому окружению и к информации о счете:

//+------------------------------------------------------------------+
//|                                                  test_expert.mq4 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- выведем всю информацию, доступную из функции AccountInfoDouble()
      printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
      printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
      printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
      printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
      printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
      printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
      printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
      printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
      printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
      //--- MarketInfo
      Print("Symbol=",Symbol());
      Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
      Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
      Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
      Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
      Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
      Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
      Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
      Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
      Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
      Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
      Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
      Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
      Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
      Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
      Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
      Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
      Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
      Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
      Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
      Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
      Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
      Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
      Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
      Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
      Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
      Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
      Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
      Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Файлы:
 
barabashkakvn:

В индикаторе нет торговых функций. В советнике есть торговые функции. Поэтому в советнике, при обращении к рыночному окружению и/или к информации о счете, в OnInit() всё проходит корректно.

В подтверждение моих слов - вот простой советник у которого в OnInit() идёт обращение к торговому окружению и к информации о счете:

Ну, вопрос то был изначально про индикатор. И Вы отвечали про OnInit индикатора. Эксперт - другое дело, там проблемы нет, но эксперт не может заменить индикатор.
Причина обращения: