О LastTradeQuotingStrategy

О LastTradeQuotingStrategy
Atom
11/15/2010
Soloton


Что-то оно совсем не так работает, как описано в документации.
Насколько я понял, в конструкторе LastTradeQuotingStrategy предполагается в качестве параметра передать Unit, с параметрами которого стратегия будет работать для изменения цены выставляемой заявки. Пробую:
Code
...
strategy = new QuotingStrategy(order, new Unit() { Type = UnitTypes.Percent, Value = 1 });
if (strategy != null)
{
base.ChildStrategies.Add(strategy);
strategy.Start();
}
...


В логе вижу, что стратегия работает, выставляет заявку и, как и ожидалось, меняет её с учётом последней сделки, но почему-то Unit не учитывается совсем. Я что-то не так делаю?

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 11/15/2010
Reply


Soloton
Что-то оно совсем не так работает, как описано в документации.


Судя по всему ошибка в доке. MarketDelta учитывается при определении лучшей цены (в данном случае послед сделки). Если она ушла на эту дельту - перестановка. Честно говоря, уже не помню когда случилась разсинхронизация с документацией. Спасибо, исправлю. И да, а какое поведение ожидалось?
Thanks:

Soloton

Avatar
Date: 11/16/2010
Reply


Может это я не так понял документацию?
Ожидалось, что цена в выставляемой стратегией заявке будет изменена на величину MarketDelta. Т.е. при последней сделке в 1000р. и MarketDelta 0,1%, заявка выставится с ценой 1001р. при продаже и 999р. при покупке. И так при каждой новой не нашей сделке.

Пробую реализовать такое поведение, создав класс-потомок LastTradeQuotingStrategy:
Code
public class MyLastTradeQuotingStrategy : LastTradeQuotingStrategy
{
public MyLastTradeQuotingStrategy(Order order, Unit marketDelta)
: base(order, marketDelta) {}

protected override double GetNewPrice()
{
var r = base.GetNewPrice();
r = Math.Round((double)(r + (base.Order.Direction == OrderDirections.Buy ? new Unit(-base.MarketDelta.Value, base.MarketDelta.Type) : base.MarketDelta)), base.Security.Decimals);
return r;
}
}


Работает, однако что-то всё же делаю не так или не делаю как надо, потому что ожидаемой реакции на сделки нет. Заявка выставляется, но изменение происходит только при завершении заявки. Что упустил?
Thanks:

Soloton

Avatar
Date: 11/16/2010
Reply


Вопрос снят. Спешил задать его, не попробовав внести изменения с учётом уточнения Михаила.
Теперь код выглядит так.
Code
public class MyLastTradeQuotingStrategy : LastTradeQuotingStrategy
{
Unit ChangeInPrice;
public MyLastTradeQuotingStrategy(Order order, Unit marketDelta ,Unit changeInPrice)
: base(order, marketDelta)
{
this.ChangeInPrice = changeInPrice;
}

protected override double GetNewPrice()
{
var r = base.GetNewPrice();
r = Math.Round((double)(r + (base.Order.Direction == OrderDirections.Buy ? new Unit(-this.ChangeInPrice.Value, this.ChangeInPrice.Type) : this.ChangeInPrice)), base.Security.Decimals);
return r;
}
}

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


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

loading
clippy