← Atrás

Котирование опциона по теоретической цене

Насколько я понимаю, сейчас стратегия TheorPriceQuotingStrategy определяет, нужно ли что-либо делать, по правилу изменения стакана котируемого опциона. Хотелось бы, чтобы было аналогичное правило, но которое срабатывает при изменении стакана базового актива. Это возможно сделать, не имея доступа к TheorPriceQuotingStrategy?

¿Le resultó útil este tema?

Compartir tema

Comentarios (19)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Mikhail Sukhov
Mikhail Sukhov

InsiderHSE: Насколько я понимаю, сейчас стратегия TheorPriceQuotingStrategy определяет, нужно ли что-либо делать, по правилу изменения стакана котируемого опциона. Хотелось бы, чтобы было аналогичное правило, но которое срабатывает при изменении стакана базового актива. Это возможно сделать, не имея доступа к TheorPriceQuotingStrategy?

Может лучше на событие изменения инструмента (опциона)? Если мы котируем не по IV, зачем нам базовый актив? Имеет смысл только в том случае, если мы теор цену сами расчитываем. Вы ее сами расчитываете или берете из терминала?

InsiderHSE
InsiderHSE Autor

Mikhail Sukhov:

InsiderHSE: Насколько я понимаю, сейчас стратегия TheorPriceQuotingStrategy определяет, нужно ли что-либо делать, по правилу изменения стакана котируемого опциона. Хотелось бы, чтобы было аналогичное правило, но которое срабатывает при изменении стакана базового актива. Это возможно сделать, не имея доступа к TheorPriceQuotingStrategy?

Может лучше на событие изменения инструмента (опциона)? Если мы котируем не по IV, зачем нам базовый актив? Имеет смысл только в том случае, если мы теор цену сами расчитываем. Вы ее сами расчитываете или берете из терминала?

Да, я ее сам рассчитываю, так как в терминале она обновляется раз в 30 секунд где-то, а за это время цена базового актива далеко убежать может...

InsiderHSE
InsiderHSE Autor

Михаил, а как организована логика правила на изменение стакана?

пробую что-то типа


if (NeedRegister())
{
	RegisterQuotingOrder(Order);
}
if (NeedReRegister(GetNewPrice(),GetNewVolume()))
{
	ReRegisterOrder(Order,Order.ReRegisterClone(GetNewPrice(), GetNewVolume()));
}

не работает... Я правильно понимаю, что через метод GetNewPrice() определяется цена как теоретическая, сдвинутая на bestPriceOffset. И заявка переставляется, если разница между ценой заявки и GetNewPrice() превысит theorPriceOffset?

Mikhail Sukhov
Mikhail Sukhov

InsiderHSE: Михаил, а как организована логика правила на изменение стакана?

пробую что-то типа

if (NeedRegister()) { RegisterQuotingOrder(Order); } if (NeedReRegister(GetNewPrice(),GetNewVolume())) { ReRegisterOrder(Order,Order.ReRegisterClone(GetNewPrice(), GetNewVolume())); }

> 
> 
> не работает..

А где вы это пишите?
InsiderHSE
InsiderHSE Autor

В переопределенном OnStarting


this
.When(UnderlyingSecurity.MarketDepthChanged()).Do(DoQouting);

Соответственно


private void DoQouting()
{
if (NeedRegister())
{
	RegisterQuotingOrder(Order);
}
if (NeedReRegister(GetNewPrice(),GetNewVolume()))
{
	ReRegisterOrder(Order,Order.ReRegisterClone(GetNewPrice(), GetNewVolume()));
}
}

Этот метод должен быть таким же, как и в правиле на изменение стакана опциона. Однако мне не до конца понятна логика работы котировальщика. В частности, GetNewPrice() должен выдавать цену с учтом оффсета, или оффсет прибавляется при регистрации заявки и т.п.

InsiderHSE
InsiderHSE Autor

Как правильно в версии 4.0.6 запускать котирование при изменении базового актива?

this .When(UnderlyingSecurity.MarketDepthChanged()).Do(ProcessQuoting); ?

нужно ли это правило добавить в коллекцию GetNotificationRules()?

Чтобы котирование не производилось по изменению стакана инструмента, достаточно ли удалить правило из коллекции GetNotificationRules()?

Mikhail Sukhov
Mikhail Sukhov

InsiderHSE: this .When(UnderlyingSecurity.MarketDepthChanged()).Do(ProcessQuoting); ?

нужно ли это правило добавить в коллекцию GetNotificationRules()?

Или напрямую вызываете ProcessQuoting или переопределяете GetNotificationRules

InsiderHSE
InsiderHSE Autor

Делаю так:


base.OnStarting();
this.Rules.RemoveWhere(r => r.Name.Contains("Изменение стакана инструмента") || r.Name.Contains("Изменение инструмента"));
this.When(UnderlyingSecurity.MarketDepthChanged()).Do(ProcessQuoting);

При этом ProcessQuoting вызывается, но котирования не происходит, то есть методы NeedRegister, GetNewPrice и др. не вызываются. Каким образом в версии 4.0.6 можно привязать котирование к изменению стакана базового актива?

Mikhail Sukhov
Mikhail Sukhov

А в лог что-нибудь пишется? Само правило срабатывает?

InsiderHSE
InsiderHSE Autor

Лог следующий:


17:25:03.690 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:25:03.811 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:25:04.048 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:25:04.510 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:25:05.150 |            | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' активировано.
17:25:10.235 |            | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' активировано.
17:25:10.236 |            | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' активировано.
17:25:11.815 |            | SOQS            | Правило 'Изменение стакана инструмента SRZ1@RTS' активировано.

При этом методы NeedRegister, GetNewPrice не вызывались ни разу.

InsiderHSE
InsiderHSE Autor

А если не удалять стандартные правила, и не добавлять свое, то вызывается только NeedFinish, и больше ничего.


17:30:22.587 |            | SOQS            | Стратегия запущена.
17:30:35.976 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:30:51.207 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:30:59.305 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:31:07.742 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:31:47.203 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:31:48.057 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:31:52.438 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:32:08.179 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:32:37.982 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:32:50.916 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:33:06.553 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:33:37.022 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
17:34:06.946 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:34:48.078 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:35:06.444 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:35:36.888 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:36:16.802 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:36:37.422 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:37:06.773 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:37:42.028 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
17:37:49.784 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:37:54.395 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:38:00.753 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
17:38:09.068 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:38:37.093 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:39:10.425 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:39:36.302 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
17:40:07.051 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.

Mikhail Sukhov
Mikhail Sukhov

InsiderHSE: А если не удалять стандартные правила, и не добавлять свое, то вызывается только NeedFinish, и больше ничего.

Методы NeedRegister GetNewVolume в этом случае вызываются?

InsiderHSE
InsiderHSE Autor

Mikhail Sukhov:

InsiderHSE: А если не удалять стандартные правила, и не добавлять свое, то вызывается только NeedFinish, и больше ничего.

Методы NeedRegister GetNewVolume в этом случае вызываются? Нет.

Mikhail Sukhov
Mikhail Sukhov

ITrader.ProcessDataError что нибудь выводит? NeedFinish точно вызывается (+ что возвращает базовая реализация)?

InsiderHSE
InsiderHSE Autor

ITrader.ProcessDataError посмотрю когда откроются торги) NeedFinish вызывается точно и возвращает false. Но когда я вместо 2-х правил добавлял свое, NeedFinish не вызывался (при этом ProcessQuoting вызывался)

InsiderHSE
InsiderHSE Autor

ITrader.ProcessDataError молчит.


Время: 11:44:45.804; Грузитя история! Последняя сделка: 10:20:51.000
Время: 11:44:46.319; Грузитя история! Последняя сделка: 10:21:29.000
Время: 11:44:46.834; Грузитя история! Последняя сделка: 10:22:17.000
Время: 11:44:47.341; Грузитя история! Последняя сделка: 10:25:19.000
Время: 11:44:47.848; Грузитя история! Последняя сделка: 10:27:24.000
Время: 11:44:48.367; Грузитя история! Последняя сделка: 10:28:19.000
Время: 11:44:48.861; Грузитя история! Последняя сделка: 10:30:49.000
Время: 11:44:49.361; Грузитя история! Последняя сделка: 10:34:06.000
Время: 11:44:49.875; Грузитя история! Последняя сделка: 10:34:06.000
Время: 11:44:50.375; Грузитя история! Последняя сделка: 10:36:31.000
Время: 11:44:50.889; Грузитя история! Последняя сделка: 10:38:45.000
Время: 11:44:51.424; Грузитя история! Последняя сделка: 10:38:46.000
Время: 11:44:51.934; Грузитя история! Последняя сделка: 10:40:11.000
Время: 11:44:52.449; Грузитя история! Последняя сделка: 10:42:25.000
Время: 11:44:52.958; Грузитя история! Последняя сделка: 10:43:01.000
Время: 11:44:53.463; Грузитя история! Последняя сделка: 10:44:02.000
Время: 11:44:54.057; Грузитя история! Последняя сделка: 10:46:19.000
Время: 11:44:54.571; Грузитя история! Последняя сделка: 10:47:45.000
Время: 11:44:55.086; Грузитя история! Последняя сделка: 10:49:37.000
Время: 11:44:55.600; Грузитя история! Последняя сделка: 10:52:51.000
Время: 11:44:56.115; Грузитя история! Последняя сделка: 10:54:57.000
Время: 11:44:56.640; Грузитя история! Последняя сделка: 10:56:45.000
Время: 11:44:57.131; Грузитя история! Последняя сделка: 10:58:39.000
Время: 11:44:57.637; Грузитя история! Последняя сделка: 11:00:47.000
Время: 11:44:58.143; Грузитя история! Последняя сделка: 11:00:47.000
Время: 11:44:58.645; Грузитя история! Последняя сделка: 11:02:44.000
Время: 11:44:59.157; Грузитя история! Последняя сделка: 11:05:34.000
Время: 11:44:59.665; Грузитя история! Последняя сделка: 11:05:56.000
Время: 11:45:00.182; Грузитя история! Последняя сделка: 11:08:38.000
Время: 11:45:00.675; Грузитя история! Последняя сделка: 11:11:25.000
Время: 11:45:01.185; Грузитя история! Последняя сделка: 11:12:22.000
Время: 11:45:01.697; Грузитя история! Последняя сделка: 11:14:43.000
Время: 11:45:02.199; Грузитя история! Последняя сделка: 11:17:19.000
Время: 11:45:02.758; Грузитя история! Последняя сделка: 11:19:21.000
Время: 11:45:03.253; Грузитя история! Последняя сделка: 11:20:20.000
Время: 11:45:03.760; Грузитя история! Последняя сделка: 11:23:24.000
Время: 11:45:04.260; Грузитя история! Последняя сделка: 11:24:07.000
Время: 11:45:04.774; Грузитя история! Последняя сделка: 11:25:03.000
Время: 11:45:05.288; Грузитя история! Последняя сделка: 11:27:15.000
Время: 11:45:05.796; Грузитя история! Последняя сделка: 11:29:54.000
Время: 11:45:06.302; Грузитя история! Последняя сделка: 11:30:00.000
Время: 11:45:06.806; Грузитя история! Последняя сделка: 11:32:22.000
Время: 11:45:07.316; Грузитя история! Последняя сделка: 11:36:58.000
Время: 11:45:07.822; Грузитя история! Последняя сделка: 11:36:58.000
Время: 11:45:08.330; Грузитя история! Последняя сделка: 11:40:04.000
Время: 11:45:08.832; Грузитя история! Последняя сделка: 11:42:47.000
Время: 11:45:09.352; Грузитя история! Последняя сделка: 11:45:02.000
Время: 11:45:14.865; Вызван NeedFinish; Цена БА: 8251.0; Результат: False.
The thread '<No Name>' (0x5b0) has exited with code 0 (0x0).
Время: 11:45:18.781; Вызван NeedFinish; Цена БА: 8253.0; Результат: False.
The thread '<No Name>' (0x1c98) has exited with code 0 (0x0).
Время: 11:45:20.897; Вызван NeedFinish; Цена БА: 8254.0; Результат: False.
Время: 11:45:24.090; Вызван NeedFinish; Цена БА: 8255.0; Результат: False.
Время: 11:45:28.908; Вызван NeedFinish; Цена БА: 8255.0; Результат: False.
Время: 11:45:29.016; Вызван NeedFinish; Цена БА: 8255.0; Результат: False.
Время: 11:45:29.318; Вызван NeedFinish; Цена БА: 8257.0; Результат: False.
The thread '<No Name>' (0x1738) has exited with code 0 (0x0).
Время: 11:45:47.824; Вызван NeedFinish; Цена БА: 8261.0; Результат: False.
Время: 11:45:50.782; Вызван NeedFinish; Цена БА: 8262.0; Результат: False.
Время: 11:45:53.917; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:45:54.120; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:54.242; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:54.447; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:54.764; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:45:55.123; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:55.529; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:55.869; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:57.642; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:57.837; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:58.160; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:58.294; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:45:59.168; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:45:59.273; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:45:59.837; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:46:00.160; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:46:00.480; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:46:00.820; Вызван NeedFinish; Цена БА: 8266.0; Результат: False.
Время: 11:46:01.018; Вызван NeedFinish; Цена БА: 8267.0; Результат: False.
Время: 11:46:01.887; Вызван NeedFinish; Цена БА: 8265.0; Результат: False.
Время: 11:46:02.237; Вызван NeedFinish; Цена БА: 8267.0; Результат: False.


11:44:45.260 |            | SOQS            | Стратегия запущена.
11:44:50.972 | Warning    | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:51.522 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:51.921 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:52.133 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:52.947 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:53.083 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:44:53.196 | Warning    | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' не может быть обработано так как приостановлено исполнение правил.
11:45:14.862 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:18.781 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:20.897 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
11:45:24.090 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:28.908 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:29.016 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:29.318 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:47.824 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:50.782 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' активировано.
11:45:53.917 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:54.120 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:54.242 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:54.447 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:54.764 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:55.122 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:55.529 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:55.869 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:57.642 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:57.837 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:58.160 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:58.294 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:59.168 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:59.273 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:45:59.837 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:00.160 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:00.480 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:00.820 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:01.018 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:01.887 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:02.237 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' активировано.
11:46:07.154 |            | SOQS            | Правило 'SOQS - остановка' активировано.
11:46:07.158 |            | SOQS            | Правило 'SOQS - остановка' удалено.
11:46:07.158 |            | SOQS            | Стратегия останавливается.
11:46:07.160 |            | SOQS            | Заканчиваем котирование с неисполненным объемом равный 1.
11:46:07.160 |            | SOQS            | Правило 'Изменение стакана инструмента SR8250BL1@RTS' удалено.
11:46:07.161 |            | SOQS            | Заканчиваем котирование с неисполненным объемом равный 1.
11:46:07.161 |            | SOQS            | Правило 'Изменение инструмента SR8250BL1@RTS' удалено.
11:46:07.161 |            | SOQS            | Заканчиваем котирование с неисполненным объемом равный 1.
11:46:07.162 |            | SOQS            | Правило 'Изменение позиции стратегии SOQS' удалено.
11:46:07.162 |            | SOQS            | Стратегия остановлена.

Mikhail Sukhov
Mikhail Sukhov

Какая-то фантастика. Если NeedFinish возвращает false, то следуюим вызывается GetNewPrice. Вы сейчас логи прикладываете стратегии без ваших модификаций?

InsiderHSE
InsiderHSE Autor

Да... Сам метод GetNewPrice переопределен, но это не должно мешать, т.к он не вызывается даже.


public class SingleOptionQuotingStrategy :BestByPriceQuotingStrategy
	{
		public SingleOptionQuotingStrategy(Order order, Unit betsPriceOffset, Unit theorpriceOffset)
			: base(order, betsPriceOffset)
		{
			TheorPriceOffset = theorpriceOffset;
		}
		public SingleOptionQuotingStrategy(OrderDirections dir, decimal vol, Unit theorpriceOffset)
			: base(dir, vol) { TheorPriceOffset = theorpriceOffset; }

		private System.Timers.Timer _timer;
		public Security UnderlyingSecurity { get; private set; }
		public Unit TheorPriceOffset { get; private set; }
		protected override decimal GetNewPrice()
		{
			var r = base.GetNewPrice();
			Debug.WriteLine("Время: {0}; Вызван GetNewPrice; Цена БА: {1}; Теор цена из таб: {3}; Результат: {2}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
				UnderlyingSecurity.LastTrade.Price.ToString("0.0"), r.ToString("0.0"), Security.TheorPrice.ToString("0.0")));
			r = Security.TheorPrice;
			r = this.QuotingDirection == OrderDirections.Buy ? (decimal)(r - TheorPriceOffset) : (decimal)(r + TheorPriceOffset);
			r = Security.ShrinkPrice(r);
			return r;
		}
		protected override decimal GetNewVolume()
		{
			var r = base.GetNewVolume();
			Debug.WriteLine("Время: {0}; Вызван GetNewVolume; Цена БА: {1}; Результат: {2}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
				UnderlyingSecurity.LastTrade.Price.ToString("0.0"), r.ToString("0.0")));
			return r;
		}

		protected override bool NeedFinish()
		{
			var r = base.NeedFinish();
			Debug.WriteLine("Время: {0}; Вызван NeedFinish; Цена БА: {1}; Результат: {2}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
				UnderlyingSecurity.LastTrade.Price.ToString("0.0"), r.ToString()));
			return r;
		}
		protected override bool NeedRegister()
		{
			var r = base.NeedRegister();
			Debug.WriteLine("Время: {0}; Вызван NeedRegister; Цена БА: {1}; Результат: {2}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
				UnderlyingSecurity.LastTrade.Price.ToString("0.0"), r.ToString()));
			return r;
		}
		protected override bool NeedReRegister(decimal newBestPrice, decimal newVolume)
		{
			var r = base.NeedReRegister(newBestPrice, newVolume);
			Debug.WriteLine("Время: {0}; Вызван NeedReRegister с параметрами newBestPrice={3} и newVolume={4}; Цена БА: {1}; Результат: {2}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
				UnderlyingSecurity.LastTrade.Price.ToString("0.0"), r.ToString(), newBestPrice.ToString("0.0"), newVolume.ToString("0.0")));
			return r;
		}

		protected override void RegisterOrder(Order order)
		{
			Debug.WriteLine("Время: {0}; Вызван RegisterOrder.".Put(DateTime.Now.ToString("HH:mm:ss.fff")));
			base.RegisterOrder(order);
		}

		protected override void RegisterQuotingOrder(Order order)
		{
			Debug.WriteLine("Время: {0}; Вызван RegisterQuotingOrder.".Put(DateTime.Now.ToString("HH:mm:ss.fff")));
			base.RegisterQuotingOrder(order);
		}

		protected override void ReRegisterOrder(Order oldOrder, Order newOrder)
		{
			Debug.WriteLine("Время: {0}; Вызван ReRegisterOrder.".Put(DateTime.Now.ToString("HH:mm:ss.fff")));
			base.ReRegisterOrder(oldOrder, newOrder);
		}

		protected override IEnumerable<StrategyRule> GetNotificationRules()
		{
			return base.GetNotificationRules();
			//return new List<StrategyRule>
			//{
			//    this.When(UnderlyingSecurity.MarketDepthChanged()).Do(ProcessQuoting)
			//};
		}

		

		

		protected override void OnStarting()
		{

			this.NewOrder += o => Debug.WriteLine("Время: {0}; Событие NewOrder; Цена БА: {1}; Цена заявки: {2}; Объем заявки: {3}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
			                        this.UnderlyingSecurity.LastTrade.Price.ToString("0.0"), o.Price.ToString("0.0"), o.Volume.ToString("0.0")));
			this.NewMyTrades += t => Debug.WriteLine("Новая сделка"); //Debug.WriteLine("Время: {0}; Событие NewMyTrades; Цена БА: {1}; Цена сделки: {2}; Объем сделки: {3}.".Put(DateTime.Now.ToString("HH:mm:ss.fff"),
									//this.UnderlyingSecurity.LastTrade.Price.ToString("0.0"), t.FirstOrDefault().Trade.Price.ToString("0.0")), t.FirstOrDefault().Trade.Volume.ToString("0.0"));

			this.SuspendRules();
			
			this.UnderlyingSecurity = this.Security.GetUnderlyingAsset();


			base.OnStarting();
			
			this.SuspendRules();

			//this.Rules.RemoveWhere(r => r.Name.Contains("Изменение стакана инструмента") || r.Name.Contains("Изменение инструмента"));

			//var qRule = this.When(UnderlyingSecurity.MarketDepthChanged()).Do(DoQouting);
			//qRule.EnableLog(true);
			
			this.Rules.ForEach(r => r.EnableLog(true));
			//this.Rules.RemoveWhere(r => r.Name.Contains("Изменение стакана инструмента"));


			_timer = new System.Timers.Timer(500);
			_timer.Elapsed += (s, a) =>
			{
				if (DateTime.Now - UnderlyingSecurity.LastTrade.Time < TimeSpan.FromSeconds(3))
				{
					_timer.Stop();
					this.ResumeRules();
				}
				else
				{
					Debug.WriteLine("Время: {0}; Грузитя история! Последняя сделка: {1}".Put(DateTime.Now.ToString("HH:mm:ss.fff"), UnderlyingSecurity.LastTrade.Time.ToString("HH:mm:ss.fff")));
				}
			};
			_timer.Start();


		}
		protected override void OnStopping()
		{
			base.OnStopping();
			if(_timer != null) _timer.Stop();
		}

	}

Mikhail Sukhov
Mikhail Sukhov

Нашли. Сегодня вечером на КП.