FileWrite - помогите разобраться.

 

Всем привет! Столкнулся с проблемой... записываю данные через FileWrite, всё пишет, но цикл повторяется с каждым тиком т.е примерно так ( строка 1 - цена 1,19454... строка 2- цена 1,19454... итд.., а мне надо чтобы уже строка 2 была новой данной, не повторялась чтобы... Использовал этот код, вроде работает, но не всегда... прошу помочь))) 

 if(TimeStamp!=Time[0])
              {
               int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
               if(file_handle!=INVALID_HANDLE)
                 {
                  FileSeek(file_handle,0,SEEK_END);
                  FileWrite(file_handle,Price);
                  FileClose(file_handle);
                 }
                 
               FileClose(file_read);
               int AlertCount=1;
               TimeStamp=Time[0];
              }
 
Aibek Mugiynov:
Если записываются одинаковые значения, то скорее всего дело в переменой Price, что то сказать точнее трудно т.к. непонятно где и как вы присваиваете ей значение.
 
Aibek Mugiynov:

Всем привет! Столкнулся с проблемой... записываю данные через FileWrite, всё пишет, но цикл повторяется с каждым тиком т.е примерно так ( строка 1 - цена 1,19454... строка 2- цена 1,19454... итд.., а мне надо чтобы уже строка 2 была новой данной, не повторялась чтобы... Использовал этот код, вроде работает, но не всегда... прошу помочь))) 

"FileClose(file_read);"

- вероятно, здесь должно быть file_handle, а не file_read.

А вообще-то, говоря, что вопрос заключается в записи через FileWrite, и не приводя остальной части кода, Вы тем самым сужаете возможности читающих и желающих помочь людей очень сильно.  Кто и где еще правит, например, TimeStamp - неизвестно. Как обновляется Price - тоже. Знаете, ситуация похожа на вызов на дом компьютерщика с указанием причины вызова "компьютер не работает". Только компьютерщик, приехав, сможет сам поискать смысл этой фразы, а форумчане никак без Вашей информации ничего не узнают. Чтобы люди могли искать ошибку (причину), давайте максимально возможную часть кода.

 
Sergey Kolemanov:
Если записываются одинаковые значения, то скорее всего дело в переменой Price, что то сказать точнее трудно т.к. непонятно где и как вы присваиваете ей значение.
Я беру Price от истории... От последней закрытой сделки.. т.е последний ордер и получаю его цену закрытие, после записываю его на csv файл, но дальше происходит ошибка, мне нужно сделать так чтобы Price записался только один раз
 
Vladimir:

"FileClose(file_read);"

- вероятно, здесь должно быть file_handle, а не file_read.

А вообще-то, говоря, что вопрос заключается в записи через FileWrite, и не приводя остальной части кода, Вы тем самым сужаете возможности читающих и желающих помочь людей очень сильно.  Кто и где еще правит, например, TimeStamp - неизвестно. Как обновляется Price - тоже. Знаете, ситуация похожа на вызов на дом компьютерщика с указанием причины вызова "компьютер не работает". Только компьютерщик, приехав, сможет сам поискать смысл этой фразы, а форумчане никак без Вашей информации ничего не узнают. Чтобы люди могли искать ошибку (причину), давайте максимально возможную часть кода.

Значит я не правильно закрывал файл и поэтому Цена записывалась постоянно?!)
 
Aibek Mugiynov:
Я беру Price от истории... От последней закрытой сделки.. т.е последний ордер и получаю его цену закрытие, после записываю его на csv файл, но дальше происходит ошибка, мне нужно сделать так чтобы Price записался только один раз
А FileWrite случайно не в цикле гоняете (for или  while) ?
 
Sergey Kolemanov:
А FileWrite случайно не в цикле гоняете (for или  while) ?
Да) через цикл for
 
Aibek Mugiynov:
Да) через цикл for

Не ну Вы не серьёзный человек.Так и будем гадать на кофейной гуще ?  Дайте нормальный кусок кода.

 
for(int i=0; i<OrdersHistoryTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicB)
        {
         int      nOrderType     = OrderType();
         int      nOrderTicket   = OrderTicket();
         datetime   OrderCloseT=OrderCloseTime();
         if((nOrderType==OP_BUY && TicketBuy_11==OrderTicket()) && (OrderOpenTime()<OrderCloseT))
           {
            if(TimeStamp_b11!=Time[0]){
               double Price = OrderOpenPrice();
               int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
               if(file_handle!=INVALID_HANDLE)
                 {
                  FileSeek(file_handle,0,SEEK_END);
                  FileWrite(file_handle,Price);
                  FileClose(file_handle);
                 }
                 
               FileClose(file_handle);
               int AlertCount=1;
               TimeStamp_b11=Time[0];
              }}}
TimeStamp_b11 //- Этот код чтобы цикл не повторялся при каждом тике.. но он иногда глючит... в таблице я вижу примерно так

Price

1.19505

1.19505

1.19505 1.19505....

 

Не могу сделать так чтобы получил данные, всё ждем новую... типа 1,19505, 1,19200, 1,19580 итд

 

Aibek Mugiynov:

for(int i=0; i<OrdersHistoryTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicB)
        {
         int      nOrderType     = OrderType();
         int      nOrderTicket   = OrderTicket();
         datetime   OrderCloseT=OrderCloseTime();
         if((nOrderType==OP_BUY && TicketBuy_11==OrderTicket()) && (OrderOpenTime()<OrderCloseT))
           {
            if(TimeStamp_b11!=Time[0]){
               double Price = OrderOpenPrice();
               int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
               if(file_handle!=INVALID_HANDLE)
                 {
                  FileSeek(file_handle,0,SEEK_END);
                  FileWrite(file_handle,Price);
                  FileClose(file_handle);
                 }
                 
               FileClose(file_handle);
               int AlertCount=1;
               TimeStamp_b11=Time[0];
              }}}


1. чему равна TicKetBuy_11 ? если значение постоянное(не меняется) то проблема в этом.

2. зачем 2 раза закрывать файл ?  На результат влиять не будет.


P.S. И проверка на появление нового бара - её правильнее делать перед работой всего цикла.