Objects Styler
- 实用工具
- 版本: 3.1
- 更新: 17 八月 2026
Objects Styler 是一款实用工具,提供一个 上下文感知面板 ,用于直接在图表上编辑标准图形对象的属性。其核心功能是一套强大的 模板系统 ,允许用户保存、管理并即时将复杂样式集应用于对象。
核心功能
界面与交互
-
上下文激活: 通过单击(或 Shift + 单击)图形对象来调用面板。支持所有标准对象及其大多数属性。
-
可拖动界面: 面板可自由移动到图表的任意区域。
-
弹出窗口: 样式选择、调色板和时间框架列表等附加选项会在紧凑的弹出窗口中打开,保持主界面简洁整齐。
模板管理系统
-
保存和应用样式: 将对象的完整属性集保存为命名模板。模板只需单击即可应用。
-
按对象类型区分: 模板针对特定对象类型保存。例如,为趋势线创建的样式仅在编辑其他趋势线时可用。
-
收藏夹(固定): 常用模板可固定以便快速访问。它们将始终可见,而其他模板则隐藏在附加窗口中。
-
同步与可移植性:
-
模板和调色板的更改可自动同步到其他图表上的所有指标实例。
-
设置文件单独保存,便于转移到其他计算机或不同终端。
-
对象属性控制
-
常规属性: 直接访问以编辑颜色、宽度和线条样式。还提供对大多数标准参数的控制:填充、在背景中绘制、射线、图标、文本等。
-
多级对象编辑 (适用于斐波那契工具、通道、扩展等):
-
对 每个 级别的数值、文本描述、颜色、宽度和线条样式进行独立控制。
-
添加和删除级别的功能。
-
调色板
-
54 个插槽 用于快速访问颜色。
-
可视化编辑器(HSV 拾色器) 用于精确调整颜色。
-
可修改并保存调色板中的任意颜色。
指标设置
-
界面缩放: 输入参数,用于根据屏幕分辨率调整面板大小。
-
激活方式: 在设置中选择调用面板的方式(单击或 Shift + 单击)。
-
配色方案: 预装浅色和深色主题,以及设置完全自定义颜色的选项。
-
同步模式: 选择设置文件的存储位置:在每个图表本地存储,或存储在终端的公共文件夹中以实现自动同步。
未来,可能会根据用户请求添加其他属性和对新对象的支持。

Это лучшее что я видел для mt5! Выражаю огромную благодарность!!! Автор ЛУЧШИЙ!!! P.S. Было бы прикольно если добавить в меню отрезка выравнивание по горизонтали отрезка. Мне ИИ написал в виде кнопки на графике: //+------------------------------------------------------------------+
//| Line_Leveler_Button.mq5 |
//| AI Code Generator |
//+------------------------------------------------------------------+
#property copyright "AI"
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
//--- Входные параметры кнопки
input string InpButtonText = "Сделать горизонтальной"; // Текст на кнопке
input color InpButtonColor = clrWhite; // Цвет текста
input color InpBgColor = clrDarkSlateGray; // Цвет кнопки
input int InpFontSize = 10; // Размер шрифта
input int InpButtonWidth = 160; // Ширина кнопки
input int InpButtonHeight = 25; // Высота кнопки
//--- Имя объекта кнопки
string ButtonName = "Btn_Leveler_Line";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Создаем кнопку в левом верхнем углу графика
if(ObjectCreate(0, ButtonName, OBJ_BUTTON, 0, 0, 0))
{
ObjectSetInteger(0, ButtonName, OBJPROP_XDISTANCE, 15); // Отступ по оси X
ObjectSetInteger(0, ButtonName, OBJPROP_YDISTANCE, 120); // Отступ по оси Y (под имя инструмента)
ObjectSetInteger(0, ButtonName, OBJPROP_XSIZE, InpButtonWidth);
ObjectSetInteger(0, ButtonName, OBJPROP_YSIZE, InpButtonHeight);
ObjectSetInteger(0, ButtonName, OBJPROP_CORNER, CORNER_LEFT_UPPER); // Привязка к верхнему левому углу
ObjectSetString(0, ButtonName, OBJPROP_TEXT, InpButtonText);
ObjectSetString(0, ButtonName, OBJPROP_FONT, "Arial");
ObjectSetInteger(0, ButtonName, OBJPROP_FONTSIZE, InpFontSize);
ObjectSetInteger(0, ButtonName, OBJPROP_COLOR, InpButtonColor);
ObjectSetInteger(0, ButtonName, OBJPROP_BGCOLOR, InpBgColor);
ObjectSetInteger(0, ButtonName, OBJPROP_BORDER_COLOR, clrSilver);
ObjectSetInteger(0, ButtonName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, ButtonName, OBJPROP_STATE, false); // Отжата по умолчанию
}
// Разрешаем индикатору ловить клики мыши по графику
ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Удаляем кнопку при удалении индикатора
ObjectDelete(0, ButtonName);
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| OnCalculate (обязательная функция для индикаторов) |
//+------------------------------------------------------------------+
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[])
{
return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function - перехват событий мыши и кликов |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
// Проверяем, произошел ли клик по графическому объекту
if(id == CHARTEVENT_OBJECT_CLICK)
{
// Проверяем, что кликнули именно по нашей кнопке
if(sparam == ButtonName)
{
bool leveled_any = false;
// Перебираем все графические объекты, которые сейчас есть на графике
int total_objects = ObjectsTotal(0, 0, -1);
for(int i = 0; i < total_objects; i++)
{
string obj_name = ObjectName(0, i, 0, -1);
// Нам нужны только те линии, которые выделил (выбрал двойным кликом) трейдер
if(ObjectGetInteger(0, obj_name, OBJPROP_SELECTED) == true)
{
// Проверяем тип объекта. Нам нужны обычные трендовые линии (OBJ_TREND)
if(ObjectGetInteger(0, obj_name, OBJPROP_TYPE) == OBJ_TREND)
{
// Берем цену первой точки линии
double price1 = ObjectGetDouble(0, obj_name, OBJPROP_PRICE, 0);
// Принудительно присваиваем второй точке точно такую же цену
ObjectSetDouble(0, obj_name, OBJPROP_PRICE, 1, price1);
leveled_any = true;
}
}
}
// Если выровняли линию, выводим сообщение в журнал
if(leveled_any)
{
Print("Успешно: Выделенные трендовые линии выровнены горизонтально.");
}
// Возвращаем кнопку в отжатое (активное) состояние для следующего раза
ObjectSetInteger(0, ButtonName, OBJPROP_STATE, false);
ChartRedraw(0);
}
}
}
Извини! Пользовался старой версией. После обновления увидел кнопку выравнивания. Спасибо тебе большое! Ты ЛУЧШИЙ!!! Успехов тебе и вдохновения!