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

 

Откуда в тестере функции SymbolsTotal() и SymbolName() берут информацию?, у меня не соответствие i-того символа в терминале и тестере.

Те если в терминале 3-тий номер  USDJPY то в тестере 3-тий EURGBP.

ЗЫ я просто делаю перебор символов MarketWatch и по порядковым номерам кодирую для передачи в советник.

 

Добрый день!

У меня вопрос по функции   IndicatorSetString, в которой  можно задавать краткое имя индикатора, ссылаясь на которое данный индикатор впоследствии можно будет удалить с графика.

На мой взгляд странная ситуация.

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

Первое, что пришло на ум, - различия в ПО, но, сравнив, понял, что все основное, идентично:

- коды экспертов и индикаторов;

- версия программы (Build 425);

- ОС (WinXP SP3);

- те же самые настройки (специально сравнил).

В целом проверка выглядит следующим образом:

1. На экран выводится несколько кнопок, к каждой из которых привязаны общее и краткое имя индикатора

2. При нажатии на кнопку соответствующий ей индикатор по общему имени появляется, а при отжатии – на основе краткого имени удаляется.

3. На офисном ПК удаление индикаторов происходит с первых же отжатий, в то время, как на домашнем, – лишь со вторых.

В чем тут может быть возможная причина?

Если схематично, исключая обычные для экспертов и индикаторов вещи, а также прочий функционал, который непосредственного отношения к указанному вопросу не имеет, то выглядит это примерно следующим образом:

1. В индикаторе My_Indicator:

   input double  Offset  = 0;
   int OnInit()  
   {  
      string NewNameIndicator = OldNameIndicator + Offset;
      IndicatorSetString (INDICATOR_SHORTNAME, NewNameIndicator);
   }

2. В эксперте:

   void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
   {  
        String ShortNameIndicator1;
        //---При нажатии            
        if (sparam==My_Button1.Name()){
            if(My_Button1.State()==true){
                Int handle = iCustom (_Symbol,_Period, "My_Indicator1 ", "FirstParameter");
                ChartIndicatorAdd(0,0,handle);
                ShortNameIndicator1 = ChartIndicatorName(0,0,ChartIndicatorsTotal(0,0)-1);
                 Alert (“State()=true, IndicatorName()=”,   ShortNameIndicator1);
             }
        }
         //---При отжатии
        if (sparam==My_Button1.Name()){
           if(My_Button1.State()==false){
                  Alert (“State()=false, IndicatorName()=”,   ShortNameIndicator1);
                  ChartIndicatorDelete(0,0,ShortNameIndicator1);  
           }
        }
    }

В результате:

На офисном ПК  IndicatorName выводится как новое имя с первого же прохода, в то время, как на домашнем лишь со второго.

На офисном ПК индикатор удаляется после первого же отжатия, а на домашнем – после второго.

При этом после первого нажатия и отжатия на домашнем ПК выводится исходное имя индикатора (My_Indicator без добавления к имени входного параметра), хотя код эксперта и индикатора, повторяю, используется в обоих случаях один и тот же.

 

 Цитирую здесь свое сообщение в сервисдеск


Версия и битность терминала



MetaEditor 5.00 build 425. Windows 7 ultimate, build 7600.

Описание проблемы

При создании файла скрипта с кодом

void OnStart()
{
}


попытка компиляции приводит к ошибке internal error #108

после скачивания последней версии терминала и переустановки в ту же папку ошибка сменилась на internal error #-3 

Последовательность действий
Не знаю, связано ли это с ошибкой, но она стала появляться непосредственно после обновления файлов справки по MQL5 с помощью соответствующей автоматической процедуры MetaEditor.

Ожидаемый результат


нормальная компиляция скрипта))


 

 

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

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

  • наличие файла с бессмысленным именем и расширением .dat в папке c:\Windows\AppPatch. В заголовке файла видно, что он исполняемый, исходное имя - dd.exe, поля "название продукта" и "копирайт" - бессмысленные наборы заглавных букв.
  • наличие измененной записи Userinit в ключе реестра HKLM\Software\Microsoft\Windows NT\Winlogon, в которой прописался путь к вышеуказанному файлу. При удалении записи последняя имеет свойство незаметно восстанавливаться, если вирус находится в памяти.
  • периодический запуск нескольких копий процессов conhost.exe и route.exe, а также иногда netsh.exe 
  • глюки с MetaEditor 5))) - редактор от Metaquotes в дополнение ко всем своим функциям оказался еще и неплохим детектором вредоносного ПО)

Вычистил все в безопасном режиме. 

Да, была еще покоцана локальная учетная запись Webmoney, но идентификационные данные вроде не уплыли)))

Рекомендую всем провериться вручную. 

 
Urain:

Откуда в тестере функции SymbolsTotal() и SymbolName() берут информацию?, у меня не соответствие i-того символа в терминале и тестере.

Те если в терминале 3-тий номер  USDJPY то в тестере 3-тий EURGBP.

ЗЫ я просто делаю перебор символов MarketWatch и по порядковым номерам кодирую для передачи в советник.

На порядок следования символов в маркетвотче никак нельзя закладываться, так как он может быть любой по определению.
 

Файлы:
Test_X.mq5  1 kb
MyMQL4.mqh  5 kb
 
EvgeTrofi:

что это?

похоже идентификатор enum ENUM_TYPE_MARKET_INFO, в числовом виде. 

у меня тоже самое. отпишите в СД.

 
Renat:
На порядок следования символов в маркетвотче никак нельзя закладываться, так как он может быть любой по определению.

Дело не в порядке символов и не в их количестве, а в том что этот порядок и количество в одно и тоже время различны в терминале и тестере.

В общем я проблему решил через передачу списка символов в тестер через файл. Хотя искренне считаю что это косяк.

 
Urain:

Дело не в порядке символов и не в их количестве, а в том что этот порядок и количество в одно и тоже время различны в терминале и тестере.

В общем я проблему решил через передачу набора символов в тестер через файл. Хотя искренне считаю что это косяк.

Я не очень понял проблему...

А если пользователь поменяет очерёдность символов в маркетвотч во время работы - это то же будет косяком?

 
AlexSTAL:

Я не очень понял проблему...

А если пользователь поменяет очерёдность символов в маркетвотч во время работы - это то же будет косяком?

Во время работы тестера? врядли, после старта тестера он работает автономно, но в режиме предстартовых настроек ожидается что символы должны соответствовать (те между тестированиями советников, например при смене советника или при смене инструмента или периода, да любое изменение настроек тестера имхо должно приводить к соответствию символов).
 
Urain:

Дело не в порядке символов и не в их количестве, а в том что этот порядок и количество в одно и тоже время различны в терминале и тестере.

В общем я проблему решил через передачу списка символов в тестер через файл. Хотя искренне считаю что это косяк.

База символов (маркет вотч) асинхронно и в произвольном порядке апдейтится с сервера. Нельзя на его порядок закладываться ни в коем случае.

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

Используйте имена символов в параметрах - это более защищенный вариант.

Причина обращения: