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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maks_Knyazev
95
Maks_Knyazev  

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

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

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

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

Maks_Knyazev
95
Maks_Knyazev  

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

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);
  }
Nikolay Gaylis
16098
Nikolay Gaylis  
Maks_Knyazev:

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

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

Nikolay Gaylis
16098
Nikolay Gaylis  
Было бы проще,если понимать для чего...
Maks_Knyazev
95
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.

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

Ihor Herasko
21868
Ihor Herasko  
Maks_Knyazev:

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

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

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

Maks_Knyazev
95
Maks_Knyazev  
Ihor Herasko:

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий