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

[Удален]  
Vinin:
lovova:
Все процес пошол благодарю gwend за то что уделил внимание.

У Роша был код выложен Своя статистика (команда #include) , но похоже он больше не работает. Если он уточнит новую ссылку, советую посмотреть.
Спасибо сейчас у себя покопался а она уменя эта статья есть оказывается
 
lovova:
lovova:
gwend:
Может вместо:
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
Надо как-нибудь так:
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;


Было и так результата нет
Подскажи в чем в данном примере суть !

! является оператором булевского отрицания. То есть !false==true

Отсюда получаем, что конструкция
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
эквивалентна
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)continue;

А соотвественно
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
уже
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)continue;
семантика этих выражений явно разная:-)
[Удален]  
gwend а что нужно сделать чтобы статистика наполнялась а то она один раз выведет и все
 
lovova:
gwend а что нужно сделать чтобы статистика наполнялась а то она один раз выведет и все

Создать массив и обрабатывать его.
 
В операторе FileOpen вместо параметра FILE_WRITE нужно использовать FILE_READ | FILE_WRITE, иначе ранее внесенные данные будут потеряны. И не плохо бы учитывать внесенные позиции для исключения дублирования записей.
[Удален]  

Может подправите кто функцию чегота массивы мне туго даются непойму никак.В начали единожды выводила правильные значения теперь одни нули что не так.

//+------------------------------------------------------------------+
//| Главная функция получения размера лота (вызывается из советника) | НЕ ПРОВЕРЕНА 
//+------------------------------------------------------------------+
 
void Statistika(string fileName,int Magic)
  {
   int profit[];                                             //неясно со знаком  !
   int handle=FileOpen(fileName,FILE_READ | FILE_WRITE,";");
   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()!=Magic) continue;
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL)
      for(int pos=0;pos<OrdersHistoryTotal();pos++)
        {
         profit[pos]=OrderProfit()+OrderCommission();
         FileWrite(handle,profit[pos]);
        }
     }
   FileClose(handle);
 }
 

Не хватает инициализации массива, да он и не в данном случае.

Можно использовать просто int profit;

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

[Удален]  
void Statistika(string fileName,int Magic)
  {
   int profit[];
   int profit;                                             //неясно со знаком  !
   int handle=FileOpen(fileName,FILE_READ | FILE_WRITE,";");
   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()!=Magic) continue;
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL)
      for(int pos=0;pos<OrdersHistoryTotal();pos++)
        {
         profit[pos]=OrderProfit()+OrderCommission();
         FileWrite(handle,profit[pos]);
        }
     }
   FileClose(handle);
 }
Vinin писал (а):

Не хватает инициализации массива, да он и не в данном случае.

Можно использовать просто int profit;

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

Так что ли .А вот с переходом на конец файла а чегото не знаю
 
void Statistika(string fileName,int Magic)
  {
   int profit;                                             //неясно со знаком  !
   int handle=FileOpen(fileName,FILE_READ | FILE_WRITE,";");
   if(handle<1)
     {
      Print("Файл Statistika не обнаружен, последняя ошибка ", GetLastError());
      return;
     }        
  FileSeek(handle, 0, SEEK_END);  
  for(int i=0;i<OrdersHistoryTotal();i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
      if(OrderType()==OP_BUY ||OrderType()==OP_SELL)
      for(int pos=0;pos<OrdersHistoryTotal();pos++)
        {
         profit=OrderProfit()+OrderCommission();
         FileWrite(handle,profit);
        }
     }
   FileClose(handle);
 }
Примерно так, но за размером файла надо будет следить.