//--- описание #property description "Скрипт строит графический объект \"Событие\"." #property description "Дата точки привязки задается в процентах от" #property description "ширины окна графика в барах." //--- покажем окно входных параметров при запуске скрипта #property script_show_inputs //--- входные параметры скрипта input string InpName="Event"; // Имя события input int InpDate=25; // Дата события в % input string InpText="Text"; // Текст события input color InpColor=clrRed; // Цвет события input int InpWidth=1; // Размер точки при выделении input bool InpBack=false; // Событие на заднем плане input bool InpSelection=false; // Выделить для перемещений input bool InpHidden=true; // Скрыт в списке объектов input long InpZOrder=0; // Приоритет на нажатие мышью //+------------------------------------------------------------------+ //| Создает объект "Событие" на графике | //+------------------------------------------------------------------+ bool EventCreate(const long chart_ID=0, // ID графика const string name="Event", // имя события const int sub_window=0, // номер подокна const string text="Text", // текст события datetime time=0, // время const color clr=clrRed, // цвет const int width=1, // толщина точки при выделении const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- если время не задано, то создаем объект на последнем баре if(!time) time=TimeCurrent(); //--- сбросим значение ошибки ResetLastError(); //--- создадим объект "Событие" if(!ObjectCreate(chart_ID,name,OBJ_EVENT,sub_window,time,0)) { Print(__FUNCTION__, ": не удалось создать объект \"Событие\"! Код ошибки = ",GetLastError()); return(false); } //--- установим текст события ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); //--- установим цвет ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим толщину точки привязки, если объект выделен ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,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); //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Изменяет текст объекта "Событие" | //+------------------------------------------------------------------+ bool EventTextChange(const long chart_ID=0, // ID графика const string name="Event", // имя события const string text="Text") // текст { //--- сбросим значение ошибки ResetLastError(); //--- изменим текст объекта if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text)) { Print(__FUNCTION__, ": не удалось изменить текст! Код ошибки = ",GetLastError()); return(false); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Перемещение объект "Событие" | //+------------------------------------------------------------------+ bool EventMove(const long chart_ID=0, // ID графика const string name="Event", // имя события datetime time=0) // время { //--- если время не задано, то перемещаем событие на последний бар if(!time) time=TimeCurrent(); //--- сбросим значение ошибки ResetLastError(); //--- переместим объект if(!ObjectMove(chart_ID,name,0,time,0)) { Print(__FUNCTION__, ": не удалось переместить объект \"Событие\"! Код ошибки = ",GetLastError()); return(false); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Удаляет объект "Событие" | //+------------------------------------------------------------------+ bool EventDelete(const long chart_ID=0, // ID графика const string name="Event") // имя события { //--- сбросим значение ошибки ResetLastError(); //--- удалим объект if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": не удалось удалить объект \"Событие\"! Код ошибки = ",GetLastError()); return(false); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- проверим входные параметры на корректность if(InpDate<0 || InpDate>100) { Print("Ошибка! Некорректные значения входных параметров!"); return; } //--- количество видимых баров в окне графика int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); //--- массив для хранения значений дат, которые будут использованы //--- для установки и изменения координаты точки привязки объекта "Событие" datetime date[]; //--- выделение памяти ArrayResize(date,bars); //--- заполним массив дат ResetLastError(); if(CopyTime(Symbol(),Period(),0,bars,date)==-1) { Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError()); return; } //--- определим точки для создания объекта int d=InpDate*(bars-1)/100; //--- создадим объект "Событие" if(!EventCreate(0,InpName,0,InpText,date[d],InpColor,InpWidth, InpBack,InpSelection,InpHidden,InpZOrder)) { return; } //--- перерисуем график и подождем 1 секунду ChartRedraw(); Sleep(1000); //--- теперь будем перемещать объект //--- счетчик цикла int h_steps=bars/2; //--- перемещаем объект for(int i=0;i<h_steps;i++) { //--- возьмем следующее значение if(d<bars-1) d+=1; //--- сдвигаем точку if(!EventMove(0,InpName,date[d])) return; //--- проверим факт принудительного завершения скрипта if(IsStopped()) return; //--- перерисуем график ChartRedraw(); // задержка в 0.05 секунды Sleep(50); } //--- задержка в 1 секунду Sleep(1000); //--- удалим канал с графика EventDelete(0,InpName); ChartRedraw(); //--- задержка в 1 секунду Sleep(1000); //--- } |