вопросы
Atom Ответить
03.02.2011


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 Ответов
Mikhail Sukhov

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


Спасибо:

skuvv

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


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

Mikhail Sukhov

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


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


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

skuvv

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


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

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

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


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

Mikhail Sukhov

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


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


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

skuvv

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


Mikhail Sukhov Перейти
skuvv Перейти
ITrader.ReRegisterOrder не создает TranscationId в новом ордере
Как бы это исправить Confused


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

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

Автор топика
Спасибо:

Mikhail Sukhov

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


skuvv Перейти
Mikhail Sukhov Перейти
skuvv Перейти
ITrader.ReRegisterOrder не создает TranscationId в новом ордере
Как бы это исправить Confused


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

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



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

skuvv

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


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

skuvv

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


И еще я заметил что классы содержащие в себе 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

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


Заметил один момент - _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 срабатывают...
Автор топика
Спасибо:

skuvv

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


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

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

И обработь любые данные невозможно.
Автор топика
Спасибо:

Mikhail Sukhov

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


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

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


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

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

И обработь любые данные невозможно.


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

Mikhail Sukhov

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


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


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

skuvv

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


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

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

И обработь любые данные невозможно.


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

Да так и было, одного столбцы нехватало...
Автор топика
Спасибо:

Lafert

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


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

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


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


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


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

loading
clippy