Создание линии в подокне индикатора

 
В эту тему были перенесены комментарии, не относящиеся к "Новая версия платформы MetaTrader 5 build 2485: улучшения в iCustom и общая оптимизация в MQL5".
 

что то я пропустил - что вышла новая версия терминала ?

Снимок

открыл счёт у нового брокера и на реальном счёте, уже новый терминал - да ещё связь, прерывается через каждых пять минут. 

--------------------------

а ещё индикатор всегда работал и все свои горизонтальные линии рисовал в нужном окне, теперь полная неразбериха 

 
Alexsandr San:

что то я пропустил - что вышла новая версия терминала ?

открыл счёт у нового брокера и на реальном счёте, уже новый терминал - да ещё связь, прерывается через каждых пять минут. 

--------------------------

а ещё индикатор всегда работал и все свои горизонтальные линии рисовал в нужном окне, теперь полная неразбериха 

сейчас у другого брокера установил бета версию 2489 

в нормальной версии горизонтальные линии рисовалась в положенных для них подокон, в этой бета - теперь полная неразбериха  

 

может кто подскажет - два одинаковых терминала один билд . и один из них, через каждых пять минут, восстанавливает связь ?

( Терминалы от разных брокеров)  

 
Alexsandr San:

может кто подскажет - два одинаковых терминала один билд . и один из них, через каждых пять минут, восстанавливает связь ?

( Терминалы от разных брокеров)  

Терминалы от разных брокеров цепляются к разным серверам котировок. Какой-то глючит. Поменяй сервер в нижнем правом углу на другой для этого же брокера.

И зачем надо было ставить Бету. У них и релизы то последнее время перевыпускают каждые 2-3 дня.

 
Alexsandr San:

сейчас у другого брокера установил бета версию 2489 

в нормальной версии горизонтальные линии рисовалась в положенных для них подокон, в этой бета - теперь полная неразбериха  

Уже говорилось про "сферических коней в вакууме", и что их разбирать никто не будет. Вы на техническом форуме. Код отрисовки горизонтальных линий ваш где?

 
Loring:

Терминалы от разных брокеров цепляются к разным серверам котировок. Какой-то глючит. Поменяй сервер в нижнем правом углу на другой ждя этого же брокера.

Спасибо! сейчас буду пробовать. (сначала попробую выключить один из них )

 
Artyom Trishkin:

Уже говорилось про "сферических коней в вакууме", и что их разбирать никто не будет. Вы на техническом форуме. Код отрисовки горизонтальных линий ваш где?

что уже можно обсуждать бету версию???

---------------------------------------------

Когда устанавливаю Индикатор вручную всё отлично - а вот когда через утилиту ,как шаблоном графика с Индикаторами, не в бета всё нормально а в бета не нормально 

 
Alexsandr San:

что уже можно обсуждать бету версию???

---------------------------------------------

Когда устанавливаю Индикатор вручную всё отлично - а вот когда через утилиту ,как шаблоном графика с Индикаторами, не в бета всё нормально а в бета не нормально 

Бета-версию нужно обсуждать и давать код для воспроизведения замеченных ошибок.

---------------------------------------------

Опять кони сферические...

 
Loring:

Терминалы от разных брокеров цепляются к разным серверам котировок. Какой-то глючит. Поменяй сервер в нижнем правом углу на другой для этого же брокера.

И зачем надо было ставить Бету. У них и релизы то последнее время перевыпускают каждые 2-3 дня.

Запустил нового брокера терминал - вот он и в поисках какой то связи.( запустил чисто один терминал) не в этом причина, в чём то другом.
 
Artyom Trishkin:

Бета-версию нужно обсуждать и давать код для воспроизведения замеченных ошибок.

---------------------------------------------

Опять кони сферические...

вот сам код - отлично работает . только когда сохраняем график в шаблон в месте с ним, а после с помощью утилиты устанавливаем шаблон - горизонтальные линии не становятся в подокно а становятся на основной график 0

//+------------------------------------------------------------------+
//|                                                  H_A Lin_S_W.mq5 |
//|                                  Heiken Ashi Separate Window.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//|                     https://www.mql5.com/ru/market/product/43516 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Vladimir Karputov"
#property link      "https://www.mql5.com/ru/market/product/43516"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrDodgerBlue, clrRed
#property indicator_label1  "Heiken Ashi Open;Heiken Ashi High;Heiken Ashi Low;Heiken Ashi Close"
//+----------------------------------------------+
//| Входные параметры индикатора                 |
//+----------------------------------------------+
input string   InpFont4              = "RU1"; // Obj:Name
input string   InpFont3              = "SU1"; // Obj:Name
input string   InpFont2              = "RU2"; // Obj:Name
input string   InpFont1              = "SU2"; // Obj:Name
bool   AttachSundToMond = true; // Attach the sunday bars to monday
//--- indicator buffers
double OpenBuffer[];
double HighBuffer[];
double LowBuffer[];
double CloseBuffer[];
double ColorBuffer[];
//---
double BufHigh[];
double BufLow[];
double T;
double R1;
double S1;
datetime TimeShift;
datetime m_prev_bars = 0; // "0" -> D'1970.01.01 00:00';
bool     Redr;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
   fObjHLine(InpFont3,0,InpFont3,1,clrCoral,1,STYLE_DASHDOTDOT,0,true,false,false,OBJ_ALL_PERIODS);
   fObjHLine(InpFont4,0,InpFont4,1,clrLimeGreen,1,STYLE_DASHDOTDOT,0,true,false,false,OBJ_ALL_PERIODS);
//---
   CreateHline(0,1,InpFont2,0,clrDodgerBlue,0,0,1,1,1,1,2);
   CreateHline(0,1,InpFont1,0,clrBlue,0,0,1,1,1,1,2);
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ColorBuffer,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(5,BufHigh,INDICATOR_CALCULATIONS);
   SetIndexBuffer(6,BufLow,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- sets first bar from what index will be drawn
   IndicatorSetString(INDICATOR_SHORTNAME,"H_A Lin_S_W");
//--- sets drawing line empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- initialization done
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Rason)
  {
   ObjectsDeleteAll(0,InpFont2);
   ObjectsDeleteAll(0,InpFont1);
   ObjectsDeleteAll(0,InpFont3);
   ObjectsDeleteAll(0,InpFont4);
   if(Redr)
      ChartRedraw();
  }
//+------------------------------------------------------------------+
//| Heiken Ashi                                                      |
//+------------------------------------------------------------------+
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[])
  {
   int i,limit;
//--- preliminary calculations
   if(prev_calculated==0)
     {
      //--- set first candle
      LowBuffer[0]=low[0];
      HighBuffer[0]=high[0];
      OpenBuffer[0]=open[0];
      CloseBuffer[0]=close[0];
      limit=1;
     }
   else
      limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit; i<rates_total && !IsStopped(); i++)
     {
      double haOpen=(OpenBuffer[i-1]+CloseBuffer[i-1])/2;
      double haClose=(open[i]+high[i]+low[i]+close[i])/4;
      double haHigh=MathMax(high[i],MathMax(haOpen,haClose));
      double haLow=MathMin(low[i],MathMin(haOpen,haClose));

      LowBuffer[i]=haLow;
      HighBuffer[i]=haHigh;
      OpenBuffer[i]=haOpen;
      CloseBuffer[i]=haClose;

      //--- set candle color
      if(haOpen<haClose)
         ColorBuffer[i]=0.0; // set color DodgerBlue
      else
         ColorBuffer[i]=1.0; // set color Red
     }
//---
   if(!ObjectMove(0,InpFont2,0,time[rates_total-1],CloseBuffer[rates_total-1]))
      return(rates_total);
   if(!ObjectMove(0,InpFont1,0,time[rates_total-1],OpenBuffer[rates_total-1]))
      return(rates_total);
//---
     {
      static bool error=true;
      int start;
      if(prev_calculated==0)
        {
         error=true;
        }
      if(error)
        {
         start=1;
         error=false;
        }
      else
        {
         start=prev_calculated-1;
        }
      for(int u=start; u<rates_total; u++)
        {
         BufHigh[u]=BufHigh[u-1];
         BufLow[u]=BufLow[u-1];

         datetime NowTime=time[u]-TimeShift;
         datetime PreTime=time[u-1]-TimeShift;

         if(NewDay(NowTime,PreTime))
           {
            if(BufHigh[u]!=0)
              {
               T=(BufHigh[u]-BufLow[u]);
               R1=(T*0.55)+close[u-1];
               S1=close[u-1]-(T*0.55);
               BufHigh[u]=high[u];
               BufLow[u]=low[u];
              }
            else
              {
               BufHigh[u]=MathMax(BufHigh[u],high[u]);
               BufLow[u]=MathMin(BufLow[u],low[u]);
              }
           }
         datetime tm=time[rates_total-20];

         fObjMove(InpFont3,S1,tm);
         fObjMove(InpFont4,R1,tm);
        }
     }
   if(Redr)
      ChartRedraw();
//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(Symbol(),Period(),0);
   if(time_0==m_prev_bars)
      return(rates_total);
   m_prev_bars=time_0;
//---
   int find_buy_level=ObjectFind(0,InpFont2);
   int find_sell_level=ObjectFind(0,InpFont1);

   int find_buy_levelY=ObjectFind(0,InpFont4);
   int find_sell_levelY=ObjectFind(0,InpFont3);

   if(find_buy_level==0 || find_buy_levelY==0)
     {
      double price=ObjectGetDouble(0,InpFont2,OBJPROP_PRICE);
      double price1=ObjectGetDouble(0,InpFont1,OBJPROP_PRICE);
      double price4=ObjectGetDouble(0,InpFont4,OBJPROP_PRICE);
      if(price1<price && price4<price)
        {
         PlaySound("tick.wav");
         //---
         return(rates_total);
        }
     }
   if(find_sell_level==0 || find_sell_levelY==0)
     {
      double price=ObjectGetDouble(0,InpFont2,OBJPROP_PRICE);
      double price1=ObjectGetDouble(0,InpFont1,OBJPROP_PRICE);
      double price3=ObjectGetDouble(0,InpFont3,OBJPROP_PRICE);
      if(price1>price && price3>price)
        {
         PlaySound("stops.wav");
         //---
         return(rates_total);
        }
     }
   if(Redr)
      ChartRedraw();
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|  Создание горизонтального, ценового уровня                       |
//+------------------------------------------------------------------+
bool CreateHline(long ch_id,int sub_window,
                 string name,double price,
                 color clr,ENUM_LINE_STYLE style,
                 int width,bool back,
                 bool selectable,bool selected,
                 bool hidden,long z_order)
  {
   ObjectCreate(ch_id,name,OBJ_HLINE,sub_window,0,price);
   ObjectSetInteger(ch_id,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(ch_id,name,OBJPROP_STYLE,style);
   ObjectSetInteger(ch_id,name,OBJPROP_WIDTH,width);
   ObjectSetInteger(ch_id,name,OBJPROP_BACK,back);
   ObjectSetInteger(ch_id,name,OBJPROP_SELECTABLE,selectable);
   ObjectSetInteger(ch_id,name,OBJPROP_SELECTED,selected);
   ObjectSetInteger(ch_id,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(ch_id,name,OBJPROP_ZORDER,z_order);
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void fObjHLine(string   aObjName,
               double   aPrice,
               string   aText       =  "HLine",
               int      aWindow     =  0,
               color    aColor      =  Red,
               color    aWidth      =  1,
               color    aStyle      =  0,
               int      aChartID    =  0,
               bool     aBack       =  true,
               bool     aSelectable =  true,
               bool     aSelected   =  false,
               long     aTimeFrames =  OBJ_ALL_PERIODS
              )
  {
   ObjectCreate(aChartID,aObjName,OBJ_HLINE,aWindow,0,aPrice);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_BACK,aBack);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_COLOR,aColor);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_SELECTABLE,aSelectable);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_SELECTED,aSelected);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_TIMEFRAMES,aTimeFrames);
   ObjectSetString(aChartID,aObjName,OBJPROP_TEXT,aText);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_WIDTH,aWidth);
   ObjectSetInteger(aChartID,aObjName,OBJPROP_STYLE,aStyle);
   ObjectMove(aChartID,aObjName,0,0,aPrice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void fObjMove(string   aObjName,
              double   aPrice,
              datetime aTime
             )
  {
   ObjectMove(0,aObjName,0,0,aPrice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool NewDay(datetime aNowTime,datetime aPreTime)
  {
   long NowDay=aNowTime/86400;
   long PreDay=aPreTime/86400;
   if(AttachSundToMond)
     {
      if(NowDay!=PreDay)
        {
         MqlDateTime nts,pts;
         TimeToStruct(aNowTime,nts);
         TimeToStruct(aPreTime,pts);
         if(nts.day_of_week==1 && pts.day_of_week==0)
           {
            return(false);
           }
         return(true);
        }
     }
   else
     {
      return(NowDay!=PreDay);
     }
   return(false);
  }
//+------------------------------------------------------------------+
Причина обращения: