Скачать MetaTrader 5

Запись в файл.....?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появились структуры?
Forex Trader
114257
Forex Trader 2006.02.17 18:17 
Собственно сабж....
Можно ли из пользовательского индикатора записывать значения в файл?

У меня при попытке записи выдается ошибка ERR_SOME_FILE_ERROR.
Forex Trader
114257
Forex Trader 2006.02.17 19:49  
Возможно, файл для записи был открыт другой программой в это время.
Forex Trader
114257
Forex Trader 2006.02.17 21:21  
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....
Forex Trader
114257
Forex Trader 2006.02.17 21:55  
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....


Собственно, об этом и говорю, метатрейдер закрыл файл, в этол время юзер решил посмотреть что-там (или другой код к нему обратился), индикатор попытался еще раз открыть для записи , и вот ошибка.. Как вариант.
Forex Trader
114257
Forex Trader 2006.02.17 22:03  
Файл скорее всего открыт метатрейдером, поскольку индикатор весит на графике. Однако в коде индикатора файл открывается и закрывается....


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


Хорошо, а как тогда сделать? Пытаюсь вот так, но кроме одного значения ничего не пишется.....

int handle,err;
      
      handle=FileOpen("Values.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      err= GetLastError();
      if (err!= 0) {
           Comment("err=",err);
           return (0); 
     //      handle=FileOpen("Values.csv", FILE_CSV|FILE_WRITE|FILE_READ, ';');
           }
      if(handle>0)
      { 
         Comment("err1=",err);
         FileSeek(handle, 0, SEEK_SET);
         
         FileWrite(handle, UP,DN );
         err= GetLastError();
         if (err!= 0) {
            Print("Ошибка записи в файл - ", err);
            return (0);
            }

         FileClose(handle);
      }

      i--;
     
   } 
MetaQuotes Software Corp.
Модератор
181349
MetaQuotes Software Corp. 2006.02.17 22:25  
Если хотите дописать в конец файла, то вместо
FileSeek(handle, 0, SEEK_SET);
нужно использовать
FileSeek(handle, 0, SEEK_END);
Forex Trader
114257
Forex Trader 2006.02.17 22:30  
Если хотите дописать в конец файла, то вместо
FileSeek(handle, 0, SEEK_SET);
нужно использовать
FileSeek(handle, 0, SEEK_END);


Большое спасибо, это моя невнимательность.....Все работает.
Forex Trader
114257
Forex Trader 2006.02.18 14:57  
Все тот-же вывод значений в файл.....вывожу значения котировок, часть данных выводится нормально, часть нет.....И это все беспорядочно чередуется.
Подскажите, в чем может быть проблема?


янв.44 янв.31 янв.34
янв.51 янв.26 янв.49
янв.49 янв.32 янв.38
янв.46 янв.36 янв.45
янв.48 янв.32 янв.32
1.194 янв.31 янв.39
янв.77 1.192 янв.75
янв.91 янв.15 янв.15
янв.18 1.1801 1.1811
1.1838 1.1808 1.1826
1.1829 1.1806 1.182
1.183 1.1815 1.1816
1.1827 1.1815 1.1821
1.1825 1.1819 1.1822
1.1823 1.181 1.1811
MetaQuotes Software Corp.
Модератор
181349
MetaQuotes Software Corp. 2006.02.18 15:51  
Приведите полный код вывода, пожалуйста.
Без этого можно только делать догадки.
Forex Trader
114257
Forex Trader 2006.02.18 21:12  
Приведите полный код вывода, пожалуйста.
Без этого можно только делать догадки.


Данные пишутся в 2 файла.........поскольку цены неправильные, индикатор тоже считается не верно. Но на графике все отображается как надо.

int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double Brick=0,DN=0,UP=0,BricksUp=0,BricksDn=0,Value1=0;
   string timeStr;
   int handle,err;
//---- 
   if (Bars<=Smooth) return(0);
   i=Bars-Smooth-1; 
   if(counted_bars>=Smooth) i=Bars-counted_bars-1;
   
//---- 
//   Value1=iATR(NULL,0,Smooth,0); 
//---- 
   while(i>=0)
   {
      if(i==Bars-Smooth-1)  // Первый бар
         {
            UP=High[i];
            DN=Low[i];
            Brick=Stap*(High[i]-Low[i]);
            handle=FileOpen("Renko.csv",FILE_CSV|FILE_WRITE, ';');
            FileSeek(handle, 0, SEEK_SET);
            FileWrite(handle, "RenkoUP","RenkoDN","DATE","TIME","i","High[i]","Low[i]","Close[i]","Value1","Brick","BricksUp","BricksDn");
            FileClose(handle);
         }
      else
         {
           if (Close[i]>UP+Brick)
             {
               BricksUp=MathFloor((Close[i]-UP)/Brick)*Brick;
               UP=UP+BricksUp;
               Value1=iATR (NULL,0,Smooth,i); 
               Brick=Stap*Value1;
               DN=UP-Brick;
               BricksDn=0;
             }  
           if (Close[i]<DN-Brick)
             {   
               BricksDn=MathFloor((DN-Close[i])/Brick)*Brick;  
               DN=DN-BricksDn;
               Value1=iATR(NULL,0,Smooth,i); 
               Brick=Stap*Value1;       
               UP=DN+Brick;
               BricksUp=0;
             }
          // else //{
                //UP = ExtMapBuffer1[i-1];
                //DN = ExtMapBuffer2[i-1]; }  
         } 
      ExtMapBuffer1[i]=UP;
      ExtMapBuffer2[i]=DN;

      int handleQuotes;
      
      handle=FileOpen("Renko.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      handleQuotes=FileOpen("Quotes.csv",FILE_CSV|FILE_WRITE|FILE_READ, ';');
      err= GetLastError();
      if (err!= 0) {
           Comment("err=",err);
           return (0); 
           }
      if(handle>0)
      { 
         Comment("err1=",err);
         FileSeek(handle, 0, SEEK_END);
         FileSeek(handleQuotes, 0, SEEK_END);
         
         FileWrite(handle, ExtMapBuffer1[i],ExtMapBuffer2[i],TimeToStr(Time[i],TIME_DATE),TimeToStr( Time [i],TIME_MINUTES),i,High[i],Low[i],Close[i],Value1,Brick,BricksUp,BricksDn);
         FileWrite(handleQuotes,i,High[i],Low[i],Close[i] );
         
         err= GetLastError();
         if (err!= 0) {
            Print("Ошибка записи в файл - ", err);
            return (0);
            }

         FileClose(handle);
         FileClose(handleQuotes);
      }

      i--;
     
   }
//----
   return(0);
  }
MetaQuotes Software Corp.
Модератор
181349
MetaQuotes Software Corp. 2006.02.19 00:21  
А кто будет дескрипторы файлов перед return (0) закрывать?
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий