Событие NewPositions приходит очень долго - от 5 сек до минуты. Текст
такой:
trader.NewPositions+=positions=>{Positions.AddRange(positions)};
Positions - ObservableCollection.
В сампле кстати позиции приходят сразу.
В каком смысле все сделки ? Экспорт стартуется не по всем таблицам
методом trader.StartDde, а только по нужным методом
trader.StartDde(string caption).
Насчет позиций - когда позиция меняется сначала приходит
PositionsChanged, а потом NewPositions ?
Поза экспортируется по ДДЕ. Самая тяжелая часть экспорта - все сделки.
Если у Вас эта таблица не экспортируется, то проблема в чем то другом.
Расскажите по подробнее, в чем заключается медленность? Лучше в
числах. Скажем, Вы запустили экспорт по деривативам (кстати, прокажите
код, как Вы экспорт запускаете). Далее, как замеряете, когда пришли
данные? Эти данные уже были ранее добавлены (тоесть, уже поза была
ранее отображена в таблице квике) или нет?
this.Trader.NewPositions+=positions=>{Positions.AddRange(positions) };
При запуске программы стартуется экспорт по таблицам Инструменты
Позиции по деривативам и нескольким стаканам.
Приходят позиции всё время по-разному - иногда сразу, иногда через
минуту-две...
Это может быть связано с тем что перед этим запускается экспорт 2-3
стаканов ?
Может быть от всего что угодно. Но обычно на среднем компьютере все
таблицы (включая тики) стартуют примерно за минуту. Почему у Вас такие
задержки - не могу сказать.
Прошу прощения, еще есть такой код:
trader.StartDde(Инструменты);
trader.NewSecurities+=securities=>{
foreach(Security sec in securities){
trader.RegisterQuotes(sec);
}
И так и так - позиции приходят иногда по одному инструменту сразу, а
по другому - через полминуты.
При перезапуске по-разному всегда приходят.
И еще, я так до конца и не понял, NewPositions приходит при любых
изменениях позиций или только при появлении новых ? при изменении уже
существующих позиций он будет приходить ?
На изменение позы необходимо мониторить два события - NewPositions и
PositionsChanged. Это связанно с тем, что первоначально до торговли
позы по инструменту не существует. Само по себе событие NewPositions
как написано в документации сигнализирует о "Событие появления новых
позиций. "
Такой еще вопрос:
Если текущая чистая позиция по и инструменту на момент запуска равна 0, то он никогда не придет по событию NewPosition? Инструмент есть в таблице позиции по деривативам.
MCTuTeJ|19951995:
Такой еще вопрос:
Если текущая чистая позиция по и инструменту на момент запуска равна 0, то он никогда не придет по событию NewPosition? Инструмент есть в таблице позиции по деривативам.
Смотрите, все просто. Если позиция по инструменту есть в таблице Квика - то событие приходит. Если позиции по инструменту нет в таблице - то оно не приходит. Тоесть тут надо обрабатывать двойную ситуацию, 1 - когда позиция реально равна нулю по таблице Квика, 2 - когда по инструменту вообще не было торгов ранее (и в Квике в таблице позиции она отсутствует).
Ваши вопросы меня сподвигли на следующее - надо посылать принудительно позиции по инструментам, по которым не было сделок. Посмотрю, возможно ли.
Я тоже так думал, но опыт показал что если позиция есть в квике, но она равна 0, то она не приходит. Чтобы приходила приходится всё время делать одну сделку перед запуском программы.
MCTuTeJ|19951995:
Я тоже так думал, но опыт показал что если позиция есть в квике, но она равна 0, то она не приходит. Чтобы приходила приходится всё время делать одну сделку перед запуском программы.
Точно не так. Потому что экспорт ДДЕ работает по принципу что видно в таблице, то и выводим. В нем нет торговой логики.
Мы используем куки для обеспечения лучшего опыта на нашем сайте. Продолжая использовать наш сайт, вы соглашаетесь на использование куки.
Комментарии (26)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
В процессе работы или в момент запуска робота?
Событие NewPositions приходит очень долго - от 5 сек до минуты. Текст такой: trader.NewPositions+=positions=>{Positions.AddRange(positions)}; Positions - ObservableCollection. В сампле кстати позиции приходят сразу.
В процессе работы робота (робот уже запущен примерно с час) или в момент запуска робота (робот только запускается)?
В момент запуска
Еще такой вопрос: когда позиция по какому-нибудь инструменту меняется, новая позиция приходит в событии PositionsChanged или NewPositions ?
В момент старта грузятся все сделки. Не запускайте их, и получение позы будет быстрее.
Нужно смотреть и NewPositions и PositionsChanged. Потому что поза в начале "не существует", и "появляется" только при ее изменении.
В каком смысле все сделки ? Экспорт стартуется не по всем таблицам методом trader.StartDde, а только по нужным методом trader.StartDde(string caption). Насчет позиций - когда позиция меняется сначала приходит PositionsChanged, а потом NewPositions ?
Сначала NewPositions затем PositionsChanged
Не могли бы Вы по подробнее объяснить что Вы имели ввиду под "В момент старта грузятся все сделки. Не запускайте их, и получение позы будет быстрее. "
Поза экспортируется по ДДЕ. Самая тяжелая часть экспорта - все сделки. Если у Вас эта таблица не экспортируется, то проблема в чем то другом. Расскажите по подробнее, в чем заключается медленность? Лучше в числах. Скажем, Вы запустили экспорт по деривативам (кстати, прокажите код, как Вы экспорт запускаете). Далее, как замеряете, когда пришли данные? Эти данные уже были ранее добавлены (тоесть, уже поза была ранее отображена в таблице квике) или нет?
this.Trader.NewPositions+=positions=>{Positions.AddRange(positions) }; При запуске программы стартуется экспорт по таблицам Инструменты Позиции по деривативам и нескольким стаканам.
Экспорт запускается так: Trader.StartDde("позиции по деривативам");
Приходят позиции всё время по-разному - иногда сразу, иногда через минуту-две... Это может быть связано с тем что перед этим запускается экспорт 2-3 стаканов ?
Может быть от всего что угодно. Но обычно на среднем компьютере все таблицы (включая тики) стартуют примерно за минуту. Почему у Вас такие задержки - не могу сказать.
Только что пробовал просто такой код:
trader.Connect(); trader.Connected+=()=>{ trader.StartDde("позиции по деривативам");
trader.newPositions+=positions=>{ MessageBox.Show("позиции пришли !");
Приходят они в среднем через минуту
Прошу прощения, еще есть такой код: trader.StartDde(Инструменты); trader.NewSecurities+=securities=>{ foreach(Security sec in securities){ trader.RegisterQuotes(sec); }
И так и так - позиции приходят иногда по одному инструменту сразу, а по другому - через полминуты. При перезапуске по-разному всегда приходят.
Михаил, а правда что для того чтобы МоиСделки приходили нужно еще по Заявкам экспорт начать ?
И еще, я так до конца и не понял, NewPositions приходит при любых изменениях позиций или только при появлении новых ? при изменении уже существующих позиций он будет приходить ?
Ну вот и расгадка. Вы же еще и экспорт стаканов запускаете.
А что у Вас за робот, что ему так критично время запуска (минута или 2 минуты)? Обычно в начале сессии запускают, и выключают уже вечером.
Да.
На изменение позы необходимо мониторить два события - NewPositions и PositionsChanged. Это связанно с тем, что первоначально до торговли позы по инструменту не существует. Само по себе событие NewPositions как написано в документации сигнализирует о "Событие появления новых позиций. "
Такой еще вопрос: Если текущая чистая позиция по и инструменту на момент запуска равна 0, то он никогда не придет по событию NewPosition? Инструмент есть в таблице позиции по деривативам.
Смотрите, все просто. Если позиция по инструменту есть в таблице Квика - то событие приходит. Если позиции по инструменту нет в таблице - то оно не приходит. Тоесть тут надо обрабатывать двойную ситуацию, 1 - когда позиция реально равна нулю по таблице Квика, 2 - когда по инструменту вообще не было торгов ранее (и в Квике в таблице позиции она отсутствует).
Ваши вопросы меня сподвигли на следующее - надо посылать принудительно позиции по инструментам, по которым не было сделок. Посмотрю, возможно ли.
Я тоже так думал, но опыт показал что если позиция есть в квике, но она равна 0, то она не приходит. Чтобы приходила приходится всё время делать одну сделку перед запуском программы.
Точно не так. Потому что экспорт ДДЕ работает по принципу что видно в таблице, то и выводим. В нем нет торговой логики.