Тимур Машнин - Язык программирования MQL5 - Продвинутое использование торговой платформы MetaTrader 5

Здесь есть возможность читать онлайн «Тимур Машнин - Язык программирования MQL5 - Продвинутое использование торговой платформы MetaTrader 5» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. ISBN: , Издательство: Литагент Ридеро, Жанр: Прочая околокомпьтерная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Создание пользовательских индикаторов и советников для торговой платформы MetaTrader 5 с использованием языка программирования MQL5.

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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

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

int iMA (

string symbol, // имя символа

ENUM_TIMEFRAMES period, // период

int ma_period, // период усреднения

int ma_shift, // смещение индикатора по горизонтали

ENUM_MA_METHOD ma_method, // тип сглаживания

ENUM_APPLIED_PRICE applied_price // тип цены или handle

);

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

// – - get MA handles

ExtFastMaHandle=iMA (NULL,0,InpFastEMA,0,MODE_EMA, InpAppliedPrice);

ExtSlowMaHandle=iMA (NULL,0,InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

где используются свойства индикатора:

// – - input parameters

input int InpFastEMA=12; // Fast EMA period

input int InpSlowEMA=26; // Slow EMA period

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price

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

В папке Indicators/Examples редактора MQL5 есть нужный нам индикатор – это файл Custom Moving Average.mq5.

Для вызова того индикатора воспользуемся функцией iCustom:

int iCustom (

string symbol, // имя символа

ENUM_TIMEFRAMES period, // период

string name // папка/имя_пользовательского индикатора

…// список входных параметров индикатора

);

В функции OnInit () индикатора MACD изменим код:

// ExtFastMaHandle=iMA (NULL,0,InpFastEMA,0,MODE_EMA, InpAppliedPrice);

// ExtSlowMaHandle=iMA (NULL,0,InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

ExtFastMaHandle=iCustom (NULL,0,«Examples\\Custom Moving Average», InpFastEMA,0,MODE_EMA, InpAppliedPrice);

ExtSlowMaHandle=iCustom (NULL,0,«Examples\\Custom Moving Average», InpSlowEMA,0,MODE_EMA, InpAppliedPrice);

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

Еще один способ получить хэндл пользовательского индикатора это использовать - фото 14

Еще один способ получить хэндл пользовательского индикатора, это использовать функцию IndicatorCreate:

int IndicatorCreate (

string symbol, // имя символа

ENUM_TIMEFRAMES period, // период

ENUM_INDICATOR indicator_type, // тип индикатора из перечисления ENUM_INDICATOR

int parameters_cnt=0, // количество параметров

const MqlParam& parameters_array [] =NULL, // массив параметров

);

В функции OnInit () индикатора MACD изменим код:

MqlParam params [];

ArrayResize (params,5);

params [0].type =TYPE_STRING;

params[0].string_value=«Examples\\Custom Moving Average»;

// – - set ma_period

params [1].type =TYPE_INT;

params[1].integer_value=InpFastEMA;

// – - set ma_shift

params [2].type =TYPE_INT;

params[2].integer_value=0;

// – - set ma_method

params [3].type =TYPE_INT;

params[3].integer_value=MODE_EMA;

// – - set applied_price

params [4].type =TYPE_INT;

params[4].integer_value=InpAppliedPrice;

// – - initialization done

ExtFastMaHandle=IndicatorCreate (NULL, NULL, IND_CUSTOM,4,params);

params[1].integer_value=InpSlowEMA;

ExtSlowMaHandle=IndicatorCreate (NULL, NULL, IND_CUSTOM,4,params);

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

После получения хэндла индикатора, если он используется в коде один раз, для экономии памяти неплохо использовать функцию IndicatorRelease:

bool IndicatorRelease (

int indicator_handle // handle индикатора

);

которая удаляет хэндл индикатора и освобождает расчетную часть индикатора.

Хорошо, хэндл индикатора мы получили. Как же теперь извлечь его данные?

Делается это в функции OnCalculate с помощью функции CopyBuffer:

int CopyBuffer (

int indicator_handle, // handle индикатора

int buffer_num, // номер буфера индикатора

int start_pos, // откуда начнем

int count, // сколько копируем

double buffer [] // массив, куда будут скопированы данные

);

При этом функция CopyBuffer () распределяет размер принимающего массива под размер копируемых данных.

Напомним, что это работает, если принимающий массив является просто динамическим массивом.

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

В индикаторе MACD именно такая ситуация. Промежуточные массивы ExtFastMaBuffer [] и ExtSlowMaBuffer [] привязаны к буферам индикатора:

SetIndexBuffer (2,ExtFastMaBuffer, INDICATOR_CALCULATIONS);

SetIndexBuffer (3,ExtSlowMaBuffer, INDICATOR_CALCULATIONS);

И в эти массивы производится копирование буфера индикатора Moving Average на основе его хэндлов:

if (CopyBuffer (ExtFastMaHandle,0,0,to_copy, ExtFastMaBuffer) <=0)

{

Print («Getting fast EMA is failed! Error», GetLastError ());

return (0);

}

if (CopyBuffer (ExtSlowMaHandle,0,0,to_copy, ExtSlowMaBuffer) <=0)

{

Print («Getting slow SMA is failed! Error», GetLastError ());

return (0);

}

Если убрать привязку массивов ExtFastMaBuffer [] и ExtSlowMaBuffer [] к буферам индикатора, тогда клиентский терминал выдаст ошибку:

Происходит это потому что при загрузке индикатора значение tocopy равно - фото 15

Происходит это потому, что при загрузке индикатора значение to_copy равно размеру ценовой истории, а дальше to_copy=1 и производится частичное копирование в массивы ExtFastMaBuffer [] и ExtSlowMaBuffer [], при этом их размеры становятся равны 1.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5»

Представляем Вашему вниманию похожие книги на «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5»

Обсуждение, отзывы о книге «Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x