Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 3392
- Рейтинг:
- Опубликован:
- 2012.09.05 08:12
- Обновлен:
- 2012.09.05 08:14
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Включаемый файл IncGUI_BitPic.mqh с классом графического элемента управления CBitPic для пиксельного рисования (рис. 1).
Рис. 1. Пример рисования классом CBitPic.
Возможно рисование точек разного размера - DrawDot(), линий по координатам - DrawLine(), линий по углу - DrawLineByAngle(), стрелок - DrawArrow(), различных фигур: прямоугольников - DrawRectangle(), треугольников - DrawTriangle(), окружностей, эллипсов, колец, секторов - DrawCircle(). Эллипс может быть повернут на заданный угол (так же и кольцо эллипса, сектор эллипса). Фигуры могут рисоваться с заливкой или только контур. Возможна печать текста - TypeText() (несколько вариантов шрифта и размера). Созданное изображение можно сохранить в файл bmp - SavePicture(), а также загрузить из файла готовое bmp изображение - LoadPicture() (файл должен быть без сжатия, 24 или 32 бита).
Для использования элемента управления необходимо подключить файл IncGUI_BitPic.mqh:
#include <IncGUI_BitPic.mqh>
Затем, объявить класс, например, с именем p:
CBitPic p;
Класс создан с использованием принципов изложенных в статьях:
- Пользовательские графические элементы управления. Часть 1. Создание простого элемента управления
- Пользовательские графические элементы управления. Часть 2. Библиотека элементов управления
- Пользовательские графические элементы управления. Часть 3. Формы
Соответственно, принцип его применение аналогичен принципам использования элементов управления описанных в статьях: в первую очередь вызывается метод инициализации Init(), для включения видимости используется метод Show(), для скрытия и удаления по завершению работы метод Hide() и т.д.
В отличие от класса cIntBMP рисование выполняется несколько иначе, в cIntBMP цвет рисования указывался в функциях рисования фигур, здесь же рисование выполняется в следующем порядке: указывается цвет фона - SetBGColor(), выполняется очистка - Clear(), перед рисованием задается толщина рисования - SetDrawWidth(), цвет рисования SetDrawColor(), заливки - SetFillColor(), указывается нужна ли заливка - SetFilled(), или рисование выполняется только контуром, после этого вызываются функции рисования. Разумеется, по мере необходимости можно менят цвет рисования, заливки и пр. После рисования необходимо вызывать метод Redraw().
В следующей таблице приведены все методы класса:
Метод | Назначение и параметры |
---|---|
void Clear() | Очистка. |
void DrawArrow( int aX1, int aY1, int aX2, int aY2, bool aBoth=false ) | Рисование стрелки. aX1, aY1 - координаты начала, aX2, aY2 - координаты конца, aBoth - стрелки на обеих концах. |
void DrawCircle( int aX, int aY, int aR, double aR2K=0, double aFromAngle=0, double aToAngle=0, double aRatio=1, double aRotateAngle=0 ) | Рисование окружности, кольца, эллипса, сектора. aX, aY - координаты центра; aR2K - радиус внутренней окружности (от 0 до 1); aFromAngle, aToAngle - начальный и конечный углы сектора; aRatio - коэфициент сжатия (положительное число, меньше 1 - сжатие по вертикали, больше 1 - расширение по вертикали); aRotateAngle - угол поворота. |
void DrawDot( int aX, int aY ) | Рисование точки. aX, aY - координаты. |
void DrawLine( int aX1, int aY1, int aX2, int aY2 ) | Рисование линии. aX1, aY1 - координаты начала, aX2, aY2 - координаты конца. |
void DrawLineByAngle( int aX1, int aY1, double aAngle, int aLength ) | Рисование линии по углу. aX1, aY1 - координаты начала, aAngle - угол, aLength - длина. |
void DrawRectangle( int aX1, int aY1, int aX2, int aY2 ) | Рисование прямоугольника. aX1, aY1 - координаты левого верхнего угла, aX2, aY2 - координаты правого нижнего угла. |
void DrawTriangle( int aX1, int aY1, int aX2, int aY2, int aX3, int aY3 ) | Рисование треугольника. aX1, aY1, aX2, aY2, aX3, aY3 - координаты вершин. |
int Event( const int id, const long & lparam, const double & dparam, const string & sparam ) | Обработчик событий. Вызывается из функции OnChartEvent() эксперта. |
int EventX() | Координата Х последнего клика на граф. объекте. |
int EventY() | Координата Y последнего клика на граф. объекте. |
void Fill( int aX, int aY ) | Заливка области одного цвета цветом заливки. aX, aY - координаты. |
void GetData( uint & aData[] ) | Получение массива данных изображения. aData - массив в котором возвращаются данные. |
color GetPixel( int aX, int aY ) | Получение цвета пикселя по заданным координатам. aX, aY - координаты. |
int Height() | Получение высоты граф. объекта. |
void Hide() | Удаление граф. объекта с графика. |
void Init( string aName="CBitPic", int aWidth=300, int aHeight=200 ) | Инициализация. aName - имя графического объекта, aWidth - ширина, aHeight - высота. |
int Left() | Получение координаты левого края граф. объекта. |
bool LoadPicture( string aFileName, bool aFileCommon=false ) | Загрузка изображения из bmp файла. aFileName - имя файла, aFileCommon - файл находится в общей папке MQL5/Files или в папке MQL5/Files терминала. Допускаются файлы без сжатия, 24-ех и 32-ух битные. |
void Redraw() | Перерисовка граф. объекта. |
void Refresh() | Обновление (удаление и создание). |
bool SavePicture( string aFileName, bool aFileCommon=false ) | Сохранение изображения в bmp файле. aFileName - имя файла, aFileCommon - сохранять в общей папке MQL5/Files или в папке MQL5/Files терминала. |
void SetBGColor( uchar aR=0, uchar aG=0, uchar aB=255 ) | Установка цвета фона. aR, aG, aB - значение компонентов цвета. |
void SetBGColor( color aColor=clrBlue ) | Установка цвета фона. aColor - цвет.После установки цвета необходимо вызывать метод Clear(). |
void SetData( uint & aData[] ) | Установка массива данных изображения. aData - массив данных. |
void SetDrawColor( uchar aR=255, uchar aG=255, uchar aB=0) | Установка цвет рисования. aR, aG, aB - значение компонентов цвета. |
void SetDrawColor( color aColor=clrYellow ) | Установка цвет рисования. aColor - цвет. |
void SetDrawWidth( int aWidth ) | Установка толщины рисования. aWidth - толщина от 1 до 5. |
void SetFillColor( uchar aR=255, uchar aG=0, uchar aB=0 ) | Установка цвета заливки. aR, aG, aB - значение компонентов цвета. |
void SetFillColor( color aColor=clrRed ) | Установка цвета заливки. aColor - цвет. |
void SetFilled( bool aFilled=true ) | Установка режима заливки. aFilled - с заливкой/без заливки. |
void SetFont( int aType=3 ) | Установка шрифта. aType - тип (0-6). 0 - Small Fonts 6, 1 - Small Fonts 7, 2 - Small Fonts 8, 3 - Arial 8, 4 - Arial Narrow 8, 5 - Arial Black 8, 6 - Courier New 8. |
void SetPos( int aLeft, int aTop ) | Установка координат левого верхнего угла граф. объекта. aLeft - расстояние от левого края, aTop - от верхнего края. |
void SetPosLeft( int aLeft ) | Установка координаты левого края граф. объекта. aLeft - расстояние от левого края. |
void SetPosTop( int aTop ) | Установка координаты верхнего края граф. объекта. aTop - расстояние от верхнего края. |
void SetSize( int aWidth, int aHeight ) | Установка размера. aWidth - ширина, aHeight -высота. |
void SetSubWindow( int aNumber ) | Установка подокна по номеру. aNumber - номер подокна. |
void SetSubWindow( string aName ) | Установка подокна по имени. aName - имя подокна. |
void SetTag( string aValue ) | Установка тэга. aValue - текст. |
void Show() | Включение видимости граф. объекта. |
void Show( int aLeft, int aTop ) | Включение видимости граф. объекта на указанной позиции. aLeft - расстояние от левого края, aTop - от верхнего края. |
string Tag() | Получение тэга. |
int Top() | Получение координаты верхнего края граф. объекта. |
void TypeText( int aX, int aY, string aText, int aDirection=0, int aAlign=0 ) | Печать текста. aX, aY - координаты, aText - текст, aDirection - направление (0 - слева направо, 1 - сверху вниз, 2 - справа налево перевернутый, 3 - снизу вверх), aAlignе - выравнивание (0 - по началу текста, 1 - по концу текста). |
bool Visible() | Получение видимости граф. объекта. |
int Width() | Получение ширины граф. объекта. |
В эксперте eBitPicTest.mq5 пример использования класса CBitPic, эксперт рисует на графике изображение как на рис. 1 и сохраняет его в файл с именем CBitPic.bmp (должен появиться в папке MQL5/Files папки данных терминала). Если на изображении щелкнуть мышкой, в комментарии графика отобразятся координаты точки, ее цвет, и в этом же месте будет нарисована "снежинка" (как в правом верхнем углу на рис. 1).

Классический вариант индикатора RVI (Relative Vigor Index), который можно располагать, зафиксировав таймфрейм индикатора на значении, отличающемся от таймфрейма графика, и выполненный в виде облака

Индекс новых максимумов-новых минимумов вычисляется как разность между числом валютных пар, показавших максимум за период, и числом валютных пар, показавших минимум за период.

Сглаженный ATR, показывает цветом растёт или слабеет тренд.

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