Неправда, работает.
И, пожалуйста, не экономьте чернила и бумагу - выкладывайте сразу код при помощи которого Вы проверяете, а также информацию про билд терминала и операционную систему (после перезагрузки терминала брать первый три строчки из вкладки "Журнал" терминала).
Неправда, работает.
Ну и зачем голословно говорить неправду? Вы бы сначала проверяли, а потом отвечали.
void OnInit()
{
ObjectCreate(CHARTNAME, OBJ_CHART, 0, 0, 0);
ChartSetInteger(ObjectGetInteger(CHARTNAME, OBJPROP_CHART_ID), CHART_SHOW_OHLC, false);
}
void OnDeinit( const int Reason )
{
ObjectDelete(CHARTNAME);
}
2016.10.20 08:18:54.807 Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 10494 / 16301 Mb, HDD: 4980 / 30000 Mb, GMT+02:00
2016.10.20 08:18:54.807 Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
Ну и зачем голословно говорить неправду? Вы бы сначала проверяли, а потом отвечали.
Вот так попробуйте (третий параметр - номер подокна):
Вот так попробуйте (третий параметр - номер подокна):
Работает, Спасибо! Только вот в Справку хочется кинуть чем-нибудь. Нет там этого.
ChartSetString и ChartSetDouble - та же фигня?
- www.mql5.com
Ну и зачем голословно говорить неправду? Вы бы сначала проверяли, а потом отвечали.
void OnInit()
{
ObjectCreate(CHARTNAME, OBJ_CHART, 0, 0, 0);
ChartSetInteger(ObjectGetInteger(CHARTNAME, OBJPROP_CHART_ID), CHART_SHOW_OHLC, false);
}
void OnDeinit( const int Reason )
{
ObjectDelete(CHARTNAME);
}
2016.10.20 08:18:54.807 Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 10494 / 16301 Mb, HDD: 4980 / 30000 Mb, GMT+02:00
2016.10.20 08:18:54.807 Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
После отдачи команды нужно обновить объект-чарт:
//| OBJ_CHART.mq5 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
//--- описание
#property description "Скрипт создает объект \"График\"."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string InpName="Chart"; // Имя объекта
input string InpSymbol="EURUSD"; // Символ
input ENUM_TIMEFRAMES InpPeriod=PERIOD_H1; // Период
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Угол для привязки
input int InpScale=2; // Масштаб
input bool InpDateScale=true; // Отображение шкалы времени
input bool InpPriceScale=true; // Отображение шкалы цены
input color InpColor=clrRed; // Цвет рамки при выделении
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Стиль линии при выделении
input int InpPointWidth=1; // Размер точки для перемещений
input bool InpBack=false; // Объект на заднем плане
input bool InpSelection=true; // Выделить для перемещений
input bool InpHidden=true; // Скрыт в списке объектов
input long InpZOrder=0; // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает объект "График" |
//+------------------------------------------------------------------+
bool ObjectChartCreate(const long chart_ID=0, // ID графика
const string name="Chart", // имя объекта
const int sub_window=0, // номер подокна
const string symbol="EURUSD", // символ
const ENUM_TIMEFRAMES period=PERIOD_H1, // период
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const int width=300, // ширина
const int height=200, // высота
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол для привязки
const int scale=2, // масштаб
const bool date_scale=true, // отображение шкалы времени
const bool price_scale=true, // отображение шкалы цены
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) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим объект "График"
if(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0))
{
Print(__FUNCTION__,
": не удалось создать объект \"График\"! Код ошибки = ",GetLastError());
return(false);
}
//--- установим координаты объекта
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим размер объекта
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим символ
ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol);
//--- установим период
ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period);
//--- установим масштаб
ObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale);
//--- отобразим (true) или скроем (false) шкалу времени
ObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale);
//--- отобразим (true) или скроем (false) шкалу цены
ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale);
//--- установим цвет рамки при включенном режиме выделения объекта
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);
ResetLastError();
if(!ChartSetInteger(ObjectChartGetID(chart_ID,name),CHART_SHOW_OHLC,false))
Print("Error #",GetLastError());
ChartRedraw(ObjectChartGetID(chart_ID,name));
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Устанавливает символ и таймфрейм объекта "График" |
//+------------------------------------------------------------------+
bool ObjectChartSetSymbolAndPeriod(const long chart_ID=0, // ID графика (не объекта)
const string name="Chart", // имя объекта
const string symbol="EURUSD", // символ
const ENUM_TIMEFRAMES period=PERIOD_H1) // таймфрейм
{
//--- сбросим значение ошибки
ResetLastError();
//--- установим символ и таймфрейм объекта "График"
if(!ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol))
{
Print(__FUNCTION__,
": не удалось установить символ для объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period))
{
Print(__FUNCTION__,
": не удалось установить период для объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Перемещает объект "График" |
//+------------------------------------------------------------------+
bool ObjectChartMove(const long chart_ID=0, // ID графика (не объекта)
const string name="Chart", // имя объекта
const int x=0, // координата по оси X
const int y=0) // координата по оси Y
{
//--- сбросим значение ошибки
ResetLastError();
//--- переместим объект
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": не удалось переместить X-координату объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": не удалось переместить Y-координату объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет размер объекта "График" |
//+------------------------------------------------------------------+
bool ObjectChartChangeSize(const long chart_ID=0, // ID графика (не объекта)
const string name="Chart", // имя объекта
const int width=300, // ширина
const int height=200) // высота
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим размеры объекта
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": не удалось изменить ширину объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": не удалось изменить высоту объекта \"График\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Возвращает ID объекта "График" |
//+------------------------------------------------------------------+
long ObjectChartGetID(const long chart_ID=0, // ID графика (не объекта)
const string name="Chart") // имя объекта
{
//--- подготовим переменную для получения ID объекта "График"
long id=-1;
//--- сбросим значение ошибки
ResetLastError();
//--- получим ID
if(!ObjectGetInteger(chart_ID,name,OBJPROP_CHART_ID,0,id))
{
Print(__FUNCTION__,
": не удалось получить ID объекта \"График\"! Код ошибки = ",GetLastError());
}
//--- возврат результата
return(id);
}
//+------------------------------------------------------------------+
//| Удаляет объект "График" |
//+------------------------------------------------------------------+
bool ObjectChartDelete(const long chart_ID=0, // ID графика (не объекта)
const string name="Chart") // имя объекта
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим кнопку
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить объект \"График\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- получим количество символов в "Обзоре рынка"
int symbols=SymbolsTotal(true);
//--- определим, есть ли символ с указанным именем в списке символов
bool exist=false;
for(int i=0;i<symbols;i++)
if(InpSymbol==SymbolName(i,true))
{
exist=true;
break;
}
if(!exist)
{
Print("Ошибка! Данный символ ",InpSymbol," не представлен в окне \"Обзор Рынка\"!");
return;
}
//--- проверка входных параметров на корректность
if(InpScale<0 || InpScale>5)
{
Print("Ошибка! Некорректные значения входных параметров!");
return;
}
//--- размеры окна графика
long x_distance;
long y_distance;
//--- определим размеры окна
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Не удалось получить ширину графика! Код ошибки = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Не удалось получить высоту графика! Код ошибки = ",GetLastError());
return;
}
//--- установим координаты объекта "График" и его размер
int x=(int)x_distance/16;
int y=(int)y_distance/16;
int x_size=(int)x_distance*7/16;
int y_size=(int)y_distance*7/16;
//--- создадим объект "График"
if(!ObjectChartCreate(0,InpName,0,InpSymbol,InpPeriod,x,y,x_size,y_size,InpCorner,InpScale,InpDateScale,
InpPriceScale,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- перерисуем график и подождем 1 секунду
ChartRedraw();
Sleep(1000);
//--- растянем объект "График"
int steps=(int)MathMin(x_distance*7/16,y_distance*7/16);
for(int i=0;i<steps;i++)
{
//--- изменим размеры
x_size+=1;
y_size+=1;
if(!ObjectChartChangeSize(0,InpName,x_size,y_size))
return;
//--- проверим факт принудительного завершения скрипта
if(IsStopped())
return;
//--- перерисуем график и подождем 0.01 секунды
ChartRedraw();
Sleep(10);
}
//--- задержка в полсекунды
Sleep(500);
//--- изменим таймфрейм графика
if(!ObjectChartSetSymbolAndPeriod(0,InpName,InpSymbol,PERIOD_M1))
return;
ChartRedraw();
//--- задержка в три секунды
Sleep(3000);
//--- удалим объект
ObjectChartDelete(0,InpName);
ChartRedraw();
//--- подождем 1 секунду
Sleep(1000);
//---
}
//+------------------------------------------------------------------+
Добавлено: это стандартный пример.
Работает, Спасибо! Только вот в Справку хочется кинуть чем-нибудь. Нет там этого.
Поторопился, не работает. Но в Справку все равно что-нибудь нужно кинуть, т.к. не ругается на большее количество параметров.
После отдачи команды нужно обновить объект-чарт:
А вот это пашет, Спасибо!
Только вот баг нарисовался в случае индикатора.
#define CHARTNAME 0, "ObjChart"
void OnInit()
{
ObjectCreate(CHARTNAME, OBJ_CHART, 0, 0, 0);
const long Chart = ObjectGetInteger(CHARTNAME, OBJPROP_CHART_ID);
ChartSetInteger(Chart, CHART_SHOW_OHLC, false);
ChartRedraw(Chart);
}
void OnDeinit( const int Reason )
{
ObjectDelete(CHARTNAME);
}
#ifdef INDICATOR
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 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[] )
{
return(rates_total);
}
#endif
Не удаляется объект.
При этом, если сделать indicator_separate_window и объект засунуть в подокно - удаляется.
Поторопился, не работает.
А вот это пашет, Спасибо!
Только вот баг нарисовался в случае индикатора.
#define CHARTNAME 0, "ObjChart"
void OnInit()
{
ObjectCreate(CHARTNAME, OBJ_CHART, 0, 0, 0);
const long Chart = ObjectGetInteger(CHARTNAME, OBJPROP_CHART_ID);
ChartSetInteger(Chart, CHART_SHOW_OHLC, false);
ChartRedraw(Chart);
}
void OnDeinit( const int Reason )
{
ObjectDelete(CHARTNAME);
}
#ifdef INDICATOR
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 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[] )
{
return(rates_total);
}
#endif
Не удаляется объект.
Вы пишите на MQL5, читайте, пожалуйста, справку:
bool ObjectDelete( |
Нельзя же так: не читаю справку, косячить на каждом шаге, а потом подымать пыль!
Добавлено:
прежде чем такое писать, хотя бы проверяли, ЧТО ИМЕННО Вы делаете.
Не увлекайтесь #define - пишите явно:
Нельзя же так: не читаю справку, косячить на каждом шаге, а потом подымать пыль!
Не, тут косяка с моей стороны никакого. Баг там.
Добавлено:
прежде чем такое писать, хотя бы проверяли, ЧТО ИМЕННО Вы делаете.
Не увлекайтесь #define - пишите явно:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования