Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 240

 
barabashkakvn:

Здравствуйте. 

1. Индикатор  "Blau_Ergodic" не могу использовать, так как в конце статьи нет архива. Сейчас нужен включаемый файл " WilliamBlau.mqh". Скиньте, пожалуйста этот файл (лучше через сообщение в профиле).

2. Все индикаторы в папке ...MQL5\Indicators\Examples\ - это пользовательские индикаторы, т.е. такие индикаторы, код которых Вы можете править.

Отправил.
 
forexman77:

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

Возникли следующие вопросы:

1. В строке после  CiCustom можно указать любое название, к примеру обозначил его, как  "m_ind;"

2. Правильна ли эта строка?

Если правильно понимаю здесь получаю значение самого индикатора?

3.Не могу понять, как программа получает значение индикатора. То есть, если по аналогии с MQL4, то нужно указать имя индикатора и программа найдет его по имени. Тогда куда необходимо  вписать его имя в классе?  

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

В общем все верно. Вот только код:

   double             Custom(int index)                   { return(m_ind.ParamDouble(index));}
   double             Open(int index)                     { return(m_open.GetData(index));  }
   double             Close(int index)                    { return(m_close.GetData(index)); }

вызывает вопрос. ParamDouble - получает значение указанного параметра с плавающей точкой, использованного при создании индикатора. Может все-таки нужен доступ к значению буфера индикатора:

   double             Custom(int index)                   { return(m_open.GetData(index));  }
   double             Open(int index)                     { return(m_open.GetData(index));  }
   double             Close(int index)                    { return(m_close.GetData(index)); }

?

 
barabashkakvn:

В общем все верно. Вот только код:

вызывает вопрос. ParamDouble - получает значение указанного параметра с плавающей точкой, использованного при создании индикатора. Может все-таки нужен доступ к значению буфера индикатора:

?

Посмотрев справку, мне показалось, что нужно " ParamDouble". Вообще конечно нужно значение из буффера получить.

В классе "CiCustom" про буфферы нашел только "NumBuffers"

 
forexman77:
Посмотрев справку, мне показалось, что нужно " ParamDouble". Вообще конечно нужно значение из буффера получить.
Ну, вижу все у Вас получится.
 
barabashkakvn:
Ну, вижу все у Вас получится.
Если правильно понимаю 
double             Custom(int index)                   { return(m_ind.ParamDouble(index));}

этой строкой запрашивается значение индикатора?

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

В группе базовых и вспомогательных классов технических индикаторов и таймсерий есть функции, но как их приделать? Или это не то, что нужно?

 
forexman77:
Если правильно понимаю 

этой строкой запрашивается значение индикатора?

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

В группе базовых и вспомогательных классов технических индикаторов и таймсерий есть функции, но как их приделать? Или это не то, что нужно?

1. Да значение параметра - например входной параметр на котором будет рассчитываться индикатор.

2. Не путайте - индикатор в котором Вы можете изменить код - это пользовательский индикатор. Пусть и название у него одинаковое с индикатором, который идет в стандартной библиотеке. Пример пользовательских индикаторов - ...MQL5\Indicators\Examples\ и любые другие, в которых можно изменить код. Индикаторный буфер отрисовывает свое содержимое (данные) на графике. Вы просто изменяете данные в индикаторном буфере, а на графике происходит отрисовка. О каком доступе Вы спрашиваете? 

3. Не понял. 

 
barabashkakvn:

1. Да значение параметра - например входной параметр на котором будет рассчитываться индикатор.

2. Не путайте - индикатор в котором Вы можете изменить код - это пользовательский индикатор. Пусть и название у него одинаковое с индикатором, который идет в стандартной библиотеке. Пример пользовательских индикаторов - ...MQL5\Indicators\Examples\ и любые другие, в которых можно изменить код. Индикаторный буфер отрисовывает свое содержимое (данные) на графике. Вы просто изменяете данные в индикаторном буфере, а на графике происходит отрисовка. О каком доступе Вы спрашиваете? 

3. Не понял. 

Вот здесь есть входной параметр период, по которому вычисляется индикатор "q"

class CSampleSignal : public CExpertSignal
  {
protected:
   CiCustom           m_ind;              // объект для доступа к значениям ind
   CiOpen             m_open;            // объект для доступа к ценам открытия баров
   CiClose            m_close;           // объект для доступа к ценам закрытия баров
  //--- настраиваемые параметры
   int      q;  // q - период, по которому вычисляется индикатор
   double             m_stop_loss;       // уровень установки ордера "stop loss" относительно цены открытия
   double             m_take_profit;     // уровень установки ордера "take profit" относительно цены открытия
public:
              CSampleSignal();
   //--- методы установки параметров настройки
   void               Q(int value)                 { q=value;   }
   void               StopLoss(double value)       { m_stop_loss=value;   }
   void               TakeProfit(double value)     { m_take_profit=value; }

К вопросу 2. Теперь следующий код 

protected:
   //--- метод инициализации объектов
   bool               Initind(CIndicators* indicators);
   bool               InitOpen(CIndicators* indicators);
   bool               InitClose(CIndicators* indicators);
   //--- методы доступа к данным объектов
   double             Custom(int index)                   { return(m_ind.ParamDouble(index));}//знаю, что не правильно
   double             Open(int index)                     { return(m_open.GetData(index));  }
   double             Close(int index)                    { return(m_close.GetData(index)); }
  };

Если правильно понимаю здесь указываем, то что хотим получить информацию по ценам открытия, закрытия, значения из буфферов индикатора? 

Со стандартными индикаторами понятно. Данные из буффера получают через "Main". К примеру, как в коде ниже

 double             MA(int index)                       { return(m_MA.Main(index));       }
 double             Open(int index)                     { return(m_open.GetData(index));  }
 double             Close(int index)                    { return(m_close.GetData(index)); }

К 3 вопросу. То, как получить данные из пользовательского индикатора?

Для лучшего понимания, вкратце какие этапы необходимо пройти, в процессе создания генератора торгового сигнала? 

 
Если правильно понимаю здесь указываем, то что хотим получить информацию по ценам открытия, закрытия, значения из буфферов индикатора? 

Да.

 

Со стандартными индикаторами понятно. Данные из буффера получают через "Main". К примеру, как в коде ниже 

Да. Класс CiMA имеет метод Main

 

 Как же получить данные из пользовательского индикатора?

.GetData(index))
где index - это номер индикаторного буфера.
 
barabashkakvn:

Да.

 

Да. Класс CiMA имеет метод Main

 

где index - это номер индикаторного буфера.
double             Main(int ind)                       { return(m_ind.GetData(0,ind));   }
Правильно)?
 


когда же выйдет metatrader на windows phone 8

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