Правильно ли я написал функцию - страница 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);
 }
Примерно так, но за размером файла надо будет следить.