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

 
DCodec:

Честно, ничего не понял. Мне нужны значения верхней линии индикатора на Close[2], Close[1] и всё.

Как эти значения вытянуть из ЛЮБОГО индикатора чтобы только "не влазить" в код индикатора.


Вы можете получить значения любого индикаторного буфера на любом БАРЕ, а не на Close... Смотрим справку по iCustom:

iCustom

Возвращает хэндл указанного пользовательского индикатора.

Порядок действия: 

  • в OnInit() создаём хендл индикатора
  • в OnTick() или OnTime() получаем данные индикатора на заданном номере БАРА с нужного ИНДИКАТОРНОГО буфера.

 
Vladimir Karputov:

Вы можете получить значения любого индикаторного буфера на любом БАРЕ, а не на Close... Смотрим справку по iCustom:

iCustom

Возвращает хэндл указанного пользовательского индикатора.

Порядок действия: 

  • в OnInit() создаём хендл индикатора
  • в OnTick() или OnTime() получаем данные индикатора на заданном номере БАРА с нужного ИНДИКАТОРНОГО буфера.

Да, неправильно выразился. Мне нужно значения индикатора на первом и втором барах. Но допустим у Bollinger Bands три линии. Значение какой линии он мне возвращает??? Прошу прощения за глупые вопросы, но реально СТУПОР.
 
DCodec:
Да, неправильно выразился. Мне нужно значения индикатора на первом и втором барах. Но допустим у Bollinger Bands три линии. Значение какой линии он мне возвращает??? Прошу прощения за глупые вопросы, но реально СТУПОР.

Минутку ...

Вот функция получения значений с iBands:

//+------------------------------------------------------------------+
//| Get value of buffers for the iBands                              |
//|  the buffer numbers are the following:                           |
//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND                  |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
  {
   double Bands[1];
//ArraySetAsSeries(Bands,true);
//--- reset error code 
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iBands,buffer,index,1,Bands)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Bands[0]);
  }

функция усечена - её назначение получать всегда ТОЛЬКО ОДНО значение с индикаторного буфера "buffer" на баре номер "index".

Все три линии iBands имеют свои константы:

//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND                  |
 
Vladimir Karputov:

Минутку ...

Вот функция получения значений с iBands:

функция усечена - её назначение получать всегда ТОЛЬКО ОДНО значение с индикаторного буфера "buffer" на баре номер "index".

Все три линии iBands имеют свои константы:

Да...да. Вот как раз я и не понимаю как применять

//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND  

Это, наверное от узкости мышления. Я до сих пор думаю как в MQL4.

 
DCodec:

Да...да. Вот как раз я и не понимаю как применять

Это, наверное от узкости мышления. Я до сих пор думаю как в MQL4.


Пример использования iBands из КодоБазы: Bollinger Bands RSI

 
DCodec:

...


Как успехи? Или создать тему с пошаговым написанием получения данных с индикатора?

 
Vladimir Karputov:

Как успехи? Или создать тему с пошаговым написанием получения данных с индикатора?

Вам смешно. А до меня только сейчас дошло, что buffer в

CopyBuffer

это и есть о что мне нужно

CopyBuffer(handle_iBands,buffer,index,1,Bands)

Спасибо.

 

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

Допустим отключить UPPER_LINE в iEnvelopes.

 
DCodec:

Вам смешно. А до меня только сейчас дошло, что buffer в

это и есть о что мне нужно

Спасибо.


Вам показалось. Я не смеялся, а спрашивал серьёзно. Например у меня есть такая тема: Простой советник. Проверка размера бара. Покупка/продажа


DCodec:

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

Допустим отключить UPPER_LINE в iEnvelopes.


Вопрос не понятен. Опишите более точно, ГДЕ и ЧТО Вы хотите сделать.

 
Vladimir Karputov:

Вам показалось. Я не смеялся, а спрашивал серьёзно. Например у меня есть такая тема: Простой советник. Проверка размера бара. Покупка/продажа



Вопрос не понятен. Опишите более точно, ГДЕ и ЧТО Вы хотите сделать.

В советнике при получении хендла индикатора в OnInit() ...

int OnInit()
  {
//--- Получить хэндл индикатора Envelopes_upper для отрисовки верхней линии
   EnvHandle_upper=iEnvelopes(NULL,0,Period_upper,0,MODE_SMA,PRICE_MEDIAN,Deviation_upper);

....терминал отрисовывает обе линии, а мне нужна только верхняя.

Как выключить отрисовку этой линии? Т.е. изменить её цвет на CLR_NONE, ну или стиль линии на DRAW_DONE?

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