Помогите найти маленькую ошибкув функции FileOpen

 
int statistic ()
{  ResetLastError();
   int filehandle=FileOpen("StatisticReport//Reports.csv", FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
   {  bool orderselecte=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
      string ordertype;if (OrderType()==0)ordertype="Buy";if (OrderType()==1)ordertype="Sell";if (OrderType()==2)ordertype="BuyLimit";if (OrderType()==3)ordertype="SellLimit";if (OrderType()==4)ordertype="BuyStop";if (OrderType()==5)ordertype="SellStopt";
      FileWrite(filehandle,"#",         "Type",   "Sybmol",     "OpenPrice",     "OpenTime",     "Lots",     "ClosePrice",     "CloseTime",     "TakeProfit",     "StopLoss",     "OrderProfit",               "Magic",           "Comment");
FileWrite(filehandle,OrderTicket(),ordertype,OrderSymbol(),OrderOpenPrice(),OrderOpenTime(),OrderLots(),OrderClosePrice(),OrderCloseTime(),OrderTakeProfit(),OrderStopLoss(),DoubleToStr(OrderProfit(),2),OrderMagicNumber(),OrderComment());
      FileClose(filehandle); 
   }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
   return(0);

}

Код синтаксически правильный. Грубых ошибок нет. Написал строго по подобию справки MQL4 .

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

А я хочу , чтобы он дописывал данные. То есть в файле была записана информация по всем сделкам, а не только по последней . 

 
Anton Zverev:

Просто ордер выбирается именно последний, нужно добавить цикл

А ничего что в этом коде ордер выбирается по тикету, а не по индексу?
 
Anton Zverev:

Просто ордер выбирается именно последний, нужно добавить цикл

Я сначала закрываю ордер. А только потом вызываю эту функцию.

На момент вызова этой функции уже нет открытых ордеров. Файл оказался пустым

 
кстати тоже любопытно, существует ли возможность открытия файла для дозаписи? или в поисках флага FILE_APPEND... ;)
 
pfillip-hooken:

Чтобы при повторном открытии файла не происходила перезапись необходимо сдвигать файловый указатель в конец файла при помощи FileSeek(filehandle,0,SEEK_END):

int statistic ()
{  ResetLastError();
   int filehandle=FileOpen("StatisticReport//Reports.csv", FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
   {  
      FileSeek(filehandle,0,SEEK_END);
      bool orderselecte=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
      string ordertype;if (OrderType()==0)ordertype="Buy";if (OrderType()==1)ordertype="Sell";if (OrderType()==2)ordertype="BuyLimit";if (OrderType()==3)ordertype="SellLimit";if (OrderType()==4)ordertype="BuyStop";if (OrderType()==5)ordertype="SellStopt";
      FileWrite(filehandle,"#",         "Type",   "Sybmol",     "OpenPrice",     "OpenTime",     "Lots",     "ClosePrice",     "CloseTime",     "TakeProfit",     "StopLoss",     "OrderProfit",               "Magic",           "Comment");
FileWrite(filehandle,OrderTicket(),ordertype,OrderSymbol(),OrderOpenPrice(),OrderOpenTime(),OrderLots(),OrderClosePrice(),OrderCloseTime(),OrderTakeProfit(),OrderStopLoss(),DoubleToStr(OrderProfit(),2),OrderMagicNumber(),OrderComment());
      FileClose(filehandle); 
   }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
   return(0);
}
 

и тогда при каждом вызове функции будет записываться в конец файла эти данные. через пару минут файл станет на 100 мб больше. что произойдет через 30 минут  ? 

 

 

Автор не дал четких разъяснений что и где должно работать.

 откуда берется например номер ticket 

откуда вызывается эта функция  

Причина обращения: