Стандартными средствами - никак. Только отображать содержимое графика собственными силами (через Canvas и пр.)
Может какие есть недокументированные функции? Должны же быть. Хотя бы поменять на свою надпись.
Может какие есть недокументированные функции? Должны же быть. Хотя бы поменять на свою надпись.
Фотошоп можно предлагать?
Фотошоп можно предлагать?
Хорошо. Мне бы ещё программно на mql4.
Стандартными средствами - никак. Только отображать содержимое графика собственными силами (через Canvas и пр.)
можно зарисовать текстовыми метками, примерно так:
property strict #include <ChartObjects\ChartObjectsTxtControls.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { char c[] = {110,110,110,110,110,110,110,110}; CChartObjectLabel *Label = new CChartObjectLabel; Label.Create(0,_Symbol+IntegerToString(rand()),0,0,0); Label.Color(clrRed); Label.Font("Wingdings"); Label.FontSize(14); Label.Description(CharArrayToString(c)); } //+------------------------------------------------------------------+
нужно шрифт подобрать, чтобы сплошные были квадратики и чуть повыше
ну или вообще картинку в угол чарта вставить, ничего готового нет под рукой, нужно в СБ поискать как картинку приатачить на чарт
Хорошо. Мне бы ещё программно на mql4.
Вот я когда-то делал советник (МТ4) с картинкой. Торговый алгоритм убрал, а все что касается картинки оставил. Причешите под себя:
//+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "" #property strict #resource "\\Images\\magic.bmp" // имя ресурса - Images\magic.bmp //--- входные параметры картинки string InpFile="::Images\\magic.bmp"; // Имя файла с картинкой int InpWidth=280; // X-координата области видимости int InpHeight=117; // Y-координата области видимости int InpXOffset=4; // Смещение области видимости по X int InpYOffset=4; // Смещение области видимости по Y color InpColor=clrRed; // Цвет рамки при выделении ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Стиль линии при выделении int InpPointWidth=1; // Размер точки для перемещений bool InpBack=false; // Объект на заднем плане bool InpSelection=true; // Выделить для перемещений bool InpHidden=false; // Скрыт в списке объектов long InpZOrder=0; // Приоритет на нажатие мышью //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { BitmapDelete(0,// ID графика "Bitmap"); // имя рисунка Comment(""); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { BitmapDelete(0,// ID графика "Bitmap"); // имя рисунка Comment(""); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { int barsOnChart=ChartVisibleBars(0)-1; if(logo) { if(IsVisualMode() || (!IsTesting() )) { BitmapCreate(0,// ID графика "Bitmap",// имя рисунка 0,// номер подокна 0,// время точки привязки 0,// цена точки привязки InpFile, // имя файла с картинкой InpWidth, // X-координата области видимости InpHeight, // Y-координата области видимости InpXOffset, // смещение области видимости по X InpYOffset, // смещение области видимости по Y InpColor,// цвет рамки при выделении InpStyle,// стиль линии при выделении InpPointWidth,// размер точки перемещения InpBack, // на заднем плане InpSelection, // выделить для перемещений InpHidden,// скрыт в списке объектов InpZOrder); // приоритет на нажатие мышью BitmapMove(0,// ID графика "Bitmap",// имя рисунка Time[barsOnChart],// время точки привязки ChartPriceMin(0,0)); // цена точки привязки } } } //+------------------------------------------------------------------+ bool BitmapCreate(const long chart_ID=0, // ID графика const string name="Bitmap", // имя рисунка const int sub_window=0, // номер подокна datetime time=0, // время точки привязки double price=0, // цена точки привязки const string file="", // имя файла с картинкой const int width=10, // X-координата области видимости const int height=10, // Y-координата области видимости const int x_offset=0, // смещение области видимости по X const int y_offset=0, // смещение области видимости по Y const color clr=clrRed, // цвет рамки при выделении const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии при выделении const int point_width=1, // размер точки перемещения const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- установим координаты точки привязки, если они не заданы ChangeBitmapEmptyPoint(time,price); //--- сбросим значение ошибки ResetLastError(); //--- создадим рисунок if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price)) { Print(__FUNCTION__, ": не удалось создать рисунок в окне графика! Код ошибки = ",GetLastError()); return(false); } //--- установим путь к файлу с картинкой if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file)) { Print(__FUNCTION__, ": не удалось загрузить картинку! Код ошибки = ",GetLastError()); return(false); } //--- установим область видимости изображения; если значения ширины или высоты //--- больше значений ширины и высоты (соответственно) исходного изображения, то //--- оно не рисуется; если значения ширины и высоты меньше размеров изображения, //--- то рисуется та его часть, которая соответствует этим размерам ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- установим, какая часть изображения должна показываться в области видимости //--- по умолчанию это левая верхняя область изображения; значения позволяют //--- произвести сдвиг от этого угла и отобразить другую часть изображения ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset); ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset); //--- установим цвет рамки при включенном режиме выделения объекта ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим стиль линии рамки при включенном режиме выделения объекта ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- установим размер точки привязки, с помощью которой можно перемещать объект ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- включим (true) или отключим (false) режим перемещения метки мышью ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); // установим угол привязки ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,2); //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Проверяет значения точки привязки и для пустых значений | //| устанавливает значения по умолчанию | //+------------------------------------------------------------------+ void ChangeBitmapEmptyPoint(datetime &time,double &price) { //--- если время точки не задано, то она будет на текущем баре if(!time) time=TimeCurrent(); //--- если цена точки не задана, то она будет иметь значение Bid if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool BitmapMove(const long chart_ID=0,// ID графика const string name="Bitmap", // имя рисунка datetime time=0, // время точки привязки double price=0) // цена точки привязки { //--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bid if(!time) time=TimeCurrent(); if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); //--- сбросим значение ошибки ResetLastError(); //--- переместим точку привязки if(!ObjectMove(chart_ID,name,0,time,price)) { Print(__FUNCTION__, ": не удалось переместить точку привязки! Код ошибки = ",GetLastError()); return(false); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ // CHART_WIDTH_IN_BARS – возвращает ширину графика в барах. //+------------------------------------------------------------------+ //| Функция получает значение ширины графика в барах. | //+------------------------------------------------------------------+ int ChartWidthInBars(const long chart_ID=0) { //--- подготовим переменную для получения значения свойства long result=-1; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_BARS,0,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return((int)result); } //+------------------------------------------------------------------+ //CHART_VISIBLE_BARS – определяет количество баров на графике, доступных для отображения. //+------------------------------------------------------------------+ //| Функция получает количество баров, которые отображаются (видимы )| //| в окне графика. | //+------------------------------------------------------------------+ int ChartVisibleBars(const long chart_ID=0) { //--- подготовим переменную для получения значения свойства long result=-1; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return((int)result); } //+------------------------------------------------------------------+ //| Функция получает значение минимума графика в главном окне или | //| подокне. | //+------------------------------------------------------------------+ double ChartPriceMin(const long chart_ID=0,const int sub_window=0) { //--- подготовим переменную для получения результата double result=EMPTY_VALUE; //--- сбросим значение ошибки ResetLastError(); //--- получим значение свойства if(!ChartGetDouble(chart_ID,CHART_PRICE_MIN,sub_window,result)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- вернем значение свойства графика return(result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool BitmapDelete(const long chart_ID=0,// ID графика const string name="Bitmap") // имя рисунка { //--- сбросим значение ошибки ResetLastError(); //--- удалим метку if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": не удалось удалить рисунок! Код ошибки = ",GetLastError()); return(false); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+
Вот я когда-то делал советник (МТ4) с картинкой. Торговый алгоритм убрал, а все что касается картинки оставил. Причешите под себя:
Вот это ВСЁ ради того чтобы закрыть уголок графика??? Яподстолом...
Вот я когда-то делал советник (МТ4) с картинкой. Торговый алгоритм убрал, а все что касается картинки оставил. Причешите под себя:
Как я понимаю, Вы картинку туда лепили? Верно?
Картинку лепить хорошая идея. Но сам Метак, если есть сетка на графике очень непристойно выглядит в этом месте. А потом несколько сложновато.
Есть же вот простые функции типа:
ChartSetInteger(id,CHART_SHOW_ONE_CLICK,false);
ChartSetInteger(id,CHART_SHOW_OHLC,false);
Ещё бы такую, но чтобы не было названия инструмента???
... Причешите под себя:
Если чесать начнём, причешем. И побреем. Спасибо.
Кстати, там по-моему BitmapLabel объект где-то затесался. Он поинтересней здесь смотреться будет.
Есть ещё один вариант. Увеличить размер окна графика. Получается то что нужно, но полосочка пропадает. То же как-то не так.
Тут у нас такая функция есть как
#import "user32.dll"
bool MoveWindow(int hWnd,int x,int y,int nWidth,int nHeight,bool bRepaint);
#import
И потом.
int hWnd=ChartGetInteger(currChart,CHART_WINDOW_HANDLE);
MoveWindow(hWnd,-50,0,X,Y,true);
Если немного сдвинуть график не меняя размер окна в котором этот график, то названия инструмента не будет. Хотя тогда как мне помнится полосочка скроется. Тоже не Айс.
Да и зачем огород лепить если можно в одну строчку.
ChartSetInteger(id,??????,false);
Чтобы сюда такое влепить чтобы инструмента не было видно.
Ну да, все взято из справки МетаЭдитора.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как убрать название инструмента и время?
Спасибо.