Обсуждение статьи "Как опубликовать свой продукт в сервисе Маркет" - страница 36

 
Aleksei Andarzhanov:

 Разобрался. Прикрепил индикаторы в советник через #resource . Одно Но.. До этого советник шустрый был, быстро в Тестере летал, а сейчас скорость в десятки раз снизилась. Вроде все по правилам сделал, как в Справочнике написано, функцию вставил для поиска пути к индикатору GetRelativeProgramPath() - но скорость черепашья, один день тестирует 5 минут..

данные индикатора опрашиваются на каждом тике?

 
Denis Nikolaev:

данные индикатора опрашиваются на каждом тике?

 Да. Все осталось как прежде в коде. Поменялось только расположение индикатора. Раньше он запрашивался из терминала из \\Indicators , а теперь из самой программы ex4.

#resource "\\Indicators\\##Contrast.ex4"

///////////

    string path=GetRelativeProgramPath();

    path=path+"::Indicators\\##Contrast.ex4";

   ContrastMain_15 =NormalizeDouble(iCustom(NULL,15,path,coeff_1,0,0),Digits);

   ContrastSignal_15 =NormalizeDouble(iCustom(NULL,15,path,coeff_1,1,0),Digits);

  //////////

  string GetRelativeProgramPath() 

  { 

   int pos2; 

//--- получаем абсолютный путь к программе 

   string path=MQLInfoString(MQL_PROGRAM_PATH); 

//--- находим позицию подстроки "\MQL4\" 

   int    pos =StringFind(path,"\\MQL4\\"); 

//--- подстрока не найдена - ошибка 

   if(pos<0) 

      return(NULL); 

//--- пропускаем каталог "\MQL4" 

   pos+=5; 

//--- пропускаем лишние '\' 

   while(StringGetCharacter(path,pos+1)=='\\') 

      pos++; 

//--- если это ресурс, возвращаем путь относительно MQL4-каталога 

   if(StringFind(path,"::",pos)>=0) 

      return(StringSubstr(path,pos)); 

//--- найдем разделитель для первого подкаталога в MQL4 (например, MQL4\Indicators) 

//--- если его нет, то вернем путь относительно MQL4-каталога 

   if((pos2=StringFind(path,"\\",pos+1))<0) 

      return(StringSubstr(path,pos)); 

//--- вернем путь относительно подкаталога (например, MQL4\Indicators) 

   return(StringSubstr(path,pos2+1)); 

  } 

 
Aleksei Andarzhanov:

 Да. Все осталось как прежде в коде. Поменялось только расположение индикатора. Раньше он запрашивался из терминала из \\Indicators , а теперь из самой программы ex4.

#resource "\\Indicators\\##Contrast.ex4"

///////////

    string path=GetRelativeProgramPath();

    path=path+"::Indicators\\##Contrast.ex4";

   ContrastMain_15 =NormalizeDouble(iCustom(NULL,15,path,coeff_1,0,0),Digits);

   ContrastSignal_15 =NormalizeDouble(iCustom(NULL,15,path,coeff_1,1,0),Digits);

  //////////

  string GetRelativeProgramPath() 

  { 

   int pos2; 

//--- получаем абсолютный путь к программе 

   string path=MQLInfoString(MQL_PROGRAM_PATH); 

//--- находим позицию подстроки "\MQL4\" 

   int    pos =StringFind(path,"\\MQL4\\"); 

//--- подстрока не найдена - ошибка 

   if(pos<0) 

      return(NULL); 

//--- пропускаем каталог "\MQL4" 

   pos+=5; 

//--- пропускаем лишние '\' 

   while(StringGetCharacter(path,pos+1)=='\\') 

      pos++; 

//--- если это ресурс, возвращаем путь относительно MQL4-каталога 

   if(StringFind(path,"::",pos)>=0) 

      return(StringSubstr(path,pos)); 

//--- найдем разделитель для первого подкаталога в MQL4 (например, MQL4\Indicators) 

//--- если его нет, то вернем путь относительно MQL4-каталога 

   if((pos2=StringFind(path,"\\",pos+1))<0) 

      return(StringSubstr(path,pos)); 

//--- вернем путь относительно подкаталога (например, MQL4\Indicators) 

   return(StringSubstr(path,pos2+1)); 

  } 

Ну нагородили...
В iCustom() нужно такой путь подставлять:
"::Indicators\\##Contrast.ex4"
 
Artyom Trishkin:
Ну нагородили...
В iCustom() нужно такой путь подставлять:
"::Indicators\\##Contrast.ex4"

    Я сперва так и делал  "::Indicators\\##Contrast.ex4" .  Потом где то на форуме увидел такой вариант :

    string path=GetRelativeProgramPath();

    path=path+"::Indicators\\##Contrast.ex4";

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

 
Aleksei Andarzhanov:

    Я сперва так и делал  "::Indicators\\##Contrast.ex4" .  Потом где то на форуме увидел такой вариант :

    string path=GetRelativeProgramPath();

    path=path+"::Indicators\\##Contrast.ex4";

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

Вы увидели на форуме не относящееся к советникам. В справке об этом всё написано.

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

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

Но это при условии наличия исходника индикатора.

 
Artyom Trishkin:

Вы увидели на форуме не относящееся к советникам. В справке об этом всё написано.

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

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

Но это при условии наличия исходника индикатора.

Сейчас столкнулся с такой проблемой. До этого заполнял черновик, чтобы выложить советник на Маркете, но не получилось с скриншотами и закрыл страницу. Сейчас в своем профиле не пойму, как войти в старый Черновик - нет его. Начал заново заполнять, во вкладке Общая заново написал название советника, цену и т.д. - но не проходит, пишут что продукт с таким названием уже существует. Проверил в Поиске на Маркете - нет советников с таким названием. Я подозреваю, что когда вначале неудачно заполнил Черновик это название забронировалось. И после каждой неудачной попытки отправить советника на проверку придется менять название советника,  скриншоты ?

 
Aleksei Andarzhanov:

Сейчас столкнулся с такой проблемой. До этого заполнял черновик, чтобы выложить советник на Маркете, но не получилось с скриншотами и закрыл страницу. Сейчас в своем профиле не пойму, как войти в старый Черновик - нет его. Начал заново заполнять, во вкладке Общая заново написал название советника, цену и т.д. - но не проходит, пишут что продукт с таким названием уже существует. Проверил в Поиске на Маркете - нет советников с таким названием. Я подозреваю, что когда вначале неудачно заполнил Черновик это название забронировалось. И после каждой неудачной попытки отправить советника на проверку придется менять название советника,  скриншоты ?

Попробуйте пройти по ссылке https://www.mql5.com/ru/market/my

 
Rashid Umarov:

Попробуйте пройти по ссылке https://www.mql5.com/ru/market/my

  Спасибо. Нашел, разобрался. Конечно, было бы намного удобней, чтобы все это делалось из профиля, чтобы новички, подобные мне, не искали и не задавали подобные вопросы..

 
Aleksei Andarzhanov:

  Спасибо. Нашел, разобрался. Конечно, было бы намного удобней, чтобы все это делалось из профиля, чтобы новички, подобные мне, не искали и не задавали подобные вопросы..

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

 
Aleksei Andarzhanov:

  Спасибо. Нашел, разобрался. Конечно, было бы намного удобней, чтобы все это делалось из профиля, чтобы новички, подобные мне, не искали и не задавали подобные вопросы..

Просто нажмите «Маркет» там «Мои продукты» и «Черновики». После чего все вопросы отпадут.


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