Подсчет профита по всем открытым ордерам

 
Привет! Скажите пожалуйста правильно ли написана эта функция:
double ProfitOrder(int Type)
{
   double res=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==Magic)
            {
               if(OrderType()==Type)
               {
                  res=res+OrderProfit()+OrderSwap()+OrderCommission();
               }
            }
         }
      }
   }
   return(res);
}
Проблема в том что заказчик говорит что при подсчете профита не учитывается своп... в функции этот момент прописан, не пойму в чем дело!
 

функция правильная, 99% экспертов в рунете так и написаны

но ее нужно подстроить под брокера, читайте https://book.mql4.com/ru/appendix/marketinfo

Вам интересен идентификатор MODE_SWAPTYPE

Идентификаторы функции MarketInfo() - Приложения - Учебник по MQL4
Идентификаторы функции MarketInfo() - Приложения - Учебник по MQL4
  • book.mql4.com
Идентификаторы запроса, используемые в функции MarketInfo(), могут принимать следующие значения: Константа Значение Описание Уровень заморозки ордеров в пунктах. Если цена исполнения...
 
Igor Makanu:

функция правильная, 99% экспертов в рунете так и написаны

но ее нужно подстроить под брокера, читайте https://book.mql4.com/ru/appendix/marketinfo

Вам интересен идентификатор MODE_SWAPTYPE

Если я правильно понял то мне нужно через MarketInfo(Symbol(),MODE_SWAPTYPE); вычислить как брокер отображает своп (пункты, валюта и т.д.), а уже потом сделать соответственную коррекцию в коде для подсчета свопа? Все правильно?

 
Maksim Neimerik:

Если я правильно понял то мне нужно через MarketInfo(Symbol(),MODE_SWAPTYPE); вычислить как брокер отображает своп (пункты, валюта и т.д.), а уже потом сделать соответственную коррекцию в коде для подсчета свопа? Все правильно?

Не логично. Если мы считаем деньги в OrderProfit(), то здесь уже деньги OrderSwap(). Какой смысл ещё что-то высчитывать?

 
Vitaly Muzichenko:

Не логично. Если мы считаем деньги в OrderProfit(), то здесь уже деньги OrderSwap(). Какой смысл ещё что-то высчитывать?

Тогда почему не работает? Получается OrderProfit() и OrderSwap() не всегда измеряются в одном и том же показателе...
 
Maksim Neimerik:
Привет! Скажите пожалуйста правильно ли написана эта функция:Проблема в том что заказчик говорит что при подсчете профита не учитывается своп... в функции этот момент прописан, не пойму в чем дело!

Попробуйте поставить код в OnInit

double ProfitOrder(int Type)
{
   double res=0;
double swp=0;
double com=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==Magic)
            {
               if(OrderType()==Type)
               {
                  res+=OrderProfit();
                  com=+OrderSwap();
                  swp=+OrderCommission();
               }
            }
         }
      }
   }
   Print(com,"=",swp);
   return(res);
}
 
Vitaly Muzichenko:

Попробуйте поставить код в OnInit

Не понимаю что это даст... При выполнении OnInit не будет открытых ордеров...
 
Maksim Neimerik:
Не понимаю что это даст... При выполнении OnInit не будет открытых ордеров...

На график, где уже есть позиции и начислен своп.

Ну или в OnTick и прогнать в тестере

 
Maksim Neimerik:

Если я правильно понял то мне нужно через MarketInfo(Symbol(),MODE_SWAPTYPE); вычислить как брокер отображает своп (пункты, валюта и т.д.), а уже потом сделать соответственную коррекцию в коде для подсчета свопа? Все правильно?

как минимум нужно протестировать что пишет у заказчика MarketInfo(Symbol(),MODE_SWAPTYPE) на инструменте, редко кто проверяет этот параметр, Ваш код в первом сообщении должен на Форексе без проблем работать, редко кто жаловался