← Zurück

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

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

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

        this._trader.RegisterOrder(order);
    }

мне выдает

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (12)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

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 Autor

спасибо)

mr leng
mr leng Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

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

mr leng
mr leng Autor

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

Mikhail Sukhov
Mikhail Sukhov

mr leng: нет)

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

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

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

mr leng
mr leng Autor

))))) 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 Autor

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

Greene-nsk
Greene-nsk

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

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

mr leng
mr leng Autor

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

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

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