Просчет профита ордеров из истории

 

Добрый вечер, господа.

Столкнулся с такой проблемой: нужно вычислить профит закрытых ордеров из истории, из функции OnTester (т.е по завершении программы). 

Я использую OrderProfit() и вычитаю OrderCommission() и OrderSwap(), но тут не учитывается спред. При попытке учесть спред выходит бред. Я перемножаю цену пункта, спред в пунктах, объем ордера и получаю неправильные значения. Полученные профиты не сходятся с профитами в таблице результатов тестера. Как мне получить именно те значения?

 
Denis Glaz:

Добрый вечер, господа.

Столкнулся с такой проблемой: нужно вычислить профит закрытых ордеров из истории, из функции OnTester (т.е по завершении программы). 

Я использую OrderProfit() и вычитаю OrderCommission() и OrderSwap(), но тут не учитывается спред. При попытке учесть спред выходит бред. Я перемножаю цену пункта, спред в пунктах, объем ордера и получаю неправильные значения. Полученные профиты не сходятся с профитами в таблице результатов тестера. Как мне получить именно те значения?

Спред уже учтен, в любой сделке. Правильный учет прибыли ордера (не вычитать, а складывать):

double fTotalProfit = OrderProfit() + OrderSwap() + OrderComission();
 
Ihor Herasko:

Спред уже учтен, в любой сделке. Правильный учет прибыли ордера (не вычитать, а складывать):

Спасибо. Не заметил, что там знак минус

 
Доброго дня Господа.
Прошу Вашей помощи.
Ниже две функции значение которых преодически должны равняться друг другу.
Цель: Если профит закрытых ордеров равен или больше максимальному значению суммы профитов, то ....
Но после серии убытков при незначительном положительном результате (меньше чем сумма серии убытков естественно)
значение функции Count_Max_Profit_History() увеличивается.
Где то очень маленькая ошибка. Либо вся логика ошибочна.
Заранее благодарю за помощь.

//+----------------------------------------------------------------------------------+
//|             Функция Count_Max_Profit_History подсчета Max_Profit закрытых ордеров|
//+----------------------------------------------------------------------------------+
double Count_Max_Profit_History()
  {
   double max_profit_history = 0;
   double profit_history = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol())
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderMagicNumber() == Magic)
                 {
                  profit_history += NormalizeDouble((OrderProfit() + OrderSwap()), 2);
                  if(profit_history > max_profit_history)
                    {
                     max_profit_history = profit_history;
                    }
                 }
              }
           }
        }
     }
   return(max_profit_history);
  }
//+--------------------------------------------------------------------------------+
//|                  Функция Count_Profit_History подсчета Profit закрытых ордеров |
//+--------------------------------------------------------------------------------+
double Count_Profit_History()
  {
   double total_profit_history = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol())
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderMagicNumber() == Magic)
                 {
                  total_profit_history += NormalizeDouble((OrderProfit() + OrderSwap()), 2);
                 }
              }
           }
        }
     }
   return(total_profit_history);
  }
Причина обращения: