Есть такая функция MyTrades.GetAveragePrice(), которая выдает среднюю цену исполнения по всем сделкам, но если позиция была открыта, потом закрыта, потом снова открыта, потом частично закрыта, то простое перемножение цен на объемы не будет иметь никакого смысла. Как же узнать среднюю цену, по которой удерживается позиция?
В старых исходниках нашел вот такое:
public static decimal GetAveragePrice(this IEnumerable<Trade> trades)
{
if (trades == null)
throw new ArgumentNullException("trades");
var nominator = 0m;
var denominator = 0m;
foreach (var trade in trades)
{
nominator += trade.Price * trade.Volume;
denominator += trade.Volume;
}
if (denominator == 0)
return 0;
return nominator / denominator;
}
то есть простое перемножение. А есть ли функция, которая учитывает направление сделок?
コメント (3)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Что нибудь вроде этого:
Надо будет посмотреть. На в скидку - код является рудиментом. Возможно, его нужно вообще удалить, а не модернизировать.
Посмотрел ваш код. Он неправильный. В вашем сценарии, когда позу открывали, закрывали, снова открывали в конечном итоге получится направленная позиция со средней ценой открытия. А как вы написали, будет средняя цена открытия-закрытия-открытия.