Есть такой лог:
18:00:01.502 | | IS | Регистрация заявки - цена 142620, направление Sell, объем 6 18:00:01.596 | | QuikTrader | RegisterOrder: TransactionId=39458443, Id=0, Price=142620, Balance=6, Security=RIZ1@RTS, State=None 18:00:03.830 | | IS | Новая Sell сделка 38929366 по цене 144145 на 1 заявки 39458443. 18:00:03.862 | | IS | Прошла сделка по цене 144145, объём 1, направление Sell. <mark>18:00:03.862 | | IS | Заявка исполнена полностью: True, Направление последней заявки Sell.</mark> 18:00:03.862 | | IS | Смена направления на Buy 18:00:03.830 | | QuikTrader | New order: TransactionId=39458443, Id=989376247, Price=142620, Balance=0, Security=RIZ1@RTS, State=Done 18:00:03.877 | | IS | Новая Sell сделка 38929365 по цене 144145 на 1 заявки 39458443. 18:00:03.924 | | IS | Новая Sell сделка 38929367 по цене 144140 на 4 заявки 39458443. 18:00:03.924 | | IS | Прошла сделка по цене 144140, объём 4, направление Sell. 18:00:03.924 | | IS | Заявка исполнена полностью: True, Направление последней заявки Sell. 18:00:03.924 | | IS | Смена направления на Buy 18:00:03.971 | | IS | Прошла сделка по цене 144145, объём 1, направление Sell. 18:00:03.971 | | IS | Заявка исполнена полностью: True, Направление последней заявки Sell. 18:00:03.971 | | IS | Смена направления на Buy
И такой код:
private void OnNewMyTrades(IEnumerable<MyTrade> trades)
{
foreach (var trade in trades)
{
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Прошла сделка по цене {0}, объём {1}, направление {2}.",
trade.Trade.Price, trade.Trade.Volume, trade.Order.Direction));
}
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Заявка исполнена полностью: {0}, Направление последней заявки {1}.",
trades.Last().Order.IsMatched(), trades.Last().Order.Direction));
// смотрим последнюю сделку, следующая должна быть противоположная
if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Buy)
{
CurrentDirection = OrderDirections.Sell;
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Смена направления на {0}", OrderDirections.Sell));
}
else if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Sell)
{
CurrentDirection = OrderDirections.Buy;
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Смена направления на {0}", OrderDirections.Buy));
for (int i = 0; i < base.ChildStrategies.Count; i++)
{
base.ChildStrategies[i].Stop();
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Стратегия - {0} остановлена", i));
}
return;
}
}
Почему после сделки с объемом 1, выставленная заявка на объем 6, считается исполненной?
А в этом логе наоборот, после последней сделки выводит, что заявка не исполнена
15:44:56.893 | | TPS | Регистрация новой заявки на Sell с ценой 145800 и объемом 6. 15:44:56.909 | | QuikTrader | RegisterOrder: TransactionId=39458442, Id=0, Price=145800, Balance=6, Security=RIZ1@RTS, State=None 15:44:56.955 | | TPS | Заявка 39458442 на Sell отправлена с ценой 145800 объемом 6. 15:44:57.330 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:57.612 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:58.065 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:58.205 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:58.424 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:58.862 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:58.862 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:59.080 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:59.190 | Warning | TPS | Заявка 39458442 не имеет состояния. 15:44:59.393 | | QuikTrader | New order: TransactionId=39458442, Id=988400383, Price=145800, Balance=6, Security=RIZ1@RTS, State=Active 15:44:59.877 | | IS | Новая Sell сделка 38842987 по цене 145800 на 3 заявки 39458442. 15:44:59.924 | | IS | Прошла сделка по цене 145800, объём 3, направление Sell. 15:44:59.924 | | IS | Заявка исполнена полностью: False, Направление последней заявки Sell. 15:44:59.924 | | BS | Новая Sell сделка 38842987 по цене 145800 на 3 заявки 39458442. 15:44:59.924 | | BS | Новая Sell сделка 38842987 по цене 145800 на 3 заявки 39458442. 15:44:59.924 | | TPS | Новая Sell сделка 38842987 по цене 145800 на 3 заявки 39458442. 15:45:00.065 | | IS | Новая Sell сделка 38842992 по цене 145800 на 1 заявки 39458442. 15:45:00.065 | | IS | Прошла сделка по цене 145800, объём 1, направление Sell. 15:45:00.065 | | IS | Заявка исполнена полностью: False, Направление последней заявки Sell. 15:45:00.065 | | BS | Новая Sell сделка 38842992 по цене 145800 на 1 заявки 39458442. 15:45:00.065 | | BS | Новая Sell сделка 38842992 по цене 145800 на 1 заявки 39458442. 15:45:00.065 | | TPS | Новая Sell сделка 38842992 по цене 145800 на 1 заявки 39458442. 15:45:00.377 | | TPS | Позиция изменилась на -3. 15:45:00.393 | | TPS | Позиция изменилась на -4. 15:45:00.518 | | IS | Новая Sell сделка 38842995 по цене 145800 на 1 заявки 39458442. 15:45:00.518 | | IS | Прошла сделка по цене 145800, объём 1, направление Sell. 15:45:00.518 | | IS | Заявка исполнена полностью: False, Направление последней заявки Sell. 15:45:00.518 | | BS | Новая Sell сделка 38842995 по цене 145800 на 1 заявки 39458442. 15:45:00.518 | | BS | Новая Sell сделка 38842995 по цене 145800 на 1 заявки 39458442. 15:45:00.518 | | TPS | Новая Sell сделка 38842995 по цене 145800 на 1 заявки 39458442. 15:45:00.549 | | TPS | Позиция изменилась на -5. 15:45:00.721 | | IS | Новая Sell сделка 38843002 по цене 145800 на 1 заявки 39458442. 15:45:00.721 | | IS | Прошла сделка по цене 145800, объём 1, направление Sell. <mark>15:45:00.721 | | IS | Заявка исполнена полностью: False, Направление последней заявки Sell.</mark> 15:45:00.721 | | BS | Новая Sell сделка 38843002 по цене 145800 на 1 заявки 39458442. 15:45:00.721 | | BS | Новая Sell сделка 38843002 по цене 145800 на 1 заявки 39458442. 15:45:00.721 | | TPS | Новая Sell сделка 38843002 по цене 145800 на 1 заявки 39458442. 15:45:00.737 | | TPS | Позиция изменилась на -6. 15:45:00.737 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0. 15:45:00.768 | | BS | Стратегия останавливается. 15:45:00.784 | | BS | Стратегия останавливается. 15:45:00.799 | | TPS | Стратегия останавливается. 15:45:00.799 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0. 15:45:00.830 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0. 15:45:00.955 | | BS | Стратегия остановлена.
Комментарии (6)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Я что-то неправильно делаю?
IsMatched проверяет Order.Balance и Order.State. Если Balance == 0, значит заявка исполнена полностью. То, что заявка обновляется раньше появления сделок - специфика интернет трейдинга (все данные идут в своих потоках и это начинается аж от самой биржи). Если вы хотите проверять исполненность заявки по сделкам, то вам нужен свой IsMatched.
А вот этот код работать будет?
for (int i = 0; i < base.ChildStrategies.Count; i++)
{ base.ChildStrategies.Stop(); AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Стратегия - {0} остановлена", i));
}
Стратегия через Stop не сразу останавливается. Она ждет окончания активных правил. Так что Stop в данном случае - это некий сигнал о том, что начинай останавливаться.
А о каких правилах идет речь? В моем примере дополнительных правил никаких нет. И вот я спрашивал уже, так как все таки узнать - остановилась стратегия или нет?
коллеги, имхо все проще - Александр Муханчиков же сказал, что [] не поддерживается. Значит, сие действо возможно сделать примерно так:
foreach (var _tmp_child_strategy in ChildStrategies) { _strg_list.Add((StopLossStrategy)_tmp_child_strategy); }
все нормально работает.