Как рассчитать всю прибыль за определенный день? - PullRequest
0 голосов
/ 29 апреля 2020
double CheckProfitSofar() 
{
      datetime today = iTime(_Symbol,PERIOD_D1,0);
      int dDay=TimeDay(today);
      int dMonth = TimeMonth(today);
      int dYear = TimeYear(today);
      int todayYear, todayMonth, todayDay;
      datetime opnOrdTime = 0;
      double opnOrdProfit =0;
      double addLoss = 0;
      for(int s=0 ; s<OrdersHistoryTotal(); s++) 
      {
         if ( OrderSelect( s, SELECT_BY_POS, MODE_HISTORY ) == true )
            opnOrdTime = OrderCloseTime();
            todayYear=TimeYear(opnOrdTime);
            todayMonth =TimeMonth(opnOrdTime);
            todayDay=TimeDay(opnOrdTime);
            if ( dYear==todayYear && dMonth==todayMonth && dDay==todayDay )

         totalLoss_Profit += (OrderProfit() + OrderSwap() + OrderCommission()); 
       }
       Comment(dYear," ",dMonth," ",dDay," ",todayYear," ",todayMonth," ",todayDay);  
   return totalLoss_Profit;
}

То, что я хочу, - это то, что я хочу рассчитать прибыль (+ ve или -ve) за определенный день. например сегодня. я использовал «datetime сегодня», чтобы получить время открытия первой свечи сегодня, затем следует. Это не возвращает точное значение. Пожалуйста, помогите. Заранее спасибо.

1 Ответ

1 голос
/ 30 апреля 2020

Вам просто нужно начать этот конкретный день, полученный datetime timeStart = iTime(_Symbol,PERIOD_D1,i), и конец этого дня datetime timeEnd=timeStart+PeriodSeconds(PERIOD_D1);. Затем l oop поверх закрытых сделок и отфильтровываем их, если OrderClosePrice() не находится в диапазоне.

double getClosedPnlOfDay(const int indexDay)
{
   const datetime timeStart=iTime(_Symbol,PERIOD_D1,i),
                  timeEnd = timeStart+PeriodSeconds(PERIOD_D1);
   double result=0.;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      //filter by OrderSymbol() and OrderMagicNumber() here
      if(OrderCloseTime()<timeStart || OrderCloseTime()>=timeEnd) continue;
      result+=OrderProfit() + OrderCommission() + OrderSwap();
   }
}
...