← Назад

выставление стоп заявок

Пытаюсь зарегистрировать стоп заявку

public void NewOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); order.Portfolio = (Portfolio)this.Portfolios.SelectedValue;

        this._trader.RegisterOrder(order);
    }

мне выдает

Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.

Комментарии (12)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Alexander
Alexander

mr leng: Пытаюсь зарегистрировать стоп заявку

public void NewOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); order.Portfolio = (Portfolio)this.Portfolios.SelectedValue;

        this._trader.RegisterOrder(order);
    }

мне выдает

Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.

Всё правильно пишет. Значит NewOrder работает в другом потоке чем был создан this.Portfolios. Поэтому доступ к объекту this.Portfolios.SelectedValue невозможен

Greene-nsk
Greene-nsk

mr leng: Пытаюсь зарегистрировать стоп заявку

public void NewOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); order.Portfolio = (Portfolio)this.Portfolios.SelectedValue;

        this._trader.RegisterOrder(order);
    }

мне выдает

Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.

Используйте Dispatcher и Invoke, или this.GuiAsync(Action), которую Михаил написал - можно в примерах посмотреть.

mr leng
mr leng
mr leng Автор

спасибо)

mr leng
mr leng Автор

еще такой вопросик возник))) насколько я понял id в стоп-заявке не возвращается, но есть TransactionId, но по TransactionId не получается отменить стоп-заявку( как можно отменить конкретную стоп-заявку или узнать что именно она исполнилась?

Mikhail Sukhov
Mikhail Sukhov

mr leng: еще такой вопросик возник))) насколько я понял id в стоп-заявке не возвращается, но есть TransactionId, но по TransactionId не получается отменить стоп-заявку( как можно отменить конкретную стоп-заявку или узнать что именно она исполнилась?

В примере Sample для стоп заявок ID появляется?

mr leng
mr leng Автор

нет) но там же мы сами ручками выбираем ордер который снимем

Mikhail Sukhov
Mikhail Sukhov

mr leng: нет)

Таблица стоп заявок довольно сложная. Думаю колонку какую забыли добавить.

mr leng: но там же мы сами ручками выбираем ордер который снимем

А дальше пример как Квику говорит что снять? Вот ту, третьей с верху?

mr leng
mr leng Автор

))))) var order = this.SelectedOrder; this.CancelOrder.IsEnabled = order != null && order.State == OrderStates.Active;

я пробую снять заявку таким образом var or = base.Trader.Orders.First(o => o.Id == _id); base.Trader.CancelOrder(or);

на что получаю ответ что последовательность не содержит соответствующий элемент хотя заявка уже зарегистрированна

Mikhail Sukhov
Mikhail Sukhov

mr leng: ))))) var order = this.SelectedOrder; this.CancelOrder.IsEnabled = order != null && order.State == OrderStates.Active;

я пробую снять заявку таким образом var or = base.Trader.Orders.First(o => o.Id == _id); base.Trader.CancelOrder(or);

на что получаю ответ что последовательность не содержит соответствующий элемент хотя заявка уже зарегистрированна

Дык, это значит, что по _id нет такой заявки. Может она еще не пришла, может сам _id неправильный. Запустите отладчик и посмотрите, что за значение и какие есть заявки?

mr leng
mr leng Автор

на обычные ордера id получается сразу а на стоп-ордера null насколько понимаю надо через StopOrdersFailed проверять регистрацию заявки и оттуда брать id??

Greene-nsk
Greene-nsk

mr leng: на обычные ордера id получается сразу а на стоп-ордера null насколько понимаю надо через StopOrdersFailed проверять регистрацию заявки и оттуда брать id??

StopOrdersFailed возникает , когда заявка не может быть выставлена, например. Тогда ее и не будет в ITrader.Orders. А для обычных заявок Вы где _id берете? Там же и для стоп ордеров берите.

mr leng
mr leng Автор

Для обычных заявок сразу после регистрации заявки получаю id но почему-то с стоп-заявкой так не проходит

                            MainWindow.Instance.NewOrder(stopOrder);
                            _id = stopOrder.Id;
                            _ids = stopOrder.TransactionId;

получаю таким образом, но id всегда пустой а ids через раз(