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


Есть такая функция 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 Ответов
poison

Фотография
Дата: 21.07.2014
Ответить


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

Код

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;
}
Автор топика
Спасибо: Mikhail Sukhov

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.07.2014
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 22.07.2014
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy