OBJ_VLINE - Типи об’єктів - Константи об’єктів - Константи, перерахування та структури - Довідник

перерахування

Наступний скрипт створює та переміщає на графіку вертикальну лінію. Для створення та зміни властивостей графічного об'єкта написані спеціальні функції, які можна використовувати "як є" у своїх власних програмах.

#property strict //--- опис #property description "Скрипт будує графічний об'єкт \"Вертикальна лінія\"." #property description "Дата точки прив'язки задається у відсотках від ширини" #property description "вікна графіка в барах." //--- покажемо вікно вхідних параметрів під час запуску скрипта #property script_show_inputs //--- вхідні параметри скрипта input string InpName= "VLine" ; // Ім'я лінії input int InpDate = 25; // Дата лінії в % input color InpColor = clrRed; // Колір лінії input ENUM_LINE_STYLE InpStyle= STYLE_DASH ; // Стиль лінії input int InpWidth = 1; // Товщина лінії input bool InpBack = false; // Лінія на задньому плані input bool InpSelection = true; // Виділити для переміщень input bool InpHidden = true; // Приховано у списку об'єктів input long InpZOrder=0; // Пріоритет на натискання мишею //+-------------------------------------- ----------------------------+ // Створює вертикальну лінію //+------- -------------------------------------------------- ---------+ bool VLineCreate( const long chart_ID=0, // ID графіка const string name="VLine" , // ім'я лінії const int sub_window=0, // номер підокна datetime time =0, // час лінії const color clr= clrRed , // колір лінії const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль лінії const int width=1 , // Товщина лінії const bool back = false , // на задньому плані const bool selection = true, // Виділити для переміщень const bool hidden = true, // прихований у списку об'єктів const long z_order=0)// пріоритет натискання мишею < //--- якщо час лінії не заданий, то проводимо її через останній бар if(!time) time = TimeCurrent(); //--- скинемо значення помилки ResetLastError(); //--- створимо вертикальну лінію if (! ObjectCreate (chart_ID,name, OBJ_VLINE ,sub_window, time ,0)) < Print ( __FUNCTION__ , ": не вдалося створити вертикальну лінію! Код помилки = " , GetLastError ()); return (false); > //--- встановимо колір лінії ObjectSetInteger (chart_ID,name, OBJPROP_COLOR, clr); //--- встановимо стиль відображення лінії ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style); //--- встановимо товщину лінії ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width); //--- відобразимо на передньому (false) або задньому (true) плані ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); //--- увімкнемо (true) або відключимо (false) режим переміщення лінії мишею //--- при створенні графічного об'єкта функцією ObjectCreate, за умовчанням об'єкт //--- не можна виділити і переміщувати. Всередині цього методу параметр selection //--- за умовчанням дорівнює true, що дозволяє виділяти і переміщати цей об'єкт 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 VLineMove( const long chart_ID=0, // ID графіка const string name= "VLine" , // ім'я лінії datetime time =0) // час лінії < //--- якщо час лінії не заданий, то переміщаємо її на останній бар if(!time) time = TimeCurrent(); //--- скинемо значення помилки ResetLastError(); //--- перемістимо вертикальну лінію if (! ObjectMove (chart_ID,name,0, time ,0)) < Print ( __FUNCTION__ , ": не вдалося перемістити вертикальну лінію! Код помилки = " , GetLastError ()); return (false); > //--- успішне виконання return (true); > //+-------------------------------------------- ----------------------+ // Видаляє вертикальну лінію //+------------- -------------------------------------------------- ---+ bool VLineDelete( const long chart_ID=0, // ID графіка const string name= "VLine" ) // ім'я лінії < //--- скинемо значення помилки ResetLastError(); //--- видалимо вертикальну лінію if (! ObjectDelete (chart_ID,name)) < Print ( __FUNCTION__ , ": не вдалося видалити вертикальну лінію! Код помилки = " , GetLastError ()); return (false); > //--- успішне виконання return (true); > //+-------------------------------------------- ----------------------+ // Script program start function //+------------ -------------------------------------------------- ----+ void OnStart () < //--- перевіримо вхідні параметри на коректність if (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 (!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack, InpSelection,InpHidden,InpZOrder)) return; //--- перемалюємо графік і зачекаємо 1 секунду ChartRedraw(); Sleep (1000); //--- тепер переміщатимемо лінію //--- лічильник циклу int h_steps= bars /2; //--- переміщуємо лінію for ( int i=0;i < //--- візьмемо наступне значення if (d < bars -1) d+ =1; //--- зрушуємо точку if (!VLineMove(0,InpName,date[d])) return ; //--- перевіримо факт примусового завершення скрипту if ( IsStopped ()) return ; //--- перемалюємо графік ChartRedraw (); // затримка в 0.03 секунди Sleep (30); > //--- затримка в 1 секунду Sleep (1000); //--- видалимо канал з графіка VLineDelete(0,InpName); //--- затримка в 1 секунду Sleep (1000); //--- >