Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2037

 
klycko #:

Добрый день!

Я - новичок.

Не могу понять, как в МТ5 получить значения верхней и нижней границ Буллинжера iBands.
В МТ4  iBands выдавал значения, а в МТ5 выдает хэндл.
Может с использованием этого хэндл можно получить значения, применяя GetData или CopyBuffer. Но я не могу понять, как они работают.
Не могли бы вы подсказать, как это сделать?

С уважением, Александр

Здесь очень хороший пример
 

Добрый день!

Я - новичок.

Не могу понять, как в МТ5 получить значения верхней и нижней границ Буллинжера iBands.
В МТ4  iBands выдавал значения, а в МТ5 выдает хэндл.
Может с использованием этого хэндл можно получить значения, применяя GetData или CopyBuffer. Но я не могу понять, как они работают.
Не могли бы вы подсказать, как это сделать?

С уважением, Александр

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Линии индикаторов - Константы индикаторов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
klycko #:


Не могу понять, как 

Вы 3 часа назад не могли понять то же самое.

 
klycko #:

Добрый день!

Я - новичок.

Не могу понять, как в МТ5 получить значения верхней и нижней границ Буллинжера iBands.
В МТ4  iBands выдавал значения, а в МТ5 выдает хэндл.
Может с использованием этого хэндл можно получить значения, применяя GetData или CopyBuffer. Но я не могу понять, как они работают.
Не могли бы вы подсказать, как это сделать?

С уважением, Александр

Вот ссылка.  https://www.mql5.com/ru/articles/3039

На мой взгляд все должно быть понятно.

Вам нужен этот кусок

//+------------------------------------------------------------------+
//| Тиковая функция эксперта                                         |
//+------------------------------------------------------------------+
void OnTick()
  {
   //определим Ask, Bid
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   //создаем массив цен
   double MiddleBandArray[];
   double UpperBandArray[];
   double LowerBandArray[];
   
   //сортируем массив цен от текущей свечи вниз
   ArraySetAsSeries(MiddleBandArray,true);
   ArraySetAsSeries(UpperBandArray,true);
   ArraySetAsSeries(LowerBandArray,true);
   
   //define Bollinger Bands
   int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
   
   
   //копируем данные о цене в массив
   CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
   CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
   CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
   
   //рассчитываем для текущей свечи
   double MiddleBandValue=MiddleBandArray[0];
   double UpperBandValue=UpperBandArray[0];
   double LowerBandValue=LowerBandArray[0];
   
   //генерируем сигнал на покупку если цены > MA
   if (
      (Ask>=MiddleBandArray[0])
   && (Ask<UpperBandArray[0])
      )
         {
         Comment("BUY");
         }
    
   //проверка наличия сигнала тейк-профита      
   if (
      (Bid>=UpperBandArray[0])
      )
         {
         Comment("TAKE PROFIT");
         }  
   
      //проверка отсутствия сигнала      
   if (
      (Ask<MiddleBandArray[0])
      )
         {
         Comment("NO SIGNAL");
         }  
  }
//+------------------------------------------------------------------+
Как разработать торговую систему на основе Bollinger Bands
Как разработать торговую систему на основе Bollinger Bands
  • www.mql5.com
В этой статье мы поговорим о полосах Боллинджера (Bollinger Bands) — одном из самых популярных индикаторов в мире трейдинга. Мы обсудим технический анализ, а также научимся разрабатывать системы алгоритмической торговли на основе индикатора Bollinger Bands.
 
Vladimir Deryagin #:

Вот ссылка.  https://www.mql5.com/ru/articles/3039

На мой взгляд все должно быть понятно.

Вам нужен этот кусок

Владимир, большое вам спасибо!
 
Vladimir Deryagin #:

Вот ссылка.  https://www.mql5.com/ru/articles/3039

На мой взгляд все должно быть понятно.

Вам нужен этот кусок

Вот только

   //define Bollinger Bands
   int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);

в OnTick() быть не должно, а должно быть в OnInit().

Ну и, переменная BollingerBands должна быть глобальной или типа того.

 
JRandomTrader #:

Вот только

в OnTick() быть не должно, а должно быть в OnInit().

Ну и, переменная BollingerBands должна быть глобальной или типа того.

Большое спасибо за уточнение. Я тоже удивился, увидев это в OnTick()
 

Чой-то не пойму ...
MQL4

В каком случае нужно использовать спецификатор virtual для функции базового (не абстрактного) класса, если эта функция будет переопределена в производном классе ? Нужно ли его использовать ?

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

 
Mikhail Tkachev #:

Чой-то не пойму ...
MQL4

В каком случае нужно использовать спецификатор virtual для функции базового (не абстрактного) класса, если эта функция будет переопределена в производном классе ? Нужно ли его использовать ?

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

Например, если идёт обращение по указателю на какой-то из родительских классов, но надо, чтобы выполнилась функция из того класса, объект которого реально лежит по ссылке.

 
JRandomTrader #:

Например, если идёт обращение по указателю на какой-то из родительских классов, но надо, чтобы выполнилась функция из того класса, объект которого реально лежит по ссылке.

Сейчас попробовал, работает с virtual и без него одинаково.

CLi_Calc01_GOn*   objCalc=NULL;  // Объявление 


OnInit()
{
      switch(swTypeStat) {                   
         case 1:  objCalc=new CLi_Calc01_GOn;           // Объект базового класса
                  break;
         case 2:  objCalc=new CLi_Calc02_GO1( 50,1);    // Объект производного класса 02
                  break;
         case 3:  objCalc=new CLi_Calc03_GO1(100,1);    // Объект производного класса 03
                  break;
      }
}

Функция, определенная в базовом классе, и пререопределенная в производных классах, работает корректно и с virtual и без...

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