объекты не отображаются на графике в индикаторе

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ivan Kornaukhov
231
Ivan Kornaukhov  
Объекты создаются в списке объектов, но на графике не отображаются. В чем причина не пойму, голову сломал. Тот же код в скрипте работает.
Ihor Herasko
21104
Ihor Herasko  
Ivan Kornaukhov:
Объекты создаются в списке объектов, но на графике не отображаются. В чем причина не пойму, голову сломал. Тот же код в скрипте работает.

А где тогда не работает? Нужно больше подробностей.

Ivan Kornaukhov
231
Ivan Kornaukhov  
Ihor Herasko:

А где тогда не работает? Нужно больше подробностей.

тьфу, забыл написать, что это в индикаторе не отображаются

Ihor Herasko
21104
Ihor Herasko  
Ivan Kornaukhov:

тьфу, забыл написать, что это в индикаторе не отображаются

Покажите выдержку из кода, как создаете объекты. Код вставляется через кнопку "</>" или Alt+S

Ivan Kornaukhov
231
Ivan Kornaukhov  
Ihor Herasko:

Покажите выдержку из кода, как создаете объекты. Код вставляется через кнопку "</>" или Alt+S

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//---- для расчёта и отрисовки индикатора использовано ноль буферов
#property indicator_buffers 0
//---- использовано всего ноль графических построений
#property indicator_plots   0

extern string   startTradeTime= "00:00"; 
extern string   endTradeTime   = "8:59"; 
input color Color    = Red;
input int Size       = 20;
input string Font    = "Verdana";
//+----------------------------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   MqlDateTime  dt;

   int i=0,first=0;
   double MaxRange=0,MinRange=0;
   if(prev_calculated==0) // Первое выполнение функции OnCalculate() после запуска индикатора
     {
      first=0; //номер первого бара, с которого начинается подсчет
      i=rates_total; //кол-во баров, необходимых для копирования из индикатора
     }
   else
     {
      first=prev_calculated-1; // -1 нужна для постоянного пересчета последнего бара
      //+------------------------------------------------------------------+
      //| если бар не новый то rates_total = prev_calculated, значит для копирования из индикатора необходимо еще 1 бар                            |
      //+------------------------------------------------------------------+
      i=rates_total-prev_calculated+1; // +1 нужен для копирования из индикаторного буффера, если rates_total = prev_calculated
     }

   for(i=first;i<rates_total;i++)
     {

      TimeToStruct(time[i],dt);
      if(dt.hour>0 && dt.hour<9)
        {
         if(MaxRange<high[i])
           {
            MaxRange=high[i];
           }
         if(MinRange<low[i])
           {
            MinRange=low[i];
           }
        }
      if(dt.hour==9)
        {
         Line(time[i],MaxRange);
         Line(time[i],MinRange);
         Write(DoubleToString(MaxRange),time[i],MaxRange,i);
        }

     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void Write(string str,datetime time,double price,int i)
  {
   string name="PriceAction "+IntegerToString(i);
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
   ObjectSetString(0,name,OBJPROP_TEXT,str);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrRed);
   ObjectGetInteger(0,name,OBJPROP_SELECTABLE,true);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,true);
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false); // Только для чтения
  }
//+------------------------------------------------------------------+

void Line(datetime time,double price)
  {
   price = NormalizeDouble(price,_Digits);
   string name="Range:"+TimeToString(time,TIME_DATE)+" price:"+DoubleToString(price);
   datetime timeGo = StringToTime(TimeToString(time,TIME_DATE) + " 00:00");
   datetime timeEnd = StringToTime(TimeToString(time,TIME_DATE) + " 09:00");
   ObjectCreate(0,name,OBJ_TREND,0,timeGo,price,timeEnd,price);
    ObjectSetInteger(0,name,OBJPROP_COLOR,clrRed); 
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DASH); 
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(0,name,OBJPROP_BACK,false); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); 
   ObjectSetInteger(0,name,OBJPROP_SELECTED,true); 
//--- включим (true) или отключим (false) режим продолжения отображения линии влево 
   ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,false); 
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0); 
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"PriceAction",-1,-1);
  }
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий