Property indicator chart windows

Using #property indicator_chart_window

in an EA, and if not why not and what do I have to do in its place / do to make it work ?

I have copied it from a Pivots_daily indicator where it already draws to the main window so why will it not work when being used in an EA ?

(in laymans terms please 🙂 )

there are indicators and EAs.

they work differently

Indicators . indicate (either in chart window or separately)

EAs .. don’t indicate (although the strategy tester can show indicators that the EA uses)

ok, but the indicator I am taking the code from draws to the main window, it is the daily pivots indicator.

why does #property indicator_chart_window work in the indicator but not in the EA, and if this is the case is there another way I can draw the same from within the EA ?

becuase #property indicator_chart_window is emant EXCLUSIVELY for indicator usage.

Why not just plant indicators to the chart and use iCustom(); command to access contents?

becuase #property indicator_chart_window is emant EXCLUSIVELY for indicator usage.

Why not just plant indicators to the chart and use iCustom(); command to access contents?

Yes, it does appear that way, but I am asking if anyone knows why AND if there is an alternative that I can use within the EA itself.

I dont know how to use iCustom yet, but I will learn now, thankyou.

Повесить индикатор в отдельное окно

Здравствуйте, есть сигнальный индикатор, по умолчанию он рисует на графике все.

А необходимо перенести его в отдельное окно (как тот же RSI или MACD). Как это сделать?

Простым переделыванием indicator_chart_window в indicator_separate_window здесь не обойтись, т.к. при компилировании принудительно возвращается в chart

no indicator window property is defined, indicator_chart_window is applied

Как эту ошибку обойти? Вероятно, там, где создаются графические сигналы необходимо что-то указать?

Подскажите, пожалуйста, буду очень благодарен

Лучше всего сначала прочесть всю документацию, благо она не очень большая,

если вас интересует тема программирования мкл4 / мкл5.

Здравствуйте, есть сигнальный индикатор, по умолчанию он рисует на графике все.

А необходимо перенести его в отдельное окно (как тот же RSI или MACD). Как это сделать?

Простым переделыванием indicator_chart_window в indicator_separate_window здесь не обойтись, т.к. при компилировании принудительно возвращается в chart

no indicator window property is defined, indicator_chart_window is applied

Как эту ошибку обойти? Вероятно, там, где создаются графические сигналы необходимо что-то указать?

Подскажите, пожалуйста, буду очень благодарен

Особенности написания Пользовательских Индикаторов

Написание пользовательских индикаторов в торговой системе MetaTrader также имеет ряд особенностей.

Для того, чтобы программа считалась пользовательским индикатором, необходимо наличие описания:

Для фиксации масштаба отдельного окна индикатора используются определения:

где «Min_Value» и «Max_Value» — соответствующие числовые значения. Например, для пользовательского индикатора RSI эти значения должны быть 0 и 100 соответственно.

Читайте также:  Gts 450 driver windows 10 64 bit

Количество индикаторных массивов, необходимых для отрисовки индикатора, должно быть задано при помощи определения:

где N может принимать значение от 1 до 8.

Цвет линий индикатора задается определениями:

где N — количество индикаторных массивов, определенное при помощи «#property indicator_buffer».

Существует ряд функций, которые позволяют управлять расчетом и визуализацией индикатора. Для иллюстрации используем пользовательский индикатор Ichimoku Kinko Hyo:

Функция «SetIndexStyle» управляет параметрами отрисовки индикаторного массива. Тип рисования DRAW_LINE предполагает отрисовку линий между значениями, определёнными в соответствующем индикаторном массиве. Тип рисования DRAW_HISTOGRAM, примененный к индикатору главного окна, имеет свои особенности. Гистограмма рисуется между соответствующими значениями двух индексных массивов: чётного (в нашем случае — SpanA_Buffer) и нечетного (SpanB_Buffer). При этом используется цвет того индексного массива, значение которого больше.

Функция «SetIndexDrawBegin» указывает, с какого элемента начинаются значимые данные индикаторного массива.

Функция «SetIndexBuffer» позволяет объявить любой одномерный массив типа «double» индексным массивов. При этом управлением индексными массивами занимается система. Именно по этой причине данным массивам не надо указывать размер.

Также к индикаторным массивам нельзя применять функцию ArrayResize — это бесполезно. Бесполезно применять к индикаторным массивам функцию ArrayInitialize, особенно в функции init, когда индикаторные массивы ещё не распределены. Инициализация индикаторных массивов производится автоматически при распределении и перераспределении памяти. В качестве инициализирующего значения используется EMPTY_VALUE либо значение, указанное функцией SetIndexEmptyValue. «Пустые» значения не отображаются.

Функция «SetIndexLabel» устанавливает имя, которое будет отображаться во всплывающих подсказках и в окне данных рядом с соответствующим значением (по умолчанию установлено имя «ValueN», где N — номер индексного массива). Если вместо имени передать NULL, то соответствующее значение не будет отображаться ни в подсказках, ни в окне данных. В нашем случае облака штрихуются при помощи гистограммы, а ограничиваются при помощи линии. При этом значения соответствующих «линейных» и «гистограммных» массивов одинаковы, и можно показывать только одно из них.

Функция «IndicatorCounted» позволяет организовать экономный расчет индикатора. Эта функция возвращает количество баров, имеющихся на момент предыдущего запуска индикатора, то есть, количество уже посчитанных (потенциально, если при предыдущем запуске не было ошибок и не было досрочного завершения) баров, которые не требуют пересчета. При переинициализации пользовательского индикатора либо при значительном обновлении исторических данных это количество автоматически сбрасывается в 0.

Рассмотрим ещё один пример. Пользовательский индикатор — Accelerator/Decelerator Oscillator:

Функция «IndicatorBuffers» задает количество используемых буферов для расчета индикатора. Как правило, эта функция вызывается, если используется большее количество индексных массивов, чем это необходимо для отрисовки индикатора. При этом управлением дополнительными массивами занимается система.

Функция «SetIndexDigits» управляет точностью вывода информации. В данном случае при расчете разницы двух скользящих средних и дальнейшей разницы результата и сигнальной линией, стандартной точности 4 знака после запятой явно недостаточно.

Функция «SetIndexDrawBegin» указывает, с какого элемента начинаются значимые данные индикаторного массива. В нашем примере сигнальная линия рассчитывается как простая скользящая средняя от другой простой скользящей средней, поэтому первые 38 значений индикатора подразумеваются пустыми и не подлежат отрисовке.

Читайте также:  Server manager windows настройка

Функция «IndicatorShortName» устанавливает так называемое короткое имя индикатора, которое будет отображаться в левом верхнем углу окна индикатора и в окне «DataWindow». В качестве короткого имени, если оно не задано, будет использовано название пользовательского индикатора. В данном примере нет необходимости использовать функцию SetIndexLabel, так как выводится всего одно значение. Поэтому для вывода единственного значения достаточно имени индикатора.

Функция «SetIndexStyle» управляет параметрами отрисовки индикаторного массива. Тип рисования DRAW_NONE говорит о том, что данную линию рисовать не надо. Дело в том, что в представленном индикаторе гистограмма должна быть раскрашена в 2 разных цвета. Данные из ExtBuffer0 распределяются по двум другим массивам — ExtBuffer1 и ExtBuffer2. Для того, чтобы не выводить в подсказки и в окно данных дублирующие данные, используется функция SetIndexLabel с параметром NULL. Тип рисования DRAW_HISTOGRAM, примененный к индикатору отдельного окна, позволяет рисовать гистограмму между нулевым значением и значением соответствующего массива (сравните с отрисовкой гистограммы в главном окне, описанной выше).

Входные параметры, которые принимают для расчета пользовательские индикаторы и функции, должны быть определены как «extern» и могут иметь любой тип.

Если входные параметры не установлены, то вызов соответствующего пользовательского индикатора производится в самом простом формате.

Здесь передача первых двух значений «NULL» и «0» означает, что будет использован текущий график. В качестве имени пользовательского индикатора используется имя соответствующего файла без расширения mq4. Предпоследний параметр 0 означает, что нас интересуют данные из самого первого индикаторного массива. Последний параметр 0 означает, что нас интересует значение самого последнего элемента (то есть самое свежее, текущее значение) запрашиваемого индикаторного массива.

Параметры передаются в функцию расчета пользовательского индикатора в том порядке, в котором они описаны. Например, вызов пользовательского индикатора «Ichimoku» с параметрами (9,26,52) будет выглядеть следующим образом:

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

Это означает, что будут использованы те значения, которыми инициализируются переменные «Tenkan», «Kijun», «Senkou», то есть 9, 26 и 52. Однако, если в одном эксперте вызывается один пользовательский индикатор с разными наборами параметров, то крайне не рекомендуется пользоваться умолчаниями.

Необходимо отметить, что излишнее количество пользовательских индикаторов, а также неправильно написанные пользовательские индикаторы могут существенно замедлить работу клиентского терминала!

Свойства программ (#property)

У каждой MQL4-программы можно указать дополнительные специфические параметры #property , которые помогают клиентскому терминалу правильно обслуживать программы без необходимости их явного запуска. В первую очередь это касается внешних настроек индикаторов. Свойства, описанные во включаемых файлах, полностью игнорируются. Свойства необходимо задавать в главном mq4-файле.

#property идентификатор значение

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

Указание компилятору на применение особого строгого режима проверки ошибок (см. Обновленный MQL4)

Путь к файлу с картинкой, которая будет показываться для программы EX4. Правила указания пути такие же, как и для ресурсов. Свойство должно указываться в главном модуле с исходным кодом MQL4. Файл иконки должен быть в формате ICO.

Читайте также:  Семейство unix систем linux

Ссылка на сайт компании-производителя

Версия программы, не более 31 символа

Краткое текстовое описание MQL4 -программы. Может присутствовать несколько description, каждый из которых описывает одну строку текста. Общая длина всех description не может превышать 511 символов с учетом переводов строк

Указывает размер стека для MQL4 программы, стек достаточного объема требуется в случае выполнения рекурсивных вызовов функций.

При запуске скрипта или эксперта на графике выделяется стек не менее 8Мб, для индикаторов свойство не работает — стек всегда фиксированного объема в 1Мб.

При запуске в тестере программе всегда выделяется стек в размере 8 Мб.

Библиотека; не назначается никакой стартовой функции, функции с модификатором export можно импортировать в других MQL4-программах

Выводить индикатор в окно графика

Выводить индикатор в отдельное окно

Фиксированная высота подокна индикатора в пикселях (свойство INDICATOR_HEIGHT)

Количество буферов для расчета индикатора

Нижнее ограничение шкалы отдельного окна индикатора

Верхнее ограничение шкалы отдельного окна индикатора

Задает метку для N-ой графической серии, отображаемую в окне DataWindow

Цвет для вывода линии N, где N — номер графической серии; нумерация с 1

Толщина линии в графической серии, где N — номер графической серии; нумерация с 1

Стиль линии в графической серии, указываемый с помощью значения из ENUM_LINE_STYLE. N — номер графической серии, нумерация с 1

Стиль рисования индикатора. N — номер графической серии, нумерация с 1

Горизонтальный уровень N в отдельном окне индикатора

Цвет горизонтальных уровней индикатора

Толщина горизонтальных уровней индикатора

Стиль горизонтальных уровней индикатора

Выводить окно подтверждения перед запуском скрипта

Выводить окно со свойствами перед запуском скрипта и запретить вывод окна подтверждения

Имя файла из папки \MQL4\Files\ для отправки на виртуальный сервер

Имя файла индикатора из папки \MQL4\Indicators\ для отправки на виртуальный сервер

Имя файла библиотеки из папки \MQL4\Libraries\ для отправки на виртуальный сервер

Свойства tester_file, tester_indicator и tester_library предназначены для описания списка файлов, требуемых для работы в виртуальном хостинге.

Файлы индикаторов, вызываемых в функции iCustom() с фиксированным именем, а также файлы всех библиотек, используемых в MQL4-программах, будут скопированы автоматически в процессе переноса.

Пример кода для передачи на хостинг файлов

#property tester_file «trade_patterns.csv» // файл с данными, которые будет читать советник
#property tester_indicator «smoothed_ma.ex4» // файл с пользовательским индикатором, указанным в iCustom() в виде переменной

Пример неявного указания имени индикатора в коде

string indicator_name= «smoothed_ma.ex4» ;
double val= iCustom ( NULL ,0,indicator_name,13,1,0);

Пример задания описания и номера версии

#property version «3.70» // текущая версия эксперта
#property description «ZigZag универсальный с паттернами Песавенто»
#property description «В настоящий момент в индикатор встроены несколько ZigZag с различными алгоритмами»
#property description «Имеется возможность встраивать большое количество других индикаторов, показывающих максимумы и »
#property description «минимумы и автоматически строить от этих минимумов и максимумов различные графические инструменты»

Оцените статью