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

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

Всем привет! Столкнулся с проблемой... записываю данные через 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];
              }
Sergey Kolemanov
1020
Sergey Kolemanov  
Aibek Mugiynov:
Если записываются одинаковые значения, то скорее всего дело в переменой Price, что то сказать точнее трудно т.к. непонятно где и как вы присваиваете ей значение.
Vladimir
1204
Vladimir  
Aibek Mugiynov:

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

"FileClose(file_read);"

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

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

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

"FileClose(file_read);"

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

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

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

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

Aibek Mugiynov
7480
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];
              }}}
TimeStamp_b11 //- Этот код чтобы цикл не повторялся при каждом тике.. но он иногда глючит... в таблице я вижу примерно так

Price

1.19505

1.19505

1.19505 1.19505....

Aibek Mugiynov
7480
Aibek Mugiynov  

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

Sergey Kolemanov
1020
Sergey Kolemanov  

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. И проверка на появление нового бара - её правильнее делать перед работой всего цикла.

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