Баланс на момент открытия ордера из истории

 

Здравствуйте. Нужно узнать баланс на момент открытия ордера из истории.

Думаю взять текущий баланс вычесть из него прибыль всех закрывавшихся после открытия нужного ордера ордеров.

То есть, сортируем историю ордеров по времени закрытия. Считаем суммарную прибыль всех ордеров, которые закрывались после времени открытия нужного ордера. Вычитаем эту прибыль из текущего баланса.

Можно ли сделать проще?

 

Думаю примерно так (возможно, так будет проще понять):

double getBalanceByTime(datetime time)
  {
   double profit = 0;
   int    historyTotal = ArraySize(history);
   
   for(int i = historyTotal - 1; i >= 0; i--)
     {
      if(history[i].clsTime < time)
         break;
      
      profit += history[i].profit;
     }
   
   return(AccountBalance() - profit);
  }
 
Maks_Knyazev:

Думаю примерно так (возможно, так будет проще понять):

извините,но взрыв мозга...

 
Было бы проще,если понимать для чего...
 
Nikolay Gaylis:

извините,но взрыв мозга...

Да, хреновенько у меня объяснить получилось.

Сейчас 29.03.2018, текущий баланс равен 1000. Я хочу узнать какой был баланс 10.03.2018 в 09:30.

Выше я грубо накидал пример функции для этого.
Там history[] - это массив, где хранится история ордеров, отсортированная по цене закрытия.
.clsTime - время закрытия ордера
.profit - прибыль ордера (включая комиссию и своп)
в time мы будем передавать 10.03.2018 09:30

В цикле в переменную profit мы получаем сумму прибылей всех ордеров, которые закрылись после 10.03.2018 09:30. Например она равна 250. Значит баланс 10.03.2018 в 09:30 был равен 1000 - 250 = 750.

Так вот, на сколько оптимальным является такое решение? Можно ли сделать проще?

 
Maks_Knyazev:

Так вот, на сколько оптимальным является такое решение? Можно ли сделать проще?

Это наиболее универсальное решение, т. к. позволяет узнать величину баланса постфактум (т. е. даже в том случае, когда в интересующее время программа не функционировала). Так что дальше искать нечего. Более того, решение достаточно простое, ресурсов особо не занимает. Зачем еще проще?

Разве что можно исключить этап сбора всей истории счета с сортировкой по времени. Просто пройтись по всей истории и получить данные.

 
Ihor Herasko:

Это наиболее универсальное решение, т. к. позволяет узнать величину баланса постфактум (т. е. даже в том случае, когда в интересующее время программа не функционировала). Так что дальше искать нечего. Более того, решение достаточно простое, ресурсов особо не занимает. Зачем еще проще?

Разве что можно исключить этап сбора всей истории счета с сортировкой по времени. Просто пройтись по всей истории и получить данные.

Спасибо большое!

Причина обращения: