Читаем Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное полностью

В этом примере команда #property script_show_inputs используется для скриптов, для индикаторов ее можно опустить.

Основное отличие input переменных от других типов переменных состоит в том, что изменить их значение может только пользователь в диалоговом окне индикатора.

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

Поэтому, если вы хотите при расчетах использовать измененное значение входного параметра, нужно использовать промежуточную переменную.

Помимо input переменных MQL5-код использует локальные переменные, статические переменные, глобальные переменные и extern переменные.

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

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

Глобальные переменные, как правило, объявляются после свойств индикатора, входных параметров и массивов буферов индикатора, перед функциями.

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

Здесь видно, что input переменные – это те же глобальные переменные, за исключением опции – их значение не может быть изменено в любом месте программы.

Если глобальную или локальную переменную объявить со спецификатором const – это так же не позволит изменять значение этой переменной в процессе выполнения программы.

Статические переменные определяются модификатором static, который указывается перед типом данных.

Со статическими переменными все немного сложнее, но легче всего их понять, сравнивая статические переменные с локальными и глобальными переменными.

В принципе, статическая переменная, объявленная там же, где и глобальная переменная, ничем не отличается от глобальной переменной.

Хитрость начинается, если локальную переменную объявить с модификатором static.

В этом случае, после выполнения блока кода, память, выделенная под статическую переменную, не освобождается. И при следующем выполнении того же блока кода, предыдущее значение статической переменной можно использовать.

Хотя область видимости такой статической переменной ограничивается те же самым блоком кода, в котором она была объявлена.

extern переменные это аналог статических глобальных переменных. Нельзя объявить локальную переменную с модификатором extern.

Отличие extern переменных от статических глобальных переменных проще всего продемонстрировать на индикаторе MACD.

Индикатор MACD имеет включаемый файл MovingAverages, обозначенный с помощью директивы #include и расположенный в папке Include.

Если в файле MovingAverages и файле MACD одновременно объявить extern-переменную:

extern int a=0;

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

Если же в файле MovingAverages и файле MACD одновременно объявить статическую глобальную переменную:

static int a=0;

тогда при компиляции обоих файлов возникнет ошибка.

Помимо команды #include полезной является также директива #define, которая позволяет делать подстановку выражения вместо идентификатора, например:

#define PI 3.14

<p>Хэндл индикатора</p>

Начнем с цитаты:

HANDLE идентифицирует объект, которым Вы можете манипулировать. Джеффри РИХТЕР "Windows для профессионалов".

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

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

Хэндл индикатора представляет собой переменную типа int и объявляется, как правило, после объявления массивов буферов индикатора, вместе с глобальными переменными, например в индикаторе MACD:

Объявляются два хэндла – int ExtFastMaHandle и int ExtSlowMaHandle.

Здесь хэндлы индикаторов – это указатели на индикатор скользящего среднего с разными периодами 12 и 26.

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

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

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

Стандартная функция для индикатора скользящего среднего это функция iMA.

И в индикаторе MACD хэндлы индикатора скользящего среднего получаются с помощью вызова функции iMA в функции OnInit.

где используются свойства индикатора – InpFastEMA, InpSlowEMA и InpAppliedPrice.

Предположим, что мы хотим использовать не стандартный, а пользовательский индикатор.

Перейти на страницу:

Похожие книги

1С:Предприятие. Зарплата и кадры. Секреты работы
1С:Предприятие. Зарплата и кадры. Секреты работы

Книга посвящена ведению автоматизированного учета заработной платы на предприятиях, в организациях и учреждениях в программе "1С: Предприятие. Зарплата и Кадры". Излагаются принципы работы системы с учетом всех нормативных требований. Представлены сведения об автоматизированном формировании бухгалтерских проводок и аналитических отчетов широкого спектра, ведении первичной документации и многое другое. Обсуждаются схемы движения документов во всех разделах учета заработной платы, аспекты налогового учета и особенности ведения персонифицированного учета в новом плане счетов. Изложение материала сопровождается практическими примерами, позволяющими быстрее понять и усвоить приемы и методы работы с системой "1С: Предприятие". Рассматриваются ошибки и сложности, которые могут возникнуть при работе с программой. Книга открывает широкие возможности для дальнейшего самостоятельного изучения данной темы.Для менеджеров, бухгалтеров и операторов, не имеющих опыта работы с системой "1С: Предприятие"

Дмитрий Николаевич Рязанцев , Наталья Александровна Рязанцева

Финансы / Личные финансы / Финансы и бизнес
От хорошего к великому. Почему одни компании совершают прорыв, а другие нет...
От хорошего к великому. Почему одни компании совершают прорыв, а другие нет...

Как превратить среднюю (читай – хорошую) компанию в великую?На этот вопрос отвечает бестселлер «От хорошего к великому». В нем Джим Коллинз пишет о результатах своего шестилетнего исследования, в котором компании, совершившие прорыв, сравнивались с теми, кому это не удалось. У всех великих компаний обнаружились схожие элементы успеха, а именно: дисциплинированные люди, дисциплинированное мышление, дисциплинированные действия и эффект маховика.Благодаря этому компании добивались феноменальных результатов, превосходящих средние результаты по отрасли в несколько раз.Книга будет интересна собственникам бизнеса, директорам компаний, директорам по развитию, консультантам и студентам, обучающимся по специальности «менеджмент».

Джим Коллинз

Деловая литература / Личные финансы / Финансы и бизнес