Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 3070
- Рейтинг:
- Опубликован:
- 2015.03.18 09:39
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Класс предназначен для создания интерактивных кнопок на графике цены с различными состояниями.
Был написан для конкурса, организованным щедрым TheXpert. Спасибо.
Иллюстрация работы класса CBtn
Методы класса
Create(long chart_id,int sub_wnd,string name,int x,int y,int dx,int dy) - создание кнопки с параметрами:
- идентификатор окна
- номер подокна
- имя кнопки
- координата х
- координата y
- размер по горизонтали
- размер по вертикали
Resources(string img_up,string img_up_active="",string img_dn="",string img_dn_active="",string img_up_disable="",string img_dn_disable="",string img_mask="") - задание изображений для различных состояний кнопки:
- обычная отжатая кнопка
- кнопка с наведенным указателем
- нажатая кнопка
- нажатая с наведенным указателем мыши
- отключенная (disable) кнопка
- маска контура кнопки
SetUseMask(ENUM_USEMASK mask,int x=0,int y=0) - установка маски по цвету указанного пикселя, маска строится из изображения обычной отжатой кнопки.
- используемый тип маски
- координата х
- координата y
SetUseMask(ENUM_USEMASK mask,uint acolor) - установка маски по цвету, маска строится из изображения обычной отжатой кнопки.
- используемый тип маски
- цвет
SetCorner(ENUM_BASE_CORNER corner) - установка угола графика, к которому привязана кнопка
SetAnchor(ENUM_ANCHOR_POINT anchor) - установка способа привязки кнопки
SetX(int x) - установка координаты х
SetY(int y) - установка координаты y
SetXY(int x,int y) - установка координат х и y одной командой
On(bool state) - установка статуса кнопки (нажата-true/отжата-false)
Enable(bool state) - установка отключения (disable) кнопки
Paint(void) - отрисовка кнопки
Event(int id,long lparam,double dparam,string sparam) - передача кнопке событий
все параметры дублируются из функции OnChartEvent
GetX(void) - получение координаты х
GetY(void) - получение координаты y
GetEnable(void) - получение статуса отключения кнопки
GetOn(void) - получение статуса нажатия кнопки
GetCorner(void) - получение угла графика, к которому привязана кнопка
GetAnchor(void) - получение способа привязки кнопки
AddText(int x,int y,string font_name,int font_size,color text_color,string text) - добавление текста на кнопку
- координата х
- координата y
- имя шрифта
- размер шрифта
- цвет текста
- текст
Text(string text) - обновление текста кнопки (не работает без вызова AddText(...))
Создание кнопки
По умолчанию создается кнопка со следующими параметрами:
- отжата
- доступна
- угол привязки к графику - левый верхний
- угол привязки кнопки - левый верхний
Установка маски кнопки
По умолчанию создается маска из изображения нормальной отжатой кнопки. Прозрачные пиксели служат маской.
- UseMask(MASK_STANDALONE_RESOURCE) - для маски используется изображение указанное в Resources(). Если изображение не задано - вся площадь кнопки (прямоугольник) будет считаться рабочей областью.
- UseMask(MASK_PIXEL,x,y) - для маски используется цвет указанного пикселя. Если цвет пикселя отличается от указанного - он становится маской. Если координаты не указаны, то берется точка с координатами [0,0].
- UseMask(MASK_COLOR,color) - для маски используется указанный цвет. Если цвет пикселя отличается от указанного - он становится маской. Цвет указывается в формате ARGB.
Пример
//+------------------------------------------------------------------+ //| 3dButtons.mq5 | //| Copyright 2015, fyords | //| https://login.mql5.com/ru/users/fyords | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, fyords" #property link "https://login.mql5.com/ru/users/fyords" #property version "1.01" //+------------------------------------------------------------------+ //| Insert resources | //+------------------------------------------------------------------+ #resource "img\\200_1.bmp" #resource "img\\200_2.bmp" #resource "img\\200_3.bmp" #resource "img\\200_4.bmp" #resource "img\\200_5.bmp" #resource "img\\200_6.bmp" //+------------------------------------------------------------------+ #include "Class.mqh" //+------------------------------------------------------------------+ enum Adjust { UpperLeft, UpperRight, LowerLeft, LowerRight }; //+------------------------------------------------------------------+ //| Input property | //+------------------------------------------------------------------+ input Adjust adj_corner=UpperLeft; //Corner //+------------------------------------------------------------------+ //| Global variables | //+------------------------------------------------------------------+ CBtn *btn[]; int num_buttons; //+------------------------------------------------------------------+ //| Initialization function | //+------------------------------------------------------------------+ int OnInit() { long wnd=ChartID(); int sub_wnd=ChartWindowOnDropped(); ArrayFree(btn); int n=0; num_buttons=0; for(int y=0;y<3;y++) { for(int x=0;x<3;x++) { ArrayResize(btn,n+1); btn[n]=new CBtn; btn[n].Create(wnd,sub_wnd,"3dButtons_"+(string)MathRand(),x*152+10,y*152+10,200,200); btn[n].Resources("img\\200_1.bmp","img\\200_2.bmp","img\\200_3.bmp","img\\200_4.bmp","img\\200_5.bmp","img\\200_6.bmp"); btn[n].AddText(80,80,"Arial",25,clrWhite,"Button"+(string)(n+1)); switch(adj_corner) { case UpperLeft: btn[n].SetAnchor(ANCHOR_LEFT_UPPER); btn[n].SetCorner(CORNER_LEFT_UPPER); break; case UpperRight: btn[n].SetAnchor(ANCHOR_RIGHT_UPPER); btn[n].SetCorner(CORNER_RIGHT_UPPER); break; case LowerLeft: btn[n].SetAnchor(ANCHOR_LEFT_LOWER); btn[n].SetCorner(CORNER_LEFT_LOWER); break; case LowerRight: btn[n].SetAnchor(ANCHOR_RIGHT_LOWER); btn[n].SetCorner(CORNER_RIGHT_LOWER); break; } btn[n].Paint(); n++; } } ChartRedraw(); num_buttons=ArraySize(btn); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=0;i<num_buttons;i++) delete btn[i]; ArrayFree(btn); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { for(int i=0;i<num_buttons;i++) btn[i].Event(id,lparam,dparam,sparam); }

Индикатор Leading_Signal отображает информацию о тренде в виде двухцветной линии и о сигналах для сделок при помощи индикатора Leading.

Индикатор HLR_Signal отображает информацию о тренде в виде двухцветной линии и о сигналах для сделок при помощи индикатора HLR.

Класс прозрачной кнопки.

Индикатор TrendlessAG с возможностью изменения таймфрейма индикатора во входных параметрах.