Trades.Last().Order.IsMatched()
Atom Ответить
17.10.2011


Есть такой лог:

Цитата:
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.
18:00:03.862 | | IS | Заявка исполнена полностью: True, Направление последней заявки Sell.
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.
15:45:00.721 | | IS | Заявка исполнена полностью: False, Направление последней заявки Sell.
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 Ответов
Евгений

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


Я что-то неправильно делаю?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.10.2011
Ответить


IsMatched проверяет Order.Balance и Order.State. Если Balance == 0, значит заявка исполнена полностью. То, что заявка обновляется раньше появления сделок - специфика интернет трейдинга (все данные идут в своих потоках и это начинается аж от самой биржи). Если вы хотите проверять исполненность заявки по сделкам, то вам нужен свой IsMatched.
Спасибо:

andy_baka_

Фотография
Курсы
Дата: 25.10.2011
Ответить


А вот этот код работать будет?

for (int i = 0; i < base.ChildStrategies.Count; i++)
{
base.ChildStrategies[i].Stop();
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Стратегия - {0} остановлена", i));
}
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.10.2011
Ответить


andy_baka_ Перейти
А вот этот код работать будет?

for (int i = 0; i < base.ChildStrategies.Count; i++)
{
base.ChildStrategies[i].Stop();
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Стратегия - {0} остановлена", i));
}


Стратегия через Stop не сразу останавливается. Она ждет окончания активных правил. Так что Stop в данном случае - это некий сигнал о том, что начинай останавливаться.
Спасибо:

Евгений

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


Mikhail Sukhov Перейти
andy_baka_ Перейти
А вот этот код работать будет?

for (int i = 0; i < base.ChildStrategies.Count; i++)
{
base.ChildStrategies[i].Stop();
AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Стратегия - {0} остановлена", i));
}


Стратегия через Stop не сразу останавливается. Она ждет окончания активных правил. Так что Stop в данном случае - это некий сигнал о том, что начинай останавливаться.


А о каких правилах идет речь? В моем примере дополнительных правил никаких нет. И вот я спрашивал уже, так как все таки узнать - остановилась стратегия или нет?
Автор топика
Спасибо:

andy_baka_

Фотография
Курсы
Дата: 28.10.2011
Ответить


коллеги, имхо все проще - Александр Муханчиков же сказал, что [] не поддерживается. Значит, сие действо возможно сделать примерно так:

foreach (var _tmp_child_strategy in ChildStrategies)
{
_strg_list.Add((StopLossStrategy)_tmp_child_strategy);
}


if (_strg_list.Count > 0)
{
for (int i = 0; i < _strg_list.Count; i++)
{
_strg_list[i].Stop();
}
}

все нормально работает.
Спасибо:


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

loading
clippy