Расширение графика
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «graph extension.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Расширение графика» размещает на графике MetaTrader настраиваемую кнопку-переключатель. При нажатии кнопка меняет текст между «ВКЛ» и «ВЫКЛ» и вызывает системную функцию управления стилем окон терминала через Windows API (user32.dll). Индикатор не содержит буферов и не рассчитывает аналитические значения — его единственная задача предоставить пользователю графический элемент управления внешним видом окон терминала.
Кнопка создаётся или обновляется при инициализации и при изменении внешних параметров. Её положение, размеры и цвета полностью настраиваются через входные параметры. При удалении индикатора с графика кнопка корректно удаляется.
Управление окнами терминала осуществляется путём перебора дочерних окон MDI-кластера и изменения их стилевых флагов (WS_BORDER, WS_DLGFRAME, WS_SIZEBOX) с последующим применением через SetWindowPos. Функция активируется только при нажатии на кнопку, а не в каждом тике.
Поиск по коду файла
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
input int Горизонтальное_смещение = 5;
input int Вертикальное_смещение = 500;
input int Высота_кнопки = 25;
input int Ширина_кнопки = 45;
input color Цвет_фона = clrLime;
input color Цвет_границы = clrRed;
input color Цвет_текста = clrBlack;
#define ИМЯ_КНОПКИ "_Кнопка переключения"
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if (reason == REASON_REMOVE)
ObjectDelete(0, ИМЯ_КНОПКИ);
}
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[])
{
// код доступен только после оплаты
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if (id == CHARTEVENT_OBJECT_CLICK && sparam == ИМЯ_КНОПКИ)
{
ObjectSetString(0, ИМЯ_КНОПКИ, OBJPROP_TEXT, ObjectGetInteger(0, ИМЯ_КНОПКИ, OBJPROP_STATE) ? "ВКЛ" : "ВЫКЛ");
УправлениеОкнами(ObjectGetInteger(0, ИМЯ_КНОПКИ, OBJPROP_STATE));
}
if (id == CHARTEVENT_CUSTOM + 1)
{
СоздатьИлиОбновитьКнопку();
}
}
void СоздатьИлиОбновитьКнопку()
{
if (ObjectFind(0, ИМЯ_КНОПКИ) < 0)
{
ObjectCreate(0, ИМЯ_КНОПКИ, OBJ_BUTTON, 0, 0, 0);
}
ObjectSetInteger(0, ИМЯ_КНОПКИ, OBJPROP_XDISTANCE, Горизонтальное_смещение);
ObjectSetInteger(0, ИМЯ_КНОПКИ, OBJPROP_YDISTANCE, Вертикальное_смещение);
ObjectSetInteger(0, ИМЯ_КНОПКИ, OBJPROP_XSIZE, Ширина_кнопки);
ObjectSetInteger(0, ИМЯ_КНОПКИ, OBJPROP_YSIZE, Высота_кнопки);
ObjectSetInteger(0, ИМЯ_КНОПКИ, OBJPROP_CORNER, CORNER_LEFT_LOWER); // Угол — левый нижний
Показано первые 50% кода (символов: 3290)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.