О LastTradeQuotingStrategy
Atom Ответить
15.11.2010


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


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

Теги:


Спасибо:




3 Ответов
Mikhail Sukhov

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


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


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

Soloton

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


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

Пробую реализовать такое поведение, создав класс-потомок LastTradeQuotingStrategy:
Код
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
Ответить


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