SlippageManager
Atom
28.02.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 для базовой стратегии без котирования, все равно проскальзывание не считается. Непонятно как для фьючерсов раработает механизм

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


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

Артем

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


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

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


Спасибо:

Артем

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


Попробовал создавать лимитированную стоп-заявку, но все равно проскальзывание 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);
Спасибо:

Mikhail Sukhov

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


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


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

Артем

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


Да, но по стоп-заявке создается заявка, по заявке происходит сделка, эти сущности связаны через идентификатор между собой. Как все же считается проскальзывание?
Вот пример:
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 - текущая цена фьючерса
Спасибо:

Mikhail Sukhov

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


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

Артем

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


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

Mikhail Sukhov

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


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


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

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

Артем

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


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

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

Mikhail Sukhov

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


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

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


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

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

loading
clippy