Не правильно работает простая функция - страница 3

 
Taras Slobodyanik #:

пс. мои индикаторы генерируют и задают уникальный IndicatorShortName.

убрал из своего кода  IndicatorShortName, всё равно работает правильно.

 
Taras Slobodyanik #:

убрал из своего кода  IndicatorShortName, всё равно работает правильно.

Конечно.
Теперь его имя - имя файла, не более.
 
Renat Akhtyamov #:
Нет.
Он сам за себя.
В данном случае двоеточия не нужны.
К тому же я достаточно зарабатываю самописанным алготрейдингом и купить Вас за 30 баксов ради прикола - это как два пальца об асфальт ;)

:)

ок, жду 30 баксов

 
Taras Slobodyanik #:

:)

ок, жду 30 баксов

То то же ;)
 
Renat Akhtyamov #:
То то же ;)

ну то есть пафос сдулся?)

 
Taras Slobodyanik #:

ну то есть пафос сдулся?)

Файл индикатора там должен быть, а не ресурс, вот и вся фишка.
Удачи!
 
Renat Akhtyamov #:
Файл индикатора там должен быть, а не ресурс, вот и вся фишка.
Удачи!

Справку нужно иногда смотреть, если есть сомнения

Работа с пользовательскими индикаторами, подключенными в качестве ресурсов

Для работы mql4-программ может потребоваться один или несколько пользовательских индикаторов, все они могут быть включены в код исполняемой mql4-программы. Включение индикаторов в качестве ресурсов позволяет упростить распространение программ.

Пример подключения и использования пользовательского индикатора SampleIndicator.ex4, расположенного в папке: каталог_данных_терминала\MQL4\Indicators\:

//+------------------------------------------------------------------+
//|                                                     SampleEA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#resource "\\Indicators\\SampleIndicator.ex4"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- получим значение пользовательского индикатора
   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);
   PrintFormat("Indicator: iCustom value=%f",value);
//--- ...
   return(INIT_SUCCEEDED);
  }


Случай, когда пользовательский индикатор в функции OnInit() создает одну или несколько копий себя, требует отдельного рассмотрения. Напомним, что для использования ресурса из mql4-программы его необходимо указывать в виде: <путь_имя_файла_EX4>::<имя_ресурса>.

Например, если индикатор SampleIndicator.ex4 включается в советник SampleEA.ex4 в качестве ресурса, то путь к самому себе, указанный при вызове iCustom() в функции инициализации пользовательского индикатора, будет выглядеть следующим образом: "\\Experts\\SampleEA.ex4::Indicators\\SampleIndicator.ex4". При явном указании данного пути пользовательский индикатор SampleIndicator.ex4 будет жестко привязан к советнику SampleEA.ex4 и теряет способность самостоятельной работы.

Путь до самого себя можно получить при помощи функции GetRelativeProgramPath(), пример использования которой приведен ниже:

//+------------------------------------------------------------------+
//|                                              SampleIndicator.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property indicator_separate_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- неправильный способ указания ссылки на себя
//--- string path="\\Experts\\SampleEA.ex4::Indicators\\SampleIndicator.ex4";
//--- правильный способ получения ссылки на себя
   string path=GetRelativeProgramPath();
   double value=iCustom(_Symbol,_Period,path,0,0);
   PrintFormat("Path=%s, iCustom value=%f",path,value);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| GetRelativeProgramPath                                           |
//+------------------------------------------------------------------+
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));
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,        
                const double& price[])
  {
//--- return value of prev_calculated for next call
   return(rates_total);
  }


 
Vitaly Muzichenko #:

Справку нужно иногда смотреть, если есть сомнения

Работа с пользовательскими индикаторами, подключенными в качестве ресурсов

Для работы mql4-программ может потребоваться один или несколько пользовательских индикаторов, все они могут быть включены в код исполняемой mql4-программы. Включение индикаторов в качестве ресурсов позволяет упростить распространение программ.

Пример подключения и использования пользовательского индикатора SampleIndicator.ex4, расположенного в папке: каталог_данных_терминала\MQL4\Indicators\:



Случай, когда пользовательский индикатор в функции OnInit() создает одну или несколько копий себя, требует отдельного рассмотрения. Напомним, что для использования ресурса из mql4-программы его необходимо указывать в виде: <путь_имя_файла_EX4>::<имя_ресурса>.

Например, если индикатор SampleIndicator.ex4 включается в советник SampleEA.ex4 в качестве ресурса, то путь к самому себе, указанный при вызове iCustom() в функции инициализации пользовательского индикатора, будет выглядеть следующим образом: "\\Experts\\SampleEA.ex4::Indicators\\SampleIndicator.ex4". При явном указании данного пути пользовательский индикатор SampleIndicator.ex4 будет жестко привязан к советнику SampleEA.ex4 и теряет способность самостоятельной работы.

Путь до самого себя можно получить при помощи функции GetRelativeProgramPath(), пример использования которой приведен ниже:

Ну, и где у нее файл индикатора, к которому прикреплен ресурс ????
 
Renat Akhtyamov #:
Ну, и где у нее файл индикатора, к которому прикреплен ресурс ????

В справке:

Ресурс:

#resource "\\Indicators\\SampleIndicator.ex4"

Вызов из ресурса:

double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);


У топикстартера:

Ресурс:

#resource "\\Indicators\\RealPro\\fxr_sr_zones.ex4"  // Подгружаю

Вызов из ресурса:

double Signal_fxr_sr_zones_DOWN = iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\RealPro\\fxr_sr_zones",factor,zone_extend,TimeFrame,zone_show_weak,zone_show_untested,zone_show_turncoat,zone_show_info,zone_label_shift,zone_show_alerts,send_email,send_mobil_notification,new_zone_alert,new_zone_mobil_notification,zone_alert_waitseconds, 1, 1);


Скорее всего, нужно открыть параметры индикатора и внимательно на них посмотреть. И все параметры указать. В нужные - отправить значения, в ненужные - что-то того же типа, но пустое, типа NULL или ""

 
Artyom Trishkin #:

В справке:

Ресурс:

Вызов из ресурса:


У топикстартера:

Ресурс:

Вызов из ресурса:

Масло масленное какое то.
Два раза указать один и тот же путь.
Не понял пока ягодки.
Попробую понять завтра.