#property version "1.00" #property strict #property indicator_chart_window input int LineWidth=1; input int LineStyle=3; input color LineColor=Red; input int LabelWidth=1; input color LabelColor=Red; input int BarsCount=10; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping Comment(""); //--- return(INIT_SUCCEEDED); } //+-----------------------------------+ int deinit() { ObjectsDeleteAll(0,"Line"); ObjectsDeleteAll(0,"Label"); return(0);} //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- ModeObjects(); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2) { ObjectCreate(0,name,OBJ_TREND,0, 0,0,0,0); //--- установим бар1 метки ObjectSet(name,OBJPROP_TIME1,time1); //--- установим цену1 метки ObjectSet(name,OBJPROP_PRICE1,price1); //--- установим бар2 метки ObjectSet(name,OBJPROP_TIME2,time2); //--- установим цену2 метки ObjectSet(name,OBJPROP_PRICE2,price2); //--- установим цвет линии ObjectSetInteger(0,name,OBJPROP_COLOR,LineColor); //--- установим стиль отображения линии ObjectSetInteger(0,name,OBJPROP_STYLE,LineStyle); //--- установим толщину линии ObjectSetInteger(0,name,OBJPROP_WIDTH,LineWidth); //--- включим (true) или отключим (false) режим продолжения отображения линии вправо ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ModeObjects() { string name; for(int i=ObjectsTotal()-1;i>=0;i--) { name=ObjectName(i); if(StringFind(name,"Line",0)>-1) ObjectSet(name,OBJPROP_TIME2,Time[0]+PeriodSeconds()*BarsCount); if(StringFind(name,"Label",0)>-1) ObjectSet(name,OBJPROP_TIME1,Time[0]+PeriodSeconds()*BarsCount); WindowRedraw(); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutRightLabel(string name,datetime time,double price) { //--- создадим текстовую метку ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0, 0,0); //--- установим бар метки ObjectSet(name,OBJPROP_TIME1,time); //--- установим цену метки ObjectSet(name,OBJPROP_PRICE1,price); //--- установим размер метки ObjectSetInteger(0,name,OBJPROP_WIDTH,LabelWidth); //--- установим цвет ObjectSetInteger(0,name,OBJPROP_COLOR,LabelColor); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- если это события клика мышки на графике if(id==CHARTEVENT_CLICK) { //--- подготовим переменные int x =(int)lparam; int y =(int)dparam; datetime dt =0; double price =0; int window=0; //--- преобразуем координаты X и Y в терминах дата/время if(ChartXYToTimePrice(0,x,y,window,dt,price)) { PutTrendLine("Line"+(string)price,dt,price,Time[0]+PeriodSeconds()*BarsCount,price); PutRightLabel("Label"+(string)price,Time[0]+PeriodSeconds()*BarsCount,price); ChartRedraw(0); } } } //+------------------------------------------------------------------+