Новая версия платформы MetaTrader 5 build 2530: Сортировка в Обзоре рынка и удобная работа с результатами оптимизации - страница 18

 
fxsaber:

Пара часов работы - очень хорошо. Соберу стату - дам знать.

HistorySelect

2020.07.21 02:27:22.093         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 10 ms.
2020.07.21 03:18:27.024         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 10 ms.
2020.07.21 04:00:24.402         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 8 ms.
2020.07.21 04:06:32.294         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 15 ms.
2020.07.21 04:07:21.444         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 5 ms.
2020.07.21 04:15:59.039         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 10 ms.
2020.07.21 04:35:52.319         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 23 ms.
2020.07.21 06:21:03.141         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 44 ms.
2020.07.21 07:17:33.126         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 9 ms.
2020.07.21 07:54:51.273         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 8 ms.
2020.07.21 08:16:07.718         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 22 ms.
2020.07.21 08:59:42.860         Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 16 ms.


SymbolInfoTick

2020.07.21 04:33:08.511 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.07.21 05:26:41.385 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 2 ms.
2020.07.21 06:19:09.272 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 26 ms.
2020.07.21 06:21:24.518 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 10 ms.
2020.07.21 06:58:12.508 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
 
Vladimir Karputov:

Удаляете в советнике или в эксперте? Удаляете на каждом тике или в OnDelete? Эти объекты нарисовала программа которая пытается удалить или Ваша программ пытается удалить чужие объекты? Удаление инициализируете при смене таймфрейма или когда выгружаете терминал из ОЗУ? Удаление инициализируете при удалении графика?

В общем опишите подробно, ЧТО, КТО, КАК и ГДЕ. 

Удаляю в советнике. Эти объекты нарисовала моя программа и  пытается удалить по окончании работы в OnDeinit
 
Aleksey Vyazmikin:

Как это понимать при оптимизации?

Почему индикаторы ищет в корне MQL5?

Предоставьте пожалуйста больше деталей:

  1. Версия терминала

  2. Код создания индикаторов.
    Интересует, как именно Вы задаёте путь к индикатору в iCustom и/или IndicatorCreate
 
IuriiPrugov:
Удаляю в советнике. Эти объекты нарисовала моя программа и  пытается удалить по окончании работы в OnDeinit

Причина OnDeinit: вырвали шнур компьютера из розетки, переключили таймфрейм (или сменили символ), вручную (или другой програмой) закрыли график на котором расположена Ваша программа???

Тип Вашей программы: ???

Сколько объектов стрелок создаёт Ваша программа? В настройках терминала сколько указано отображать баров? Объекты (стрелки) попадают в область слева графика за границу количество отображаемых баров?

Сколько времени между созданием объектов и началом удаления проходит?
Настройки платформы - Начало работы - Справка по MetaTrader 5
Настройки платформы - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая платформа обладает множеством настроек, что позволяет организовать работу в ней так, как это удобно именно вам. Выполните команду " Настройки" меню "Сервис" или нажмите "Ctrl+O". Графики — общая настройка отображения ценовых графиков, а также настройка параметров управления объектами: выделение объектов после их создания, немедленная...
 
IuriiPrugov:

ObjectsDeleteAll(0,"Arrow",0,OBJ_ARROW);

может удалить часть стрелок,может все,а может не удалить ни одну

а так?: ObjectsDeleteAll(0,"Arrow");

когда-то давно (1900е билды) был такой глюк. помогал вызов ObjectsTotal(0); перед ObjectsDeleteAll().

 
Ilyas:

Предоставьте пожалуйста больше деталей:

  1. Версия терминала

  2. Код создания индикаторов.
    Интересует, как именно Вы задаёте путь к индикатору в iCustom и/или IndicatorCreate

Билд 2530.

В советнике:

   static string zigzag="ZigZag_Channel";
   static int depth=5000;                             //Кол-во баров
   static int tf=PERIOD_CURRENT;                      //Таймфрейм
   static bool WriteInfo=false;                        //Записывать данные в конец инф. буферов
   static string BuferUpInd="donchian_channel_pMTF";  //Имя индикатора верхней границы канала
   static int upbuffer=0;                             //Номер буфера верхней границы канала
   static string paramsUp="i:47,i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
                                                      //   static string paramsUp="i:"+DonZZ_Period+",i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
   static string BuferDnInd="donchian_channel_pMTF";  //Имя индикатора нижней границы канала
   static int dnbuffer=1;                             //Номер буфера нижней границы канала
   static string paramsDn="i:47,i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
                                                      //   static string paramsDn="i:"+DonZZ_Period+",i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм

   handle_DonZZ=iCustom(_Symbol,_Period,zigzag,depth,tf,WriteInfo,BuferUpInd,upbuffer,paramsUp,BuferDnInd,dnbuffer,paramsDn);
   if(handle_DonZZ==INVALID_HANDLE)
     {
      PrintFormat("Failed to create handle of the handle_DonZZ indicator for the symbol %s/%s, error code %d",
                  Symbol(),EnumToString(Period()),GetLastError());
      return(INIT_FAILED);
     }

Из индикатора вызывается другой индикатор, указанный в настройках советника, в индикаторе:

bool CChannel::CreateChannel(void)
  {////!!!Print("Test_3");
   if(m_upch!=INVALID_HANDLE && m_dnch!=INVALID_HANDLE) return(true);
   if(m_upch==INVALID_HANDLE)
     {
      int handle=IndicatorCreate(_Symbol,InpChPeriod,IND_CUSTOM,ArraySize(m_upparam),m_upparam);
      if(handle!=INVALID_HANDLE)
        {
         if(!m_uptypes)
           {
            m_upch=GetTypeParam(handle,InpUpChParam,m_upparam);
            if(m_upch==INVALID_HANDLE)
               m_upch=IndicatorCreate(_Symbol,InpChPeriod,IND_CUSTOM,ArraySize(m_upparam),m_upparam);
            m_uptypes=true;
           }
         else m_upch=handle;
        }
      if(m_upch!=INVALID_HANDLE)
        {
         if(StringLen(InpUpChStrParam)==0) WriteTypeParam(m_upchname,m_upparam);
         if(m_compare) m_dnch=m_upch;
        }
     }
   if(m_dnch==INVALID_HANDLE && !m_compare)
     {
      int handle=IndicatorCreate(_Symbol,InpChPeriod,IND_CUSTOM,ArraySize(m_dnparam),m_dnparam);
      if(handle!=INVALID_HANDLE)
        {
         if(!m_dntypes)
           {
            m_dnch=GetTypeParam(handle,InpDnChParam,m_dnparam);
            if(m_dnch==INVALID_HANDLE)
               m_dnch=IndicatorCreate(_Symbol,InpChPeriod,IND_CUSTOM,ArraySize(m_dnparam),m_dnparam);
            m_dntypes=true;
           }
         else m_dnch=handle;
        }
      if(m_dnch!=INVALID_HANDLE && StringLen(InpDnChStrParam)==0) WriteTypeParam(m_dnchname,m_dnparam);
     }
   return(m_upch!=INVALID_HANDLE && m_dnch!=INVALID_HANDLE);
  }

Раньше всё работало корректно - сейчас не пойму, это ошибка неработоспособности или просто предупреждение?

Как решить проблему?

 
Aleksey Vyazmikin:

Билд 2530.

В советнике:

Из индикатора вызывается другой индикатор, указанный в настройках советника, в индикаторе:

Раньше всё работало корректно - сейчас не пойму, это ошибка неработоспособности или просто предупреждение?

Как решить проблему?

Представленных данных все равно недостаточно, поэтому проверьте сами как пишется имя инидкатора и соответствует ли оно новому алгоритму поиска индикатора в https://www.mql5.com/ru/forum/342947

Новая версия платформы MetaTrader 5 build 2485: улучшения в iCustom и общая оптимизация в MQL5
Новая версия платформы MetaTrader 5 build 2485: улучшения в iCustom и общая оптимизация в MQL5
  • 2020.06.05
  • www.mql5.com
В пятницу 5 июня 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Rashid Umarov:

Представленных данных все равно недостаточно, поэтому проверьте сами как пишется имя инидкатора и соответствует ли оно новому алгоритму поиска индикатора в https://www.mql5.com/ru/forum/342947

Могу сбросить индикатор в личку - сбросить?

Из ссылки, что дали:

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

Новая версия платформы MetaTrader 5 build 2485: улучшения в iCustom и общая оптимизация в MQL5

MetaQuotes, 2020.06.05 08:41


  1. MQL5: Изменен алгоритм загрузки пользовательских индикаторов с помощью iCustom.

    Если перед именем пользовательского индикатора указан обратный слеш '\', то EX5-файл индикатора ищется относительно корневой папки MQL5. Таким образом при вызове iCustom(Symbol(), Period(), "\FirstIndicator"...) индикатор будет загружаться как MQL5\FirstIndicator.ex5. Если по этому пути файла не окажется, вернется ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если же путь не начинается с '\', то поиск и загрузка индикатора производятся в следующей последовательности:

    • Сначала EX5-файл индикатора ищется в той же папке, где находится EX5-файл вызывающей программы. Например, советник CrossMA.EX5 находится в папке MQL5\Experts\MyExperts и содержит вызов iCustom(Symbol(), Period(), "SecondIndicator"...) – тогда поиск индикатора производится по пути MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Если индикатор не найден в том же каталоге, то поиск производится относительно корневой директории индикаторов MQL5\Indicators. То есть ищется файл MQL5\Indicators\SecondIndicator.ex5. Если индикатор не найден по обоим путям, то функция вернет INVALID_HANDLE и будет взведена ошибка 4802 (ERR_INDICATOR_CANNOT_CREATE).

    Если путь к индикатору задан в поддиректории, например как MyIndicators\ThirdIndicator, то сначала поиск ведется в папке вызывающей программы (советник находится в папке MQL5\Experts\MyExperts) по пути MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5, а затем в случае неуспеха ищется файл MQL5\Indicators\MyIndicators\ThirdIndicator.ex5. При этом разделителем в пути нужно обязательно указывать двойной обратный слеш '\\', например, iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...).

    Также при обнаружении в коде программы вызова пользовательского индикатора через iCustom, компилятор будет неявно добавлять директиву "#property tester_indicator XXX", если таковая отсутствует.

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

В индикаторе индикатор создается через IndicatorCreate .

Поэтому вопрос остается актуальным.

К тому же, я так и не понял, как понимать это сообщение в логе, как ошибку или как окончательное заключение, что индикатор не найден?

Кроме того, из советника напрямую не вызывается индикатор donchian_channel_pMTF, он вызывается из индикатора!

 
Aleksey Vyazmikin:

Могу сбросить индикатор в личку - сбросить?



Aleksey Vyazmikin:

Могу сбросить индикатор в личку - сбросить?

Из ссылки, что дали:

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

Нет, ничего не видно. Ищите сами,  пожалуйста

Из индикатора вызывается другой индикатор, указанный в настройках советника, в индикаторе:

bool CChannel::CreateChannel(void)
  {////!!!Print("Test_3");
   if(m_upch!=INVALID_HANDLE && m_dnch!=INVALID_HANDLE) return(true);
   if(m_upch==INVALID_HANDLE)
     {
      int handle=IndicatorCreate(_Symbol,InpChPeriod,IND_CUSTOM,ArraySize(m_upparam),m_upparam);
      if(handle!=INVALID_HANDLE)


 
Rashid Umarov:


Нет, ничего не видно. Ищите сами,  пожалуйста

Как я могу найти? Вы цитируете код индикатора про изменение IndicatorCreate ничего не говорилось. К сожалению код индикатора не мой, и я его почти не понимаю :(

Или вот пишет при оптимизации совсем другого советника.

2020.07.21 15:40:24.690 Tester  expert file F:\FX\Открытие Брокер_Demo\MQL5\Experts\ZigZag_Channel.ex5 open error [2]

А код вызова тут явный, ранее приводил.

   static string zigzag="ZigZag_Channel";
   static int depth=5000;                             //Кол-во баров
   static int tf=PERIOD_CURRENT;                      //Таймфрейм
   static bool WriteInfo=false;                        //Записывать данные в конец инф. буферов
   static string BuferUpInd="donchian_channel_pMTF";  //Имя индикатора верхней границы канала
   static int upbuffer=0;                             //Номер буфера верхней границы канала
   static string paramsUp="i:47,i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
                                                      //   static string paramsUp="i:"+DonZZ_Period+",i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
   static string BuferDnInd="donchian_channel_pMTF";  //Имя индикатора нижней границы канала
   static int dnbuffer=1;                             //Номер буфера нижней границы канала
   static string paramsDn="i:47,i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм
                                                      //   static string paramsDn="i:"+DonZZ_Period+",i:0";                 //Строка с настройками индикатора верхней границы канала -- период и тайм фрейм

   handle_DonZZ=iCustom(_Symbol,_Period,zigzag,depth,tf,WriteInfo,BuferUpInd,upbuffer,paramsUp,BuferDnInd,dnbuffer,paramsDn);
   if(handle_DonZZ==INVALID_HANDLE)
     {
      PrintFormat("Failed to create handle of the handle_DonZZ indicator for the symbol %s/%s, error code %d",
                  Symbol(),EnumToString(Period()),GetLastError());
      return(INIT_FAILED);
     }