Правильно ли я написал функцию

 

Хочу организовать статистику чтобы в файл записывались прибыль убыток закрытых ордеров .Она пока молчит подскажите что не так .Хочу нестандартный

ММ организовать.Другой модуль должен из этого файла читать.

void Statistika()
 {
   double profit;
   FailOpen=FileOpen(FileName,FILE_WRITE | FILE_CSV,";");
 
   if(FailOpen<1)
    {
     Print("Файл Statistika не обнаружен, последняя ошибка ", GetLastError());
     return;
    }
      for (int i=0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicKor)     
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL)
        {
         profit=OrderProfit()+OrderCommission();
        }
     if(FailOpen>0)    
        {
        FileWrite(FileName, profit );
        }
     if(FailOpen>0)FileClose(FileName);
  
 }  }
 
Может вместо:
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
Надо как-нибудь так:
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
 
gwend:
Может вместо:
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
Надо как-нибудь так:
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;


Было и так результата нет
 
Сам файл создается а в нем ничего нет
 
2007.07.13 17:11:33    Kor GBPUSD,M5: invalid integer number as parameter 1 for FileClose function
2007.07.13 17:12:07    Kor GBPUSD,M5: invalid integer number as parameter 1 for FileWrite function
Пишет в журнале такие вещи
 
Что-то у Вас с логикой совсем неправильно и с синтаксисом. Вот так работает:
void Statistika(string fileName)
  {
   double profit;
   int handle=FileOpen(fileName,FILE_WRITE | FILE_CSV,";");
   if(handle<1)
     {
      Print("Файл Statistika не обнаружен, последняя ошибка ", GetLastError());
      return;
     }
   for(int i=0;i<OrdersHistoryTotal();i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicKor) continue;
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL) 
        {
         profit=OrderProfit()+OrderCommission();
         FileWrite(handle, profit );
        }
     }
   FileClose(handle);
  }
 
gwend:
Что-то у Вас с логикой совсем неправильно и с синтаксисом. Вот так работает:
void Statistika(string fileName)
  {
   double profit;
   int handle=FileOpen(fileName,FILE_WRITE | FILE_CSV,";");
   if(handle<1)
     {
      Print("Файл Statistika не обнаружен, последняя ошибка ", GetLastError());
      return;
     }
   for(int i=0;i<OrdersHistoryTotal();i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicKor) continue;
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL) 
        {
         profit=OrderProfit()+OrderCommission();
         FileWrite(handle, profit );
        }
     }
   FileClose(handle);
  }

Сейчас вставлю
 
lovova:
2007.07.13 17:11:33    Kor GBPUSD,M5: invalid integer number as parameter 1 for FileClose function
2007.07.13 17:12:07    Kor GBPUSD,M5: invalid integer number as parameter 1 for FileWrite function
Пишет в журнале такие вещи
Функция FileWrite и FileClose принимают в качестве параметра дескриптор файла, а не имя файла. Дескриптор файла возращается функцией FileOpen.
 
Все процес пошол благодарю gwend за то что уделил внимание.
 
lovova:
gwend:
Может вместо:
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
Надо как-нибудь так:
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;


Было и так результата нет
Подскажи в чем в данном примере суть !
 
lovova:
Все процес пошол благодарю gwend за то что уделил внимание.

У Роша был код выложен Своя статистика (команда #include) , но похоже он больше не работает. Если он уточнит новую ссылку, советую посмотреть.