lesser:
А можно где-то посмотреть код стратегии Котирование что-б легче было , а то опыта в програмировании у меня совсем мало , могу неосилить. А вот внести изменения в уже готовую логику думаю получится.
/// <summary>
/// Котирование по рыночной цене.
/// </summary>
public class MarketQuotingStrategy : BestByPriceQuotingStrategy
{
/// <summary>
/// Создать <see cref="MarketQuotingStrategy"/>.
/// </summary>
/// <param name="quotingDirection">Направление котирования.</param>
/// <param name="quotingVolume">Объем, который необходимо скотировать.</param>
public MarketQuotingStrategy(OrderDirections quotingDirection, decimal quotingVolume)
: base(quotingDirection, quotingVolume)
{
PriceType = MarketPriceTypes.Following;
PriceOffset = new Unit();
}
/// <summary>
/// Создать <see cref="MarketQuotingStrategy"/>.
/// </summary>
/// <param name="order">Заявка, которую необходимо котировать.</param>
/// <param name="bestPriceOffset">Отступ от лучшей цены, на которую может уйти котируемая заявка.</param>
/// <param name="priceOffset">Отступ цены для выставляемой заявки. Определяет размер отступа от лучшей котировки (для покупки прибавляется к цене, для продажи - вычитается).</param>
/// <returns>Стратегия.</returns>
public MarketQuotingStrategy(Order order, Unit bestPriceOffset, Unit priceOffset)
: base(order, bestPriceOffset)
{
PriceType = MarketPriceTypes.Following;
PriceOffset = priceOffset;
}
/// <summary>
/// Тип рыночной цены. По умолчанию равен <see cref="MarketPriceTypes.Following"/>.
/// </summary>
public MarketPriceTypes PriceType { get; set; }
private Unit _priceOffset;
/// <summary>
/// Отступ цены для выставляемой заявки. Определяет размер отступа от лучшей котировки (для покупки прибавляется к цене, для продажи - вычитается).
/// </summary>
public Unit PriceOffset
{
get { return _priceOffset; }
set
{
if (value == null)
throw new ArgumentNullException("value");
_priceOffset = value;
}
}
/// <summary>
/// Получить новую цену для заявки.
/// </summary>
/// <returns>Новая цена заявки.</returns>
protected override decimal GetNewPrice()
{
Unit newPrice;
switch (PriceType)
{
case MarketPriceTypes.Opposite:
var quotes = Security.GetFilteredQuotes(QuotingDirection.Invert(), Order);
newPrice = QuotingDirection == OrderDirections.Buy
? quotes.Min(q => q.Price) - PriceOffset
: quotes.Max(q => q.Price) + PriceOffset;
break;
case MarketPriceTypes.Following:
newPrice = base.GetNewPrice();
if (QuotingDirection == OrderDirections.Buy)
newPrice += PriceOffset;
else
newPrice -= PriceOffset;
break;
case MarketPriceTypes.Middle:
newPrice = Security.GetMarketPrice(QuotingDirection, null, MarketPriceTypes.Middle);
break;
default:
throw new ArgumentOutOfRangeException();
}
return (decimal)newPrice;
}
}
/// <summary>
/// Котирование по лучшей цене. Для данного котирования указывается отступ от лучшей цены <see cref="BestPriceOffset"/>,
/// на который может уйти котируемая заявка.
/// </summary>
public class BestByPriceQuotingStrategy : QuotingStrategy
{
/// <summary>
/// Создать <see cref="BestByPriceQuotingStrategy"/>.
/// </summary>
/// <param name="quotingDirection">Направление котирования.</param>
/// <param name="quotingVolume">Объем, который необходимо скотировать.</param>
public BestByPriceQuotingStrategy(OrderDirections quotingDirection, decimal quotingVolume)
: base(quotingDirection, quotingVolume)
{
BestPriceOffset = new Unit();
}
/// <summary>
/// Создать <see cref="BestByPriceQuotingStrategy"/>.
/// </summary>
/// <param name="order">Заявка, которую необходимо котировать.</param>
/// <param name="bestPriceOffset">Отступ от лучшей цены, на который может уйти котируемая заявка.</param>
public BestByPriceQuotingStrategy(Order order, Unit bestPriceOffset)
: base(order)
{
BestPriceOffset = bestPriceOffset;
}
private Unit _bestPriceOffset;
/// <summary>
/// Отступ от лучшей цены, на который может уйти котируемая заявка.
/// </summary>
public Unit BestPriceOffset
{
get { return _bestPriceOffset; }
set
{
if (value == null)
throw new ArgumentNullException("value");
_bestPriceOffset = value;
}
}
/// <summary>
/// Нужно ли перерегистрировать заявку.
/// </summary>
/// <param name="bestPrice">Лучшая цена.</param>
/// <returns>True, нужно, иначе, false.</returns>
protected override bool NeedReRegister(decimal bestPrice)
{
return (decimal)(bestPrice - BestPriceOffset) > Order.Price || (decimal)(bestPrice + BestPriceOffset) < Order.Price;
}
}