Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Clock - библиотека для MetaTrader 5

Просмотров:
2501
Рейтинг:
(35)
Опубликован:
2017.11.16 09:36
Обновлен:
2017.11.16 09:39
\MQL5\Include\fxsaber\Clock\ \MQL5\Include\fxsaber\ \MQL5\Indicators\fxsaber\ \MQL5\Files\
Clocks.zip (903.45 KB)
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Библиотека (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%, получив такой результат:

Alpha-канал циферблата 90% (A = 90)

На момент публикации аналоговые часы в Маркете практически отсутствовали. В CodeBase нашелся такой вариант.

Из оригинального в библиотеке написана только LAYER::Rotate, отвечающая за поворот. Возможно, эта функция побудит к созданию сторонних решений на основе динамических графических ресурсов, как это произошло с "первым блином" - часами.

N seconds N points N seconds N points

Советник отслеживает позиции по всем символам и по всем magic'ам. Если позиция открыта уже "Waiting for seconds" и её прибыль "Take Profit" пунктов, закрывает позиции. Если прибыль не достигла "Take Profit" пунктов - тогда переносит уровень take profit.

Jims Close Positions Jims Close Positions

Закрытие позиций: всех позиций, только прибыльных или только убыточных.

Dtm Dtm

Осциллятор в DRAW_FILLING стиле с использованием цифровых фильтров.

Exp_Stopreversal_Tm Exp_Stopreversal_Tm

Эксперт на основе сигналов индикатора Stopreversal с возможностью жесткой фиксации временного диапазона торговли.