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

 

Подскажите пожалуйста как объявить массив в классе, для того чтобы его вытащить в советнике? 

m_pr_hl2[b]=MathAbs((iHigh(this.m_symbol,this.m_timeframe,b) + iLow(this.m_symbol,this.m_timeframe,b))/2);
class CNewBar : public CObject
  {
private:
   string            m_symbol;
   ENUM_TIMEFRAMES   m_timeframe;
   datetime          m_time;
   double            m_pr_hl2[];
   datetime          Time(void);
   string            Symbol(void)         { return this.m_symbol;    }
public:
   ENUM_TIMEFRAMES   Timeframe(void)      { return this.m_timeframe; }
   datetime          GetTime(void)        { return this.m_time;      } //  Возвращает время последнего обращения
   int               PriceHL2(void);      
   bool              IsNewBar(void);                                   //  Основная функция класса
                     CNewBar(const string symbol,const ENUM_TIMEFRAMES timeframe);
                    ~CNewBar(void) {;}
  };
//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CNewBar::CNewBar(const string symbol,const ENUM_TIMEFRAMES timeframe) : m_time(0)
  {
   this.m_symbol = symbol;
   this.m_timeframe = (timeframe == PERIOD_CURRENT ? Period() : timeframe);
   m_rt=this.RatesTotal();
   m_pc=0;
   PriceHL2();
  }
//+------------------------------------------------------------------+
//| CNewBar Time Возвращает время нулевого бара                      |SERIES_LASTBAR_DATE
//+------------------------------------------------------------------+
datetime CNewBar::Time(void)
  {
   datetime array[1], ret;
   ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
   return(array[0]);
  }

//+------------------------------------------------------------------+
//| Расчет цены                                                      |
//+------------------------------------------------------------------+
int CNewBar::PriceHL2(void)
  {
   int res=ArrayResize(this.m_pr_hl2,this.m_rt);
   for(int b=this.m_pc; b<this.m_rt; b++)
      m_pr_hl2[b]=MathAbs((iHigh(this.m_symbol,this.m_timeframe,b) + iLow(this.m_symbol,this.m_timeframe,b))/2);
   return(res);
  }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm=this.Time();
   if(tm==0)
      return false;
   if(tm!=this.m_time)
     {
      //--- определяем время
      this.m_time=tm;
      this.PriceHL2();
      return true;
     }
   return false;
  }
 
Создавая массив для "промежуточных вычислений" индикатора можно просто его создать и все работает, а можно указать свойство INDICATOR_CALCULATION.
Зачем это? Какие возможности дает?
 
Evgeny Dyuka #:
Создавая массив для "промежуточных вычислений" индикатора можно просто его создать и все работает, а можно указать свойство INDICATOR_CALCULATION.
Зачем это? Какие возможности дает?

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

это касается как индикаторных буферов INDICATOR_DATA используемых для отрисовки, так и INDICATOR_CALCULATIONS - вспомогательных буферов для расчетов

 
Igor Makanu #:

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

это касается как индикаторных буферов INDICATOR_DATA используемых для отрисовки, так и INDICATOR_CALCULATIONS - вспомогательных буферов для расчетов

понял, спасибо
 
Подскажите, можно ли в платформе MT5 поставить примагничивание графических объектов(линии тренда, сетки фибо) к индикаторам? Например чтобы значение сетки фибо "0" примагнитилось к скользящей средней. Прям встало на нее пипс в пипс.
 
Надо графический объект закрепить в определенном месте на окне графика. Например квадрат в левом нижнем углу. Для определения координаты по Y есть CHART_PRICE_MIN, а по X как узнать минимальное время?
Ничего подходящего не нашел в ENUM_CHART_PROPERTY_INTEGER

Или вопрос задам шире. Как правильно фиксировать положение объекта в окне графика (например "по центру") без привязки к самому графику?


 
Есть такое свойство графика CHART_SCALEFIX_11 "Режим масштаба 1:1" и не раскрыто для чего оно и как пользоваться.
Это что бы размеры графических объектов привязять к маштабу?
Если да, то в каких единицах и как указывать размеры объектов что бы они были связаны маштабом?

Вообще, как правильно связывать объекты рисования с маштабом графика?
 
Evgeny Dyuka #:
Надо графический объект закрепить в определенном месте на окне графика. Например квадрат в левом нижнем углу. Для определения координаты по Y есть CHART_PRICE_MIN, а по X как узнать минимальное время?
Ничего подходящего не нашел в ENUM_CHART_PROPERTY_INTEGER

Или вопрос задам шире. Как правильно фиксировать положение объекта в окне графика (например "по центру") без привязки к самому графику?


очень нужно это тайное знание
 
Evgeny Dyuka #:
Есть такое свойство графика CHART_SCALEFIX_11 "Режим масштаба 1:1" и не раскрыто для чего оно и как пользоваться.
Это что бы размеры графических объектов привязять к маштабу?
Если да, то в каких единицах и как указывать размеры объектов что бы они были связаны маштабом?

Вообще, как правильно связывать объекты рисования с маштабом графика?
... и это тоже
 
Evgeny Dyuka #:
Надо графический объект закрепить в определенном месте на окне графика. Например квадрат в левом нижнем углу. Для определения координаты по Y есть CHART_PRICE_MIN, а по X как узнать минимальное время?
Ничего подходящего не нашел в ENUM_CHART_PROPERTY_INTEGER

Или вопрос задам шире. Как правильно фиксировать положение объекта в окне графика (например "по центру") без привязки к самому графику?


CHART_FIRST_VISIBLE_BAR

Номер первого видимого бара на графике. Индексация баров соответствует таймсерии.

int  r/o


Но не все объекты можно так привязать.

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