//+------------------------------------------------------------------+ //| podbor indika.mq4 | //| Tula 2011 | //+------------------------------------------------------------------+ #property indicator_separate_window //#property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Gold #property indicator_width1 2 #property indicator_level1 0.0 // Первоначальные значения индикатора extern int Param1 = 12; extern int Param2 = 26; extern int Param3 = 9; //---- indicator buffer double Buffer[]; // Переменные для расчетов int i; int Isobr = 400; // служебные коды #define SliderPrefix "SL_" //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(1); //---- drawing settings SetIndexStyle(0,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,Buffer); SetIndexEmptyValue(0,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ClearSliders(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //——————————————————————————————————————————————————————————————————————————————— // создание (при необходимости) и получение параметров управляющего треугольника Param1 = ParamValue(0, SliderPrefix+"Param1", Param1, 3, 30, Blue); Param2 = ParamValue(1, SliderPrefix+"Param2", Param2, 5, 40, Red); Param3 = ParamValue(2, SliderPrefix+"Param3", Param3, 3, 30, Orange); //——————————————————————————————————————————————————————————————————————————————— // Передаем параметры в пользовательский индикатор и из полученных значений строим индикатор for(i=Isobr;i>0;i--) { Buffer[i] = iOsMA(NULL,0,Param1,Param2,Param3,0,i); // Buffer[i] = iCustom(NULL,0," ",Param1,Param2,Param3,0,i); } //Comment ("Param1 =",Param1,", Param2 =",Param2,", Param3 =",Param3); Labl("Param1 = "+DoubleToStr(Param1,0)+", Param2 = "+DoubleToStr(Param2,0)+", Param3 = "+DoubleToStr(Param3,0)); //---- return(0); } //+------------------------------------------------------------------+ // треугольники //-------------------------------------------------------------------+ double ParamValue(int ParamNo, string ParamName, double ParamValue, double vMin, double vMax, color clr) { double Triangle[3],vCur, WMax, WMin; datetime tt1, tt2; // если треугольника нет - создадим его if(ObjectFind(ParamName) < 0) { // определим границы графика в текущем масштабе по вертикали WMax = WindowPriceMax() * 0.99; WMin = WindowPriceMin() * 1.01; // рассчитаем координаты точек по времени... tt1 = Time[0] + Period()*60*ParamNo*10; tt2 = tt1 + Period()*60*10; // ... и "цене" vCur = WMin + (ParamValue - vMin) * (WMax - WMin) / (vMax - vMin); // создадим объект и покрасим его в заданный в параметрах цвет ObjectCreate(ParamName,OBJ_TRIANGLE, 0, tt1,WMax, tt2,vCur, tt1,WMin); ObjectSet(ParamName,OBJPROP_COLOR,clr); } // треугольник существует - получим его координаты Triangle[0] = ObjectGet(ParamName,OBJPROP_PRICE1); Triangle[1] = ObjectGet(ParamName,OBJPROP_PRICE2); Triangle[2] = ObjectGet(ParamName,OBJPROP_PRICE3); // расположим вершины в порядке их "возрастания ArraySort(Triangle); // переведем координату средней точки к масштабу реальных значений между vMin и vMax vCur = vMin + (Triangle[1] - Triangle[0]) / (Triangle[2] - Triangle[0]) * (vMax - vMin); // напишем значение в коментарий объекта ObjectSetText(ParamName,DoubleToStr(vCur,2)); // вернем значение в основной модуль return(vCur); } //+------------------------------------------------------------------+ // удаление всех объектов нашего графика void ClearSliders() { for(int i=ObjectsTotal()-1;i>=0;i--) if(StringFind(ObjectName(i),SliderPrefix)==0) ObjectDelete(ObjectName(i)); } //————————————————————————————————————————————————————————————————————————————————————————————————————————————————+ //==================================================================// void Labl(string N){ //---- НАДПИСЬ HA ГРАФИК ----// string Nlabel = SliderPrefix; ObjectDelete(Nlabel); ObjectCreate(Nlabel,OBJ_LABEL,0,0,0); ObjectSet(Nlabel,OBJPROP_CORNER,0); ObjectSet(Nlabel,OBJPROP_COLOR,Aqua); ObjectSet(Nlabel, OBJPROP_XDISTANCE, 30); ObjectSet(Nlabel, OBJPROP_YDISTANCE, 20); ObjectSetText(Nlabel,N,14,"Arial",Aqua); } //==================================================================//