← 戻る

вопросы

1)Order.Comment присвоенное значение не меняется - в квике комментарий всегда "S#" 2)_trader_PositionsChanged event выдает повторно данные:


используется var position = obj.Last();
17:48:23.663;Position changed GZH1 начальное значение 25 текущее значение -16 blocked 0
17:48:23.663;Position changed RIH1 начальное значение -5 текущее значение 1 blocked 0
17:53:17.516;Position changed GZH1 начальное значение 25 текущее значение -16 blocked 0
17:53:17.516;Position changed RIH1 начальное значение -5 текущее значение 1 blocked 0
17:55:40.378;Position changed GZH1 начальное значение 25 текущее значение -16 blocked 0
17:55:40.378;Position changed RIH1 начальное значение -5 текущее значение 1 blocked 0

естественно никаких изменений небыло

このトピックは参考になりましたか?

トピックを共有

コメント (18)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

skuvv
skuvv 著者

Спасибо за информацию. по п2 - было бы не плохо реализовать на будущее возможность включения/выключения внутри s# проверки на изменение позиции. а так получается квик маржу обновляет и отсылает все по dde...

Mikhail Sukhov
Mikhail Sukhov

skuvv: Спасибо за информацию. по п2 - было бы не плохо реализовать на будущее возможность включения/выключения внутри s# проверки на изменение позиции. а так получается квик маржу обновляет и отсылает все по dde...

Через QuikTrader невозможно понять, изменилось ли хоть что-то в таблице или нет. Поэтому QuikTrader на поступающие из ДДЕ данные.

skuvv
skuvv 著者

сделать проверку типа такой:

          
  public static Dictionary<Security, Position> PositionList = new Dictionary<Security, Position>();
...
  if (obj.Count() > 0)
            {
                if (!PositionList.ContainsKey(obj.Last().Security)) PositionList.Add(obj.Last().Security,obj.Last());
                else if (PositionList[obj.Last().Security]!=obj.Last()) 
                {
                    PositionList[obj.Last().Security] == obj.Last();
                }
            }

skuvv
skuvv 著者

ITrader.ReRegisterOrder не создает TranscationId в новом ордере Как бы это исправить 🤨

Mikhail Sukhov
Mikhail Sukhov

skuvv: ITrader.ReRegisterOrder не создает TranscationId в новом ордере Как бы это исправить 🤨

Версия? Плюс какой именно метод (у ITrader 2 метода с названием ReRegisterOrder)?

skuvv
skuvv 著者

Mikhail Sukhov:

skuvv: ITrader.ReRegisterOrder не создает TranscationId в новом ордере Как бы это исправить 🤨

Версия? Плюс какой именно метод (у ITrader 2 метода с названием ReRegisterOrder)? Версия 2.6 ReRegisterOrder(Order, Double, Int32) После замены ордера не срабатывает NewOrder, хотя возможно это и не принципиально все

Mikhail Sukhov
Mikhail Sukhov

skuvv:

Mikhail Sukhov:

skuvv: ITrader.ReRegisterOrder не создает TranscationId в новом ордере Как бы это исправить 🤨

Версия? Плюс какой именно метод (у ITrader 2 метода с названием ReRegisterOrder)? Версия 2.6 ReRegisterOrder(Order, Double, Int32) После замены ордера не срабатывает NewOrder, хотя возможно это и не принципиально все

Принципиально... А как Вы проверяете что TransactionId не инициализируется? Биржа РТС?

skuvv
skuvv 著者

Осталось пару неясных моментов, значит в Квике в колонке ID транзакции пусто после замены. Но Reregister возвращает order с ID транзакции. Если перезапустить программу то в ивенте "новые ордера" поступают ордера с ID транзакции = 0 Я так понимаю что s# следит за ордерами с заменой и сопоставляет замененные ордера с старыми ID транзакции.

Mikhail Sukhov
Mikhail Sukhov

skuvv: Осталось пару неясных моментов, значит в Квике в колонке ID транзакции пусто после замены. Но Reregister возвращает order с ID транзакции. Если перезапустить программу то в ивенте "новые ордера" поступают ордера с ID транзакции = 0 Я так понимаю что s# следит за ордерами с заменой и сопоставляет замененные ордера с старыми ID транзакции.

Багу подтверждаю с перестановкой заявок. Нашел и вылечил. Доступный фикс в следующем 3.0.2.

skuvv
skuvv 著者

И еще я заметил что классы содержащие в себе Security нельзя использовать для сравнения, например


Dictionary<string,Position>PositionList
.....
foreach (Position pos in obj)
{
if (PositionList[pos.Security.Code] != pos)
{
    PositionList[pos.Security.Code] = pos;
}
}

Всегда срабатывает из-за изменений внутри Security -( Можно ли на будущее внутрь s# добавить явную реализацию операторов ? PS хотя возможно это из за того, что Position обновляется автоматически....

skuvv
skuvv 著者

Заметил один момент - _trader_OrdersChanged срабатывает избыточно, тк его дергает событие из другого потока:


20:00:51.146 Thread: EventDispatcher thread #мои сделки
LKH1 filled 5 avg_price 19288
LKH1 CumFilled 5 lastQty 5 lastPrice 19288 balance25
20:00:52.113 Thread: EventDispatcher thread #заявки
LKH1 filled 5 avg_price 19288
LKH1 CumFilled 10 lastQty 5 lastPrice 19288 balance20

Реальное событие было 1 раз, но оно сработало 2 раза - "мои сделки" не должны активировать событие OrdersChanged, это не правильно. Кому надо, должен отлавливать NewMyTrade... Вариант 2: сделать внутреннюю проверку на реальное изменение ордера и не дергать просто так событие PS что еще хуже эти события не всегда по 2 срабатывают...

Mikhail Sukhov
Mikhail Sukhov

skuvv: Заметил один момент - _trader_OrdersChanged срабатывает избыточно, тк его дергает событие из другого потока:

20:00:51.146 Thread: EventDispatcher thread #мои сделки LKH1 filled 5 avg_price 19288 LKH1 CumFilled 5 lastQty 5 lastPrice 19288 balance25 20:00:52.113 Thread: EventDispatcher thread #заявки LKH1 filled 5 avg_price 19288 LKH1 CumFilled 10 lastQty 5 lastPrice 19288 balance20

> Реальное событие было 1 раз, но оно сработало 2 раза - "мои сделки" не должны активировать событие OrdersChanged,
> это не правильно. Кому надо, должен отлавливать NewMyTrade...
> Вариант 2: сделать внутреннюю проверку  на реальное изменение ордера и не дергать просто так событие
> PS что еще хуже эти события не всегда по 2 срабатывают...

Это другая ситуация - когда сделки пришли раньше заявки. Сделки приостанавливаются и дожидается информация о заявке. Как только придет заявка - сгенерируется событие и о новых сделках.
Lafert
Lafert

Mikhail Sukhov:

skuvv: Заметил один момент - _trader_OrdersChanged срабатывает избыточно, тк его дергает событие из другого потока:

20:00:51.146 Thread: EventDispatcher thread #мои сделки LKH1 filled 5 avg_price 19288 LKH1 CumFilled 5 lastQty 5 lastPrice 19288 balance25 20:00:52.113 Thread: EventDispatcher thread #заявки LKH1 filled 5 avg_price 19288 LKH1 CumFilled 10 lastQty 5 lastPrice 19288 balance20

> > Реальное событие было 1 раз, но оно сработало 2 раза - "мои сделки" не должны активировать событие OrdersChanged,
> > это не правильно. Кому надо, должен отлавливать NewMyTrade...
> > Вариант 2: сделать внутреннюю проверку  на реальное изменение ордера и не дергать просто так событие
> > PS что еще хуже эти события не всегда по 2 срабатывают...
> 
> Это другая ситуация - когда сделки пришли раньше заявки. Сделки приостанавливаются и дожидается информация о заявке. Как только придет заявка - сгенерируется событие и о новых сделках.

А можно с этого места поподробнее: информация о сделке ждет пока не придет информация по заявке? стоит ли терять темп? Может быть лучше сгенерировать событие заявки, но предусмотреть для него особый статус?
Mikhail Sukhov
Mikhail Sukhov

Lafert: А можно с этого места поподробнее: информация о сделке ждет пока не придет информация по заявке? стоит ли терять темп? Может быть лучше сгенерировать событие заявки, но предусмотреть для него особый статус?

Был бы смысл? Темп не теряется, потому что заявка приходит позднее сделки только в случае запуска экспорта.

skuvv
skuvv 著者

Если отослать вручную стоп-заявку в квик, то при выгрузке через дде вылетает эксепшн:

[On ProcessDataError] System.InvalidOperationException: Данные для таблицы 'стоп-заявки' экспортировались в меньшем формате. Не было найдено значение для колонки 'ID транзакции'. Количество колонок равно '34', индекс колонки '34'. И обработь любые данные невозможно.

Mikhail Sukhov
Mikhail Sukhov

Если отослать вручную стоп-заявку в квик, то при выгрузке через дде вылетает эксепшн:

[On ProcessDataError] System.InvalidOperationException: Данные для таблицы 'стоп-заявки' экспортировались в меньшем формате. Не было найдено значение для колонки 'ID транзакции'. Количество колонок равно '34', индекс колонки '34'. И обработь любые данные невозможно.

Таблица оформлена неправильно. Прочитайте документацию. Или используйте wnd файл.

skuvv
skuvv 著者

Если отослать вручную стоп-заявку в квик, то при выгрузке через дде вылетает эксепшн:

[On ProcessDataError] System.InvalidOperationException: Данные для таблицы 'стоп-заявки' экспортировались в меньшем формате. Не было найдено значение для колонки 'ID транзакции'. Количество колонок равно '34', индекс колонки '34'. И обработь любые данные невозможно.

Таблица оформлена неправильно. Прочитайте документацию. Или используйте wnd файл. Да так и было, одного столбцы нехватало...