В чем с точки зрения программирования принципиальная разница между советниками и индикаторами

 

Как я понимаю - индикаторы не умеют торговать - т.е. обращаться к соответствующим функциям.

Могу ли я в советнике использовать возможности рисования на графике?

Почему возникло разделение на 2 типа программ? Отчего не делать все в одной используя или нет те или иные функции?

Я новичок в MQL - поясните пожалуйста.

 

Из документации MQL5:

Программы, написанные на MetaQuotes Language 5, имеют различные свойства и предназначение:

  • Советник — это механическая торговая система (МТС), имеющая привязку к определенному графику. Советник запускается на выполнение при возникновении события, которое он может обработать: события инициализации и деинициализации, событие прихода нового тика, событие от таймера, событие от изменения стакана цен, события от графика и пользовательские события.
    Советник может не только работать в режиме информирования о возможности совершить сделку, но и автоматически совершать сделки на торговом счете, направляя их прямо на торговый сервер. Советники хранятся в директории каталог_терминала\MQL5\Experts.
  • Пользовательский индикатор — технический индикатор, самостоятельно написанный пользователем в дополнение к индикаторам, уже интегрированным в клиентский терминал. Пользовательские индикаторы, также как и встроенные, не могут автоматически торговать и предназначены только для реализации аналитических функций.
    Пользовательские индикаторы не могут использовать функции для работы с графиками и графическими  объектами. Пользовательские индикаторы хранятся в директории каталог_терминала\MQL5\Indicators
  • Скрипт — программа, предназначенная для одноразового выполнения каких-либо действий. В отличие от экспертов, скрипты не обрабатывают никаких событий, кроме события запуска (для этого в скрипте должна быть функция-обработчик OnStart). Скрипты хранятся в директории каталог_терминала\MQL5\Scripts
  • Библиотека — библиотека пользовательских функций, предназначенная для хранения и распространения часто используемых блоков пользовательских программ. Библиотеки не могут самостоятельно запускаться на выполнение.
    Библиотеки хранятся в директории каталог_терминала\MQL5\Libraries

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

Но у индикаторов, которые специально предназначены для отрисовки длинных последовательностей, есть масса уникальных и экономичных режимов отрисовки:

Идентификатор

Описание

Буферов значений

Буферов цвета

DRAW_NONE

Не отрисовывается

1

0

DRAW_LINE

Линия

1

0

DRAW_SECTION

Отрезки

1

0

DRAW_HISTOGRAM

Гистограмма от нулевой линии

1

0

DRAW_HISTOGRAM2

Гистограмма на двух индикаторных буферах

2

0

DRAW_ARROW

Отрисовка стрелками

1

0

DRAW_ZIGZAG

Стиль Zigzag допускает вертикальные отрезки на баре

2

0

DRAW_FILLING

Цветовая заливка между двумя уровнями

2

0

DRAW_BARS

Отображение в виде баров

4

0

DRAW_CANDLES

Отображение в виде свечей

4

0

DRAW_COLOR_LINE

Разноцветная линия

1

1

DRAW_COLOR_SECTION

Разноцветные отрезки

1

1

DRAW_COLOR_HISTOGRAM

Разноцветная гистограмма от нулевой линии

1

1

DRAW_COLOR_HISTOGRAM2

Разноцветная гистограмма на двух индикаторных буферах

2

1

DRAW_COLOR_ARROW

Отрисовка разноцветными стрелками

1

1

DRAW_COLOR_ZIGZAG

Разноцветный ZigZag

2

1

DRAW_COLOR_BARS

Разноцветные бары

4

1

DRAW_COLOR_CANDLES

Разноцветные свечи

4

1

 

Спасибо за ответ.

 

Я спрашиваю исходя из предположения, что часть математики в советнике и индикаторе совпадает - и никак не могу понять каких соотношений стоит придерживаться при написании программ

 
cindyrella:

Я спрашиваю исходя из предположения, что часть математики в советнике и индикаторе совпадает - и никак не могу понять каких соотношений стоит придерживаться при написании программ. 

Если нужен индикатор, то создаете индикатор через визард и кладете его в нужный каталог. Если нужен торгующий эксперт - создаете его.

Главным образом типы программ разделяются по каталогам, где они лежат (MQL5/Indicators, MQl5/Experts и тд). Это сделано для того, чтобы интерфейс программы мог разумно показывать в нужных местах списки индикаторов, скриптов и экспертов. 

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

 
Renat писал(а)  :

Если нужен индикатор, то создаете индикатор через визард и кладете его в нужный каталог. Если нужен торгующий эксперт - создаете его.

Главным образом типы программ разделяются по каталогам, где они лежат (MQL5/Indicators, MQl5/Experts и тд). Это сделано для того, чтобы интерфейс программы мог разумно показывать в нужных местах списки индикаторов, скриптов и экспертов. 

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

Спасибо.
 

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


странно как то. я что баг эксплуатирую у меня индикатор из одних графических объектов состоит. добавляет их и удаляет. Все работает
 
Prival:
странно как то. я что баг эксплуатирую у меня индикатор из одних графических объектов состоит. добавляет их и удаляет. Все работает

Индикаторы давно уже могут управлять графическими объектами - это в документации старая информация осталась.

Обязательно исправим.

 
cindyrella писал(а)  :

Как я понимаю - индикаторы не умеют торговать - т.е. обращаться к соответствующим функциям.

Могу ли я в советнике использовать возможности рисования на графике?

Почему возникло разделение на 2 типа программ? Отчего не делать все в одной используя или нет те или иные функции?

Я новичок в MQL - поясните пожалуйста.

На мой взгляд самое большое различие индикаторов и советников состоит в:

1. Советник на график по идеи можно добавить только один, а индюков (в зависимости от их начинки и задачи) несколько;

2. Индикаторы не не умеют на прямую обращаться к торговым функциям (не дано им торговати).

Лень смотреть могут они вызывать скрипты или нет, будем считать нет (а хочется)...


PS

Если часть математики совпадает (или ее можно вынести в индюки), то оптимальным вариантом буде это и сделать. Предполагаю, что в этом вопросе есть ряд ограничений...

 
Renat:

Индикаторы давно уже могут управлять графическими объектами - это в документации старая информация осталась.

Обязательно исправим.

Да, в этом месте осталось. Уберем.
 
Interesting:

На мой взгляд самое большое различие индикаторов и советников состоит в:

1. Советник на график по идеи можно добавить только один, а индюков (в зависимости от их начинки и задачи) несколько;

2. Индикаторы не не умеют на прямую обращаться к торговым функциям (не дано им торговати).

Лень смотреть могут они вызывать скрипты или нет, будем считать нет (а хочется)...

PS

Если часть математики совпадает (или ее можно вынести в индюки), то оптимальным вариантом буде это и сделать. Предполагаю, что в этом вопросе есть ряд ограничений...

 

Самое большое отличие в том, что индикатор критичен ко времени исполнения, т.к. событие OnCalculate вызывается на каждом тике. И если производить слишком сложные расчеты, терминал начинает "тормозить".

Советнмк использует событие NewTick почитайте.

И кроме этого разница в обработке события OnDeinit. 

 
vdv2001:

 

Самое большое отличие в том, что индикатор критичен ко времени исполнения, т.к. событие OnCalculate вызывается на каждом тике. И если производить слишком сложные расчеты, терминал начинает "тормозить".

Советнмк использует событие NewTick почитайте.

И кроме этого разница в обработке события OnDeinit. 

На счет сложных расчетов это понятно, подобные вещи я и назвал "РЯДОМ ОПРЕДЕЛЕННЫХ ОГРАНИЧЕНИЙ".
Причина обращения: