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

odyn:

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

Один автобус (переменная с типом структуры bus) имеет три поля:
1. Водитель
2. Кондуктор
3. Пассажиры[]
Парк автобусов (массив структур bus) имеет 120 автобусов, каждый из которых имеет те же поля:
1. Водитель
2. Кондуктор
3. Пассажиры[]
Но у каждого автобуса эти поля отличаются от других автобусов.
Итог: парк автобусов - это массив струтур типа автобус.
Artyom Trishkin:
Один автобус (переменная с типом структуры bus) имеет три поля:
1. Водитель
2. Кондуктор
3. Пассажиры[]
Парк автобусов (массив структур bus) имеет 120 автобусов, каждый из которых имеет те же поля:
1. Водитель
2. Кондуктор
3. Пассажиры[]
Но у каждого автобуса эти поля отличаются от других автобусов.
Итог: парк автобусов - это массив струтур типа автобус.

Спасибо, очень доходчиво. :)  Получается МАСССИВ СТРУКТУР.  Понятно.

odyn:

Спасибо, очень доходчиво. :)  Получается МАСССИВ СТРУКТУР.  Понятно.

Здорово Артём объяснил пока я отсутствовал. Только добавлю к вашему пониманию: Получается массив структур содержащий массив пассажиров.

В каждой ячейке массива есть один водитель, один кондуктор и много пассажиров(массив).

Artyom Trishkin:

Здесь

вы создаёте объект базового класса. Соответственно - базовый класс у вас везде.

а можно ли объявить класс как базовый, а потом в зависимости от условий переопределить как один из наследуемых?

Задача - оставить имя класса в коде одним и тем же.

И еще подскажите, пожалуйста, какую директиву использовать для определения тестера.

#ifdef MQL_TESTER || MQL_VISUAL_MODE

Так можно?

leonerd:

а можно ли объявить класс как базовый, а потом в зависимости от условий переопределить как один из наследуемых?

Задача - оставить имя класса в коде одним и тем же.

И еще подскажите, пожалуйста, какую директиву использовать для определения тестера.

Так можно?

#include <NewsFilter.mqh>
//...
   if(MQLInfoInteger(MQL_TESTER))
      CNewsFilterTester news_filter;
   else
      CNewsFilter       news_filter;
//---
   news_filter.Init(Symbol(),MagicNumber);
Artyom Trishkin:

Спасибо. Да, но здесь news_filter объект получается может быть не определен. Он должен быть объявлен глобально, чтоб доступным быть для любого места в коде. Как быть?

CNewsFilter       news_filter;
void OnInit()
  {
  }
leonerd:

Спасибо. Да, но здесь news_filter объект получается может быть не определен. Он должен быть объявлен глобально, чтоб доступным быть для любого места в коде. Как быть?

В каких случаях он будет неопределён?

Artyom Trishkin:

В каких случаях он будет неопределён?

#include <NewsFilter.mqh>

void OnInit()
  {
//...
   if(MQLInfoInteger(MQL_TESTER))
      CNewsFilterTester news_filter;
   else
      CNewsFilter       news_filter;
//---
   news_filter.Init(Symbol(),MagicNumber);
  }
void OnTick()
  {
   news_filter.Check()...
  }

Помогите, пожалуйста, понять логику исполнения данного оператора и выражения его условия.


CTrade         m_trade;

CPositionInfo  m_position;

if(!m_trade.PositionClose(m_position.Ticket()))

Если НЕ закрывает позицию, определенную тикетом?

Сначала получается тикет позиции -> программа пытается закрыть позицию -> возвращенное булевое значение меняется на противоположное.

Правильно?

[Удален]
odyn:

Помогите, пожалуйста, понять логику исполнения данного оператора и выражения его условия.


Если НЕ закрывает позицию, определенную тикетом?

Сначала получается тикет позиции -> программа пытается закрыть позицию -> возвращенное булевое значение меняется на противоположное.

Правильно?

-> Возвращает true, если позиция с указанным тикетом закрыта, иначе false

Условие читается так: Если позиция с указанным тикетом не закрыта...