SlippageManager
Atom
2/28/2011


Доброго времени суток!
Помогите, пожалуйста, разобраться с механизмом SlippageManager... Сталкнулся со следующей проблемой:
Имеются базовая и дочерня стратегии, в дочерней стратегии создается дочерняя стратегия котирования:

Ecng.Trading.Algo.Strategies.MarketQuotingStrategy strategy = new Ecng.Trading.Algo.Strategies.MarketQuotingStrategy(
order,
new Ecng.Trading.BusinessEntities.Unit(),
new Ecng.Trading.BusinessEntities.Unit());
strategy.IsForts = true;
strategy.Interval = TimeSpan.FromTicks(1);
strategy.PriceType = Ecng.Trading.Algo.MarketPriceTypes.Following;
strategy.PriceDelta = 0;

ChildStrategies.Add(strategy);
//регистрация проскальзывания
strategy.NewOrder += (new_order) =>
{
strategy.SlippageManager.RegisterSlippage(new_order);
};

strategy.Start();

Далее при опросе SlippageManager.Slippage для самой верхней базовой стратегии всегда возвращается 0, хотя заявки выполняются по ценам, отличным от заданных в order при создании стратегии квотирования. Вопрос в том, почему не считается проскальзывание?

Заранее спасибо!

P.S.
Попробовал сразу регистрировать Order для базовой стратегии без котирования, все равно проскальзывание не считается. Непонятно как для фьючерсов раработает механизм

Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 2/28/2011
Reply


Явно регистрировать заявку в SlippageManager не нужно - это делает сама Strategy в методе Strategy.RegisterOrder и Strategy.ReRegisterOrder.
Thanks:

Артем

Avatar
Date: 3/1/2011
Reply


Да, я сначала делал без strategy.SlippageManager.RegisterSlippage, эта строка добавилась в ходе экспериментов... Михаил, видимо, когда я задавал вопрос, сам не до конца понял, что хотел выяснить... Мне необходимо зафиксировать проскальзывание для фьючерсов при эмуляции продажи по рынку, для этого пытаюсь понять доступные механизмы.

Например, текущая цена для фьючерса 180 200, я хочу продать <по рынку>, для этого выставляю Order на продажу по цене на 200 дешевле т.е. 180 000. Как зафиксировать проскальзывание для Order относительно текущей цены 180 200 или какой-то, которую я сам хочу использовать в качестве начальной(например, цена открытия текущей свечи)?


Thanks:

Артем

Avatar
Date: 3/1/2011
Reply


Попробовал создавать лимитированную стоп-заявку, но все равно проскальзывание 0 все время

Ecng.Trading.BusinessEntities.Order _merketOrder = new Ecng.Trading.BusinessEntities.Order();
_merketOrder = order.Clone();
double _marketPrice = (order.Direction == Ecng.Trading.BusinessEntities.OrderDirections.Buy) ? (order.Price + 1000) : Math.Max(this.Security.MinPrice, order.Price - 1000);
_merketOrder.Price = _marketPrice;
_merketOrder.Type = Ecng.Trading.BusinessEntities.OrderTypes.Conditional;
_merketOrder.StopCondition = new Ecng.Trading.Quik.QuikStopCondition()
{
Type = Ecng.Trading.Quik.QuikStopConditionTypes.StopLimit,
StopPrice = order.Price,
ExpiryDate = DateTime.MaxValue
};

RegisterOrder(_merketOrder);
Thanks:

Mikhail Sukhov

Avatar
Date: 3/1/2011
Reply


Артем Go to
Попробовал создавать лимитированную стоп-заявку, но все равно проскальзывание 0 все время


Проскальзывание рассчитывается относительно сделок. А по стоп заявке сделок быть не может.
Thanks:

Артем

Avatar
Date: 3/1/2011
Reply


Да, но по стоп-заявке создается заявка, по заявке происходит сделка, эти сущности связаны через идентификатор между собой. Как все же считается проскальзывание?
Вот пример:
Ecng.Trading.BusinessEntities.Order _merketOrder = new Ecng.Trading.BusinessEntities.Order();

double _marketPrice = (order.Direction == Ecng.Trading.BusinessEntities.OrderDirections.Buy) ? Math.Min(this.Security.MaxPrice, (CurrentPrice + 1000)) : Math.Max(this.Security.MinPrice, CurrentPrice - 1000);

_merketOrder.Price = _marketPrice;

this.RegisterOrder(_merketOrder);

this.SlippageManager.RegisterSlippage(_merketOrder, CurrentPrice);

Почему проскальзывание для стратегии this всегда 0?
*CurrentPrice - текущая цена фьючерса
Thanks:

Mikhail Sukhov

Avatar
Date: 3/1/2011
Reply


merketOrder - это лимитная или стоп заявка?
Thanks:

Артем

Avatar
Date: 3/2/2011
Reply


Это лимитная. Все ее определение в этом кусочке кода...
Thanks:

Mikhail Sukhov

Avatar
Date: 3/2/2011
Reply


Артем Go to
Это лимитная. Все ее определение в этом кусочке кода...


Это стоп заявка, судя по коду... Я не совсем понимаю, как это рассчитать проскальзывание по стопу. Стоп лишь выставляет реальную заявку, которая уже может проскальзить из-за рынка, и которую нужно переставлять чтобы его догнать.

upd: посмотрел не туда. Да, это лимитная заявка... Давайте начнем с основ. Как рассчитывается проскальзывание. Мы выставили лимитник. По нему какой бы ни был рынок проскальзывание будет ноль. Потому что лимитник всегда исполняется не хуже. Но, если вы начинаете свою заявку двигать по стакану, вот тогда уже по ней можно определить проскальзывание.
Thanks:

Артем

Avatar
Date: 3/2/2011
Reply


Да, я согласен... Но моя задача зафиксировать проскальзывание относительно текущей цены, поэтому я попробовал задействовать второй параметр в RegisterSlippage:
this.SlippageManager.RegisterSlippage(_merketOrder, CurrentPrice);

Например, текущая цена 100 р, я выставляю лимитник по 1100 и хочу зафиксировать проскальзывание от 100(текущей цены).
Проскальзывание будет [цена сделки] - [текущая цена(100)]
Thanks:

Mikhail Sukhov

Avatar
Date: 3/2/2011
Reply


Артем Go to
Да, я согласен... Но моя задача зафиксировать проскальзывание относительно текущей цены, поэтому я попробовал задействовать второй параметр в RegisterSlippage:
this.SlippageManager.RegisterSlippage(_merketOrder, CurrentPrice);

Например, текущая цена 100 р, я выставляю лимитник по 1100 и хочу зафиксировать проскальзывание от 100(текущей цены).
Проскальзывание будет [цена сделки] - [текущая цена(100)]


Оно и будет работать так, как вы описали. Но только не для стоп заявки. Потому что по ней сделок не будет... А вообще, ладно, добавлю для стопа чтобы по Order.DeriveOrder вычислялось. Если по ней Order.DeriveOrder == null то будет рассчитываться как ноль.
Thanks:
1 2  >

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

loading
clippy