О LastTradeQuotingStrategy
Atom
15.11.2010


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


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

Теги:


Спасибо:



Именинники: dim7000

Mikhail Sukhov

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


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


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

Soloton

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


Может это я не так понял документацию?
Ожидалось, что цена в выставляемой стратегией заявке будет изменена на величину 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;
}
}


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

Soloton

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


Вопрос снят. Спешил задать его, не попробовав внести изменения с учётом уточнения Михаила.
Теперь код выглядит так.
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;
}
}

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


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

loading
clippy