Обмен данными и управление Excel (разбираемся в применении библиотеки от AVALS) - страница 3

 
avatara:

замени в моем шаблоне индексы.



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

а как будет праввильнее, ваш вариант выше или вот этот, до которога допетрил я . по сути я так понимаю что просто вставил в шаблон 2 цикла вовнутрь, первый на сброс истории баров на лист, а вторым циклом обновление этой истории на листе.

у вас же я так понял всего один общий цикл. а зачем тогда нужно вот это

//+------------------------------------------------------------------+          
//
//+------------------------------------------------------------------+
string dataConv(datetime T)
  {
  return(StringConcatenate(" ",TimeYear(T),"/",ItS(TimeMonth(T),2),
  "/",ItS(TimeDay(T),2)," ",ItS(TimeHour(T),2),":",
  ItS(TimeMinute(T),2)));
  }
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
 string ItS(int Vars, int Pw0=2, string Filler="0")
  {
       string   Fils="";int Pw=Pw0;
       if (Vars<0) Pw--;
   for (int i=Pw-1;i>0;i--) 
      if (MathPow(10,i)>Vars) Fils=StringConcatenate(Fils,Filler);
      return(StringConcatenate(Fils,Vars));
  }
//+------------------------------------------------------------------+          
//

у меня и без этого получилось вот так

int start()
  { 
  int i,N=300;
        if (ExcelOpen()) Print("Уcпешно открыли Excel"); else Print("Не открывается Excel:",ExcelGetLastErrorText());//Открываем Excel        
        
        ExcelSetTextCell(1,1,"EURUSD");       
        ExcelSetTextCell(1,3,"GBPUSD");       
        ExcelSetTextCell(1,5,"USDCHF");
      
        
     for (i=0;i<N;i++){   
        ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));        
        ExcelSetValueCell(2+i,3,iOpen("GBPUSD",PERIOD_M1,i));             
        ExcelSetValueCell(2+i,5,iOpen("USDCHF",PERIOD_M1,i));
      
               
      }//for i        
        
    for (i=0;i<N;i++){                
      bool NeedLoop=true;  
        double lastEURUSD,lastGBPUSD,lastUSDCHF;
        double curEURUSD,curGBPUSD,curUSDCHF;
        while(NeedLoop){           
          curEURUSD=iOpen("EURUSD",PERIOD_M1,i);
          curGBPUSD=iOpen("GBPUSD",PERIOD_M1,i);
          curUSDCHF=iOpen("USDCHF",PERIOD_M1,i);
          if  (lastEURUSD!=curEURUSD){
            lastEURUSD=curEURUSD;
            ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));                    
          }
          if  (lastGBPUSD!=curGBPUSD){
            lastGBPUSD=curGBPUSD;
            ExcelSetValueCell(2+i,3,iOpen("GBPUSD",PERIOD_M1,i));                    
          }          
          if  (lastUSDCHF!=curUSDCHF){
            lastUSDCHF=curUSDCHF;
            ExcelSetValueCell(2+i,5,iOpen("USDCHF",PERIOD_M1,i));                    
          }                              
          Sleep(1000);
        }//while
        }//for i       
        
   return(0);
  }

void deinit()
  {
   ExcelSaveAs("C:\proba.xls");
   ExcelClose();
  }

Возможно и так и так можно, но как рациональнее правельнее

ПС: С ПОБЕДОЙ!!!!

 

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

пока делал так

1-указал путь к файлу; 2-потом создаю в нем лист, куда будут скидываться история.

НО ПОЛУЧАЕТСЯ ТАКАЯ БЕЛИБЕРДА, история скидывается в создаваемый лист, но как бы просачивается отрывками на другом листе, где не должна отображаться.

 
Freud:

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

пока делал так

1-указал путь к файлу; 2-потом создаю в нем лист, куда будут скидываться история.

НО ПОЛУЧАЕТСЯ ТАКАЯ БЕЛИБЕРДА, история скидывается в создаваемый лист, но как бы просачивается отрывками на другом листе, где не должна отображаться.

Данные берутся и скидываются только на\с текущего листа

ЗЫ: не проще было сделать сброс обычный CSV файл и потом делать импорт в эксель?

 
sanyooooook:

Данные берутся и скидываются только на\с текущего листа

ЗЫ: не проще было сделать сброс обычный CSV файл и потом делать импорт в эксель?



нужно динамическое исполнение, автор библиотеки обещал динамику)))) (не предъява)

немогу понять причину косяка.

какое на/с текущего листа? там же создается лист, и на него же идет обновление

 
Freud:



нужно динамическое исполнение, автор библиотеки обещал динамику)))) (не предъява)

немогу понять причину косяка.

какое на/с текущего листа? там же создается лист, и на него же идет обновление

попробуй во время считывания\записи смени текущий лист )
 
sanyooooook:
попробуй во время считывания\записи смени текущий лист )



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

ПС: кстати я вроде в коде итак сделал что постоянно создается/меняется этот лист.

 

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

как правильно поменять в цикле, чтобы данные скидывались как бы с конца. вот так щас(выделенные)

int start()
  { 
  int i,N=2500;
        if (ExcelOpenFile("C:\Program Files\Alpari NZ MT4\experts\files\данные.xls")) Print("Уcпешно открыли Excel"); else Print("Не открывается Excel:",ExcelGetLastErrorText());//Открываем Excel        
     
        ExcelSetTextCell(1,1,"EURUSD");       
        
        
     for (i=0;i<N;i++){   
        ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));        
        
               
               
      }//for i         
        
    for (i=0;i<N;i++){                
      bool NeedLoop=true;  
        double lastEURUSD;
        double curEURUSD;
        while(NeedLoop){           
          curEURUSD=iOpen("EURUSD",PERIOD_M1,i);
          
          if  (lastEURUSD!=curEURUSD){
            lastEURUSD=curEURUSD;
            ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));                    
    
          }                              
          Sleep(30000);
        }//while
        }//for i       
        
   return(0);
  }

void deinit()
  {
   ExcelSaveAs("C:\Program Files\Alpari NZ MT4\experts\files\данные.xls");
   ExcelClose();
  }
 

так айбатово будит?

int start()
  { 
  int i,N=2500;
        if (ExcelOpenFile("C:\Program Files\Alpari NZ MT4\experts\files\данные.xls")) Print("Уcпешно открыли Excel"); else Print("Не открывается Excel:",ExcelGetLastErrorText());//Открываем Excel        
     
        ExcelSetTextCell(1,1,"EURUSD");       
        
        
    

for (i=N-1;i>=0;i--){  

        ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));                                                      

}//for i                     for (i=N-1;i>=0;i--){  

                     bool NeedLoop=true;           double lastEURUSD;         double curEURUSD;         while(NeedLoop){                     curEURUSD=iOpen("EURUSD",PERIOD_M1,i);                      if  (lastEURUSD!=curEURUSD){             lastEURUSD=curEURUSD;             ExcelSetValueCell(2+i,1,iOpen("EURUSD",PERIOD_M1,i));                                    }                                         Sleep(30000);         }//while        

 }

//for i   

   
            return(0);   } void deinit()   {    ExcelSaveAs("C:\Program Files\Alpari NZ MT4\experts\files\данные.xls");    ExcelClose();   }
 

или так ?

int i,N=2500;

for (i=N;N>=0;i--){  


}//for i 
 

или так?

int i,N=2500;

for (i=2500;N>=0;i--){  


}//for i 
Причина обращения: