индикатор круглых чисел

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey Ponomarev
11015
Sergey Ponomarev  

Может кто нибудь подсказать как сделать в индикаторе , что бы линии рисовались в заданном колличестве а другие удалялись и если цена идёт вверх или вниз они подрисовывались нижние удаляются верхние рисуются , а не километровую дорогу уровней  ?)

#property indicator_chart_window
#property version "2.0"
#property strict

input string H=" --- Mode_Settings ---";
input bool Show_00_50_Levels=true;
input bool Show_20_80_Levels=true;
input color Level_00_Color=clrLime;
input color Level_50_Color=clrGray;
input color Level_20_Color=clrRed;
input color Level_80_Color=clrGreen;

double dXPoint=1;
double Div=0;
double i=0;
double HighPrice= 0;
double LowPrice = 0;
int iDigits;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   iDigits=_Digits;
   if(_Digits==5 || _Digits==3) dXPoint=10;
   if(_Digits==3) iDigits=2;
   if(_Digits==5) iDigits=4;

   Div=0.1/(_Point*dXPoint);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[]
                )
  {
   ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(time,true);
   int ih=ArrayMaximum(high, 2); if(ih<0) return rates_total;
   int il=ArrayMinimum(low, 2); if(il<0) return rates_total;
   HighPrice= MathRound((high[ih]+1)*Div);
   LowPrice = MathRound((low[il]-1)*Div);
   if(Show_00_50_Levels)
     {
      for(i=LowPrice; i<=HighPrice; i++)
        {
         if(MathMod(i,5)==0.0)
           {
            string name="RoundPrice "+DoubleToString(i,0);
            if(ObjectFind(0,name)!=0)
              {
               ObjectCreate(0,name,OBJ_HLINE,0,time[1],i/Div);
               ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
               if(MathMod(i,10)==0.0) ObjectSetInteger(0,name,OBJPROP_COLOR,Level_00_Color);
               else ObjectSetInteger(0,name,OBJPROP_COLOR,Level_50_Color);
              }
           }
        }

     }

   if(Show_20_80_Levels)
     {
      for(i=LowPrice; i<=HighPrice; i++)
        {
         if(StringSubstr(DoubleToString(i/Div,iDigits),StringLen(DoubleToString(i/Div,iDigits))-2,2)=="20")
           {
            string name="RoundPrice "+DoubleToString(i,0);
            if(ObjectFind(0,name)!=0)
              {
               ObjectCreate(0,name,OBJ_HLINE,0,time[1],i/Div);
               ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
               ObjectSetInteger(0,name,OBJPROP_COLOR,Level_20_Color);
              }
           }
         if(StringSubstr(DoubleToString(i/Div,iDigits),StringLen(DoubleToString(i/Div,iDigits))-2,2)=="80")
           {
            string name="RoundPrice "+DoubleToString(i,0);
            if(ObjectFind(0,name)!=0)
              {
               ObjectCreate(0,name,OBJ_HLINE,0,time[1],i/Div);
               ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
               ObjectSetInteger(0,name,OBJPROP_COLOR,Level_80_Color);
              }
           }
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll(0,"Round");
  }
//+------------------------------------------------------------------+

Файлы:
00000.mq5 8 kb
Vladimir Karputov
Модератор
183431
Vladimir Karputov  

Пожалуйста вставляйте код правильно.

Кнопка  Исходный код предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку  Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

Вставка исходного кода в сообщение


Я вставил Вашу простыню из простого текста в виде кода. Также сразу прикрепил индикатор в виде файла - так удобнее, если кто захочет сразу скачать.

Sergey Ponomarev
11015
Sergey Ponomarev  
Vladimir Karputov:

Пожалуйста вставляйте код правильно.

Я вставил Вашу простыню из простого текста в виде кода. Также сразу прикрепил индикатор в виде файла - так удобнее, если кто захочет сразу скачать.

благодарю :)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий