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

 
Всем Привет! Расскажите пожалуйста чем отличается торговый робот, от торгового советника?
 
Daniil Osipov #:
Всем Привет! Расскажите пожалуйста чем отличается торговый робот, от торгового советника?

Игрой слов.

 
Как индикатор может узнать номер своего подокна?
Например что бы у себя в подокне что то написать или нарисовать.
Явную функцию типа "IndicatorGetInteger" не нашел.
 
Evgeny Dyuka #:
Как индикатор может узнать номер своего подокна?
Например что бы у себя в подокне что то написать или нарисовать.
Явную функцию типа "IndicatorGetInteger" не нашел.
ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
ChartWindowFind - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

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

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

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