Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
pfillip-hooken
12
pfillip-hooken 2015.09.30 08:37 
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 .

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

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

Alexey Viktorov
7754
Alexey Viktorov 2015.09.30 08:54  
Anton Zverev:

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

А ничего что в этом коде ордер выбирается по тикету, а не по индексу?
pfillip-hooken
12
pfillip-hooken 2015.09.30 09:02  
Anton Zverev:

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

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

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

Andrey Ziablytsev
1717
Andrey Ziablytsev 2015.09.30 11:58  
кстати тоже любопытно, существует ли возможность открытия файла для дозаписи? или в поисках флага FILE_APPEND... ;)
Artem Temnikov
1031
Artem Temnikov 2015.09.30 13:35  
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);
}
Vladislav Andruschenko
93838
Vladislav Andruschenko 2015.10.01 08:19  

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

 

 

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

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

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

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