О LastTradeQuotingStrategy
Atom
15.11.2010
Soloton


Что-то оно совсем не так работает, как описано в документации. Насколько я понял, в конструкторе LastTradeQuotingStrategy предполагается в качестве параметра передать Unit, с параметрами которого стратегия будет работать для изменения цены выставляемой заявки. Пробую:

...
strategy = new QuotingStrategy(order, new Unit() { Type = UnitTypes.Percent, Value = 1 });
if (strategy != null)
{
    base.ChildStrategies.Add(strategy);
    strategy.Start();
}
...

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


Теги:


Спасибо:


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