Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Clock - библиотека для MetaTrader 5
- Просмотров:
- 2501
- Рейтинг:
- Опубликован:
- 2017.11.16 09:36
- Обновлен:
- 2017.11.16 09:39
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Библиотека (Clock.mqh) помогает создавать аналоговые часы в виде графических ресурсов.
Возможности
Использование библиотеки продемонстрировано в следующем исходном коде:
// MQL4&5-code // Пример кроссплатформенного советника, создающего на графике аналоговые часы #property strict #include <fxsaber\Clock.mqh> // https://www.mql5.com/ru/code/19388 const string ObjName = __FILE__; // Имя Bitmap-объекта для вывода часов const string ResourceName = "::" + ObjName; // Имя ресурса, где будут формироваться часы // Создали часы из настроек соответствующего INI-файла CLOCK Clock("Clocks\\Clock01\\Clock01.INI", ResourceName); void OnINIt() { // Создали графический объект для вывода часов ObjectCreate(0, ObjName, OBJ_BITMAP_LABEL, 0, 0, 0); // Указали ему имя ресурса, где расположены часы ObjectSetString(0, ObjName, OBJPROP_BMPFILE, 0, ResourceName); // Добавили возможность выбирать объект для перемещения мышью ObjectSetInteger(0, ObjName, OBJPROP_SELECTABLE, true); // Включили секундный таймер, чтобы обновлять часы EventSetTimer(1); } void OnTimer() { // Устанавливаем текущее время на часах Clock.SetTime(TimeLocal()); // Сделали перерисовку чарта, чтобы изменения сразу стали видны ChartRedraw(); }
После запуска на графике появятся такие идущие часы:
Индикатор
Для использования сразу "из коробки" приложен кроссплатформенный индикатор Clock.mq5.
В нем реализована интерактивная смена "скинов" - варианты часов (распакуйте ZIP-архив) переключаются клавишами ВВЕРХ/ВНИЗ на клавиатуре.
Особенности
- Часы растровые (не векторные);
- Повороты часовых стрелок выполнены без сглаживания;
- Библиотека работает в MetaTrader 4/5.
Формирование часов
Оригиналы часов из примера взяты из интернета быстрым поиском flash-часов (swf-файлы есть в ZIP-архиве), которые удобны тем, что в их внутренностях уже есть нужные графические представления циферблатов, стрелок и т.д. Но можно, конечно, использовать и любые другие источники. Например, векторные готовые файлы в том же интернете. Или рисовать самому.
INI-файлы (см. примеры) задают настройки формирования часов послойно. Настройки редактируются в любом текстовом редакторе и выглядят так
ImageName = ClockFace.bmp BoundX = 0 // X-координата нулевой точки внутри bmp-картинки (слоя) BoundY = 0 // Y-координата нулевой точки внутри bmp-картинки (слоя) X = 0 // X-координата нулевой точки внутри формирующегося изображения (из слоев) Y = 0 // Y-координата нулевой точки внутри формирующегося изображения (из слоев) Rotate = 0 // Скорость вращения A = 100% // Какая часть Alpha-канала используется R = 100% // Какая часть Red-канала используется G = 100% // Какая часть Green-канала используется B = 100% // Какая часть Blue-канала используется
Чем ниже описание слоя в файле настроек, тем выше он располагается над ранее описанными. Какого-то специального ограничения на количество слоев нет.
Из-за такого построения изображений библиотека может использоваться для формирования не только часов, но и других статичных/динамических объектов. Для динамики часов достаточно было иметь возможность задавать только вращение. Но в код буквально несколькими строками могут быть добавлены и другие виды движений (сдвиг, масштабирование и т.д.). Здесь исходник служит лишь простым примером реализации подобного подхода при описании изображений.
Возвращаясь к часам, за счет послойной работы оригинально (подсмотрено во flash-часах) реализованы тени стрелок и подсветки.
Если хочется сделать, например, циферблат прозрачным, то достаточно в соответствующем INI-файле задать Alpha-канал меньше 100%, получив такой результат:
На момент публикации аналоговые часы в Маркете практически отсутствовали. В CodeBase нашелся такой вариант.
Из оригинального в библиотеке написана только LAYER::Rotate, отвечающая за поворот. Возможно, эта функция побудит к созданию сторонних решений на основе динамических графических ресурсов, как это произошло с "первым блином" - часами.
Советник отслеживает позиции по всем символам и по всем magic'ам. Если позиция открыта уже "Waiting for seconds" и её прибыль "Take Profit" пунктов, закрывает позиции. Если прибыль не достигла "Take Profit" пунктов - тогда переносит уровень take profit.
Jims Close PositionsЗакрытие позиций: всех позиций, только прибыльных или только убыточных.
Осциллятор в DRAW_FILLING стиле с использованием цифровых фильтров.
Exp_Stopreversal_TmЭксперт на основе сигналов индикатора Stopreversal с возможностью жесткой фиксации временного диапазона торговли.