Как правильно получить среднюю цену открытия позиции?


Как правильно получить среднюю цену открытия позиции?
Atom
7/21/2014


Есть такая функция MyTrades.GetAveragePrice(), которая выдает среднюю цену исполнения по всем сделкам,
но если позиция была открыта, потом закрыта, потом снова открыта, потом частично закрыта, то простое перемножение цен на объемы не будет иметь никакого смысла. Как же узнать среднюю цену, по которой удерживается позиция?

В старых исходниках нашел вот такое:

Code

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;
}


то есть простое перемножение. А есть ли функция, которая учитывает направление сделок?

Tags:


Thanks:


poison

Avatar
Date: 7/21/2014
Reply


Что нибудь вроде этого:

Code

public static decimal GetAveragePriceEx(this IEnumerable<MyTrade> myTrades)
{
	if (myTrades == null)
		throw new ArgumentNullException("myTrades");

	var nominator = 0m;
	var denominator = 0m;

	foreach (var myTrade in myTrades)
	{
		var order = myTrade.Order;
		var trade = myTrade.Trade;
		if (order.Direction == StockSharp.Messages.Sides.Buy)
		{
			nominator += trade.Price * trade.Volume;
			denominator += trade.Volume;
		}
		else
		{
			nominator -= trade.Price * trade.Volume;
			denominator -= trade.Volume;
		}
	}

	if (denominator == 0)
		return 0;

	return nominator / denominator;
}
Thanks: Mikhail Sukhov

Mikhail Sukhov

Avatar
Date: 7/21/2014
Reply


Надо будет посмотреть. На в скидку - код является рудиментом. Возможно, его нужно вообще удалить, а не модернизировать.
Thanks:

Mikhail Sukhov

Avatar
Date: 7/22/2014
Reply


Посмотрел ваш код. Он неправильный. В вашем сценарии, когда позу открывали, закрывали, снова открывали в конечном итоге получится направленная позиция со средней ценой открытия. А как вы написали, будет средняя цена открытия-закрытия-открытия.
Thanks: poison


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy