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 | Стратегия остановлена.


Теги:


Спасибо:


Евгений

Фотография
Дата: 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.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.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.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.Stop();
            }
        }

все нормально работает.

Спасибо:


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

loading
clippy