//+------------------------------------------------------------------+ //| PercentChange.mq4 | //| Yuriy Tokman (YTG) | //| http://ytg.com.ua/ | //+------------------------------------------------------------------+ #property copyright "Yuriy Tokman (YTG)" #property link "http://ytg.com.ua/" #property version "1.00" #property strict #property indicator_chart_window input int MaxBars = 300; input int DisplayDistance = 5; input color DisplayGainColor = clrGreen; input color DisplayLossColor = clrRed; input int DisplayFontSize = 8; input int DisplayAfterComma = 2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- GetDell(); Comment(""); //--- } //+------------------------------------------------------------------+ //| 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[]) { //--- string perc,name; double _start; //--- int limit=rates_total-prev_calculated; if(prev_calculated==0)limit--; else limit++; if(MaxBars>0 && limit>MaxBars) limit=MaxBars; //--- for( int i=0; i=0) { name = "ytg_A-" + TimeToStr(Time[i], TIME_DATE|TIME_MINUTES); perc =DoubleToStr(_start, DisplayAfterComma) + "%"; TextCreate(0,name,0,Time[i],Low[i]-DisplayDistance*Point,perc,"Arial",DisplayFontSize,DisplayGainColor,90,ANCHOR_RIGHT); } else if(_start<0) { name = "ytg_Y-" + TimeToStr(Time[i], TIME_DATE|TIME_MINUTES); perc =DoubleToStr(_start, DisplayAfterComma) + "%"; TextCreate(0,name,0,Time[i],High[i]+DisplayDistance*Point,perc,"Arial",DisplayFontSize,DisplayLossColor,90,ANCHOR_LEFT); } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Создает объект "Текст" | //+------------------------------------------------------------------+ bool TextCreate(const long chart_ID=0, // ID графика const string name="Text", // имя объекта const int sub_window=0, // номер подокна datetime time=0, // время точки привязки double price=0, // цена точки привязки const string text="Text", // сам текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrRed, // цвет const double angle=0.0, // наклон текста const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- if(ObjectFind(name)>=0)ObjectDelete(name);//если text уже создан удаляем его, ввиду случайного перетаскивания мышью //--- сбросим значение ошибки ResetLastError(); //--- создадим объект "Текст" if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) { Print(__FUNCTION__, ": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); } //--- установим текст ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); //--- установим шрифт текста ObjectSetString(chart_ID,name,OBJPROP_FONT,font); //--- установим размер шрифта ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); //--- установим угол наклона текста ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); //--- установим способ привязки ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); //--- установим цвет ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- отобразим на переднем (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); } //---- void GetDell( string name = "ytg_") { string vName; for(int i=ObjectsTotal()-1; i>=0;i--) { vName = ObjectName(i); if (StringFind(vName,name) !=-1) ObjectDelete(vName); } } //----