Чтение онлайн

ЖАНРЫ

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

В итоге на белом фоне отображается надпись «Text».

Также можно вывести текст на готовое изображение:

#resource "\\Images\\image.bmp»

uint ExtImg [10000];

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

//| Custom indicator initialization function |

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

int OnInit 

{

ObjectCreate (0,«Image», OBJ_BITMAP_LABEL,0,0,0);

ObjectSetString (0,«Image», OBJPROP_BMPFILE,»:: IMG»);

uint width=100;

uint height=100;

ResourceReadImage("::Images\\image.bmp», ExtImg, width, height);

TextOut («Text», 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0xffffff, COLOR_FORMAT_XRGB_NOALPHA);

ResourceCreate (»:: IMG», ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

ChartRedraw ;

// – —

return (INIT_SUCCEEDED);

}

Здесь

функция ResourceReadImage считывает существующее изображение из папки Images окна Navigator редактора MQL5 в пиксельный массив::IMG, связанный с объектом «Графическая метка», а функция TextOut выводит в пиксельный массив слово «Text».

То же самое можно проделать и с объектом «Рисунок»:

#resource "\\Images\\image.bmp»

uint ExtImg [10000];

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

//| Custom indicator initialization function |

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

int OnInit 

{

// – —

return (INIT_SUCCEEDED);

}

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

//| Custom indicator iteration function |

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

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 [])

{

// – —

ArraySetAsSeries (time, true);

ArraySetAsSeries (high, true);

ArraySetAsSeries (low, true);

ArraySetAsSeries (close, true);

ObjectDelete (0,«Image»);

ObjectCreate (0,«Image», OBJ_BITMAP,0,time [1],close [1]);

ObjectSetString (0,«Image», OBJPROP_BMPFILE,»:: IMG»);

uint width=100;

uint height=100;

ResourceReadImage("::Images\\image.bmp», ExtImg, width, height);

TextOut («Text», 10,10,TA_LEFT|TA_TOP, ExtImg,100,100,0xffffff, COLOR_FORMAT_XRGB_NOALPHA);

ResourceCreate (»:: IMG», ExtImg,100,100,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

ChartRedraw ;

// – - return value of prev_calculated for next call

return (rates_total);

}

//+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

void OnDeinit (const int reason) {

ObjectsDeleteAll (0, -1, -1);

}

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

но с другим временным периодом.

Для этого используем графический объект OBJ_CHART.

В качестве входных параметров индикатора используем символ графика и его период:

#property indicator_chart_window

input string InpSymbol=«EURUSD»; // Символ

input ENUM_TIMEFRAMES InpPeriod=PERIOD_CURRENT; // Период

В функции OnInit создадим графический объект График:

int OnInit 

{

if (!ObjectCreate (0,«Chart», OBJ_CHART,0,0,0))

{

return (false);

}

По умолчанию точка привязки этого объекта – левый верхний угол графика.

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

ObjectSetInteger (0,«Chart», OBJPROP_XDISTANCE,10);

ObjectSetInteger (0,«Chart», OBJPROP_YDISTANCE,20);

ObjectSetInteger (0,«Chart», OBJPROP_XSIZE,300);

ObjectSetInteger (0,«Chart», OBJPROP_YSIZE,200);

ObjectSetString (0,«Chart», OBJPROP_SYMBOL, InpSymbol);

ObjectSetInteger (0,«Chart», OBJPROP_PERIOD, InpPeriod);

ObjectSetInteger (0,«Chart», OBJPROP_DATE_SCALE, true);

ObjectSetInteger (0,«Chart», OBJPROP_WIDTH,1);

ObjectSetInteger (0,«Chart», OBJPROP_PRICE_SCALE, true);

ObjectSetInteger (0,«Chart», OBJPROP_SELECTABLE, true);

ObjectSetInteger (0,«Chart», OBJPROP_SELECTED, true);

ObjectSetInteger (0,«Chart», OBJPROP_COLOR, clrBlue);

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

long chartId=ObjectGetInteger (0,«Chart», OBJPROP_CHART_ID);

Откроем наш график символа, к которому мы хотим присоединить индикатор, и нажав правой кнопкой мышки, выберем пункт в контекстном меню Шаблоны и Сохранить шаблон.

Теперь мы можем перенести на наш графический объект все настройки и индикаторы графика символа:

ChartApplyTemplate(chartId,"my.tpl»);

ChartRedraw (chartId);

// – —

return (INIT_SUCCEEDED);

}

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

Функция PlaySound

Функция PlaySound воспроизводит звуковой файл. Например, это можно делать при появлении сигнала индикатора для напоминания:

bool PlaySound (

string filename // имя WAV-файла

);

В качестве примера добавим звуковой сигнал в наш индикатор Impulse keeper при появлении первого сигнала на покупку или продажу.

Скачаем какой-нибудь WAV-сигнал из Интернета и поместим его файл в папку Sounds терминала.

Добавим код в индикатор Impulse keeper:

Поделиться с друзьями: