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

 
The_Sheikh:

Здравствуйте. Объясните кто-нибудь доступно, что есть такое "Plots" в MQL5? К буферам не относится, но при этом свойство indicator_plots создаёт перечень свойств объекта отрисовки как и буферы. При использовании средств MQL4 было понятно, что обращение идёт к конкретному объекту отрисовки, а теперь появилось новое свойство препроцессора indicator_plots, которое задаёт количество непонятно чего.

В MQL4 задавалось количество отображаемых буферов директивой

#property indicator_buffers 1

И в функции OnInit() можно было добавить несколько буферов для расчётов

IndicatorBuffers(3);

А в MQL5 всё то-же самое записывается в две директивы

#property indicator_buffers 3
#property indicator_plots   1

Это означает то, что всего буферов 3, а отображаться на графике будет 1. Два других будут использоваться для вычислений. А в MQL5 один из дополнительных может использоваться для цвета отображения.

 
fxsaber:

Наверное, наглядно будет для понимания, если запустить этот индикатор в MT4 и MT5. При конвертации в MT5 пришлось использовать plots

Потому что только два буфера рисоваться должны.

Уже ближе к истине. Но в таком случае как быть, если рисоваться должны второй и шестой? Никак?

Alexey Viktorov:

И в функции OnInit() можно было добавить несколько буферов для расчётов

Кстати, а в MQL5 есть альтернатива этой функции?

 
The_Sheikh:

Уже ближе к истине. Но в таком случае как быть, если рисоваться должны второй и шестой? Никак?

Не знаю.

 
The_Sheikh:

Уже ближе к истине. Но в таком случае как быть, если рисоваться должны второй и шестой? Никак?

1) "Второй и шестой" - вы сами решаете как распределить номера ;)

2) INDICATOR_CALCULATIONS и DRAW_NONE против INDICATOR_DATA и неDRAW_NONE (любой другой) работают для любого порядкового номера.

 
The_Sheikh:

Уже ближе к истине. Но в таком случае как быть, если рисоваться должны второй и шестой? Никак?

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


INDICATOR_DATA

Данные для отрисовки

INDICATOR_COLOR_INDEX

Цвета отрисовки

INDICATOR_CALCULATIONS

Вспомогательные буферы для промежуточных вычислений

 
The_Sheikh:

Кстати, а в MQL5 есть альтернатива этой функции?

В mql5 нет необходимости в такой функции. Я-же привёл пример написания. Отличие с mql4 только в последовательности и орфографии.

 
Спасибо всем ответившим!
 

Пусть в настойках терминала задано максимальное число баров на графике 10000. Тогда в скрипте и индикаторе функция Bars() возвращает заданное в настройках число + количество новых появившихся свечей.

То есть число свечей, отображаемое на графике, не будет ограничиваться 10000?

Как в MQL узнать именно количество заданное в настройках терминала?

Если количество баров достигнет максимального значения типа int, то что будет происходить дальше с числом свечей и с позициями элементов массивов-таймсерий?

 
The_Sheikh:

Как в MQL узнать именно количество заданное в настройках терминала?

TerminalInfoInteger(TERMINAL_MAXBARS))
The_Sheikh:

Если количество баров достигнет максимального значения типа int, то что будет происходить дальше с числом свечей

кол-во баров будет увеличиваться, т.е. будет больше значения  TERMINAL_MAXBARS

, потом по неизвестным алгоритмам, терминал "сбросит лишние бары" - когда, неизвестно, в индикаторе актуальное кол-во баров на чарте будет в const int rates_total, оно же будет и в iBars() https://www.mql5.com/ru/docs/series/ibars

т.е. исходя из сказанного - TERMINAL_MAXBARS это данные из окошка терминала, а iBars() - это реальное значение баров на чарте


The_Sheikh:

 и с позициями элементов массивов-таймсерий?

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

индикатор для проверки:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   static datetime t=0;
   if(t!=time[rates_total-1])
     {
      Print("rates_total = ",rates_total, ", TERMINAL_MAXBARS = ",TerminalInfoInteger(TERMINAL_MAXBARS));
      t=time[rates_total-1];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

лог индикатора:

2019.04.30 19:10:12.247 rates (EURUSD,M1) rates_total = 50000, TERMINAL_MAXBARS = 50000

2019.04.30 19:10:29.699 rates (EURUSD,M1) rates_total = 50001, TERMINAL_MAXBARS = 50000

2019.04.30 19:11:29.392 rates (EURUSD,M1) rates_total = 50002, TERMINAL_MAXBARS = 50000

2019.04.30 19:12:30.125 rates (EURUSD,M1) rates_total = 50003, TERMINAL_MAXBARS = 50000


Документация по MQL5: Доступ к таймсериям и индикаторам / iBars
Документация по MQL5: Доступ к таймсериям и индикаторам / iBars
  • www.mql5.com
Количество баров в истории по соответствующему символу и периоду, но не более чем задано в настройках платформы параметром "Макс. баров в окне" ("Max bars in chart")
 

Хочу познакомится с разработкой интерфейсов в MQL5 на EasyAndFastGUI

Есть 10 частей (или чего?) статей "Графические интерфейсы", начиная с 2015 года

У меня вопрос, они все последовательны, или старые смысла читать нет?

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