Скрипт на нескольких графиках

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

Приветствую!

Написал  простой скрипт

 

void OnStart()
  {
  long currChart,prevChart=ChartFirst();
   int i=0,limit=10;

   while(i<limit)
     {
     Print( "current graph =", prevChart);
     doGraphCorrection(prevChart);
      currChart=ChartNext(prevChart);
      
      if(currChart<0) break;
      prevChart=currChart;
      
      i++;
     }
  }
  
  
  void doGraphCorrection(long vChartID)
  {
    int hIndicator;
   double vIndicator;

   double l1L, l1H;
   if(ObjectFind(vChartID,"1H")<0) { MessageBox( "1H not found"); return;}
   l1H = iGetDayValue(2, 1);
   ObjectSetDouble(vChartID,"1H",OBJPROP_PRICE, l1H);
  
  
   if(ObjectFind(vChartID,"1L")<0) { MessageBox( "1L not found"); return;}
   l1L = iGetDayValue(2, 2);
   ObjectSetDouble(vChartID,"1L",OBJPROP_PRICE, l1L);
  
   }
  
  
  double iGetValue(int handle, int buffer_num)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(handle,buffer_num,0,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the indicator, error code %d",GetLastError());
      return(0.0);
     }
   return(MA[0]);
  }
  
  double iGetDayValue(int iDayNum, int iValueType)
  // iValueType {0 - Open, 1 - High, 2 - Low, 3 - Close}
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),PERIOD_D1,0,iDayNum,rates);
//  if(copied>0)   Print("Скопировано баров: "+copied);
//  else           Print("Не удалось получить исторические данные по символу ",Symbol());
   switch(iValueType)
      {
       case 1: return(rates[iDayNum-1].high);
       case 2: return(rates[iDayNum-1].low);
       default: return(0.0);
      }
   return(0.0);
  }

 Ожидаю от него, что на всех открытых в терминале графиках он переместит линии 1L и 1H на мин, макс. предыдущего дня. 

Ан нет :) - толку что все окна открытых графиков прогоняются через цикл, все равно изменения происходят только там, где стоит фокус, т.е. на активном окне.

Что я не учитываю? 

Ihor Herasko
21179
Ihor Herasko  
nkaretnikov:

Приветствую!

Написал  простой скрипт

Ан нет :) - толку что все окна открытых графиков прогоняются через цикл, все равно изменения происходят только там, где стоит фокус, т.е. на активном окне.

Что я не учитываю? 

В функции iGetDayValue используется символ текущего графика:

int copied=CopyRates(Symbol(),PERIOD_D1,0,iDayNum,rates);

А нужно указывать другой символ.

nkaretnikov
100
nkaretnikov  
Ihor Herasko:

В функции iGetDayValue используется символ текущего графика:

int copied=CopyRates(Symbol(),PERIOD_D1,0,iDayNum,rates);

А нужно указывать другой символ.

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