← Назад

Ошибка при регистрации заявок в Stock# 2.2

Использую MultiTrader; при добавлении стратегии смотрю - если Portfolio уже присутствует в списке добавленных через событие NewPortfolios, то использую его (определяю по Name - должно совпадать с именем счёта), если нет - создаю через var result = GetPortfolio(name); //base.RegisterPortfolio(result); return result; (у меня свой OwnQuikTrader, наследованный от QuikTrader).

При попытке зарегистрировать самую обычную заявку: var newTestOrder = CreateOrder(OrderDirections.Buy, Security.MaxPrice, 1); RegisterOrder(newTestOrder); возникает исключение System.ArgumentException was unhandled by user code Message=Не найден шлюз для заявки 0. Parameter name: order InnerException:

С чем может быть связано? В версии 2.1 всё отлично работало

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

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

Mikhail Sukhov
Mikhail Sukhov

Когда создаете портфель, присвойте Trader нужный шлюз. MultiTrader по нему переадресовывает заявку нужному шлюзу.

Mikhail Sukhov
Mikhail Sukhov

Да, я уже в 2.3 сделал так, чтобы портфели брались из Торговля -> Управление счетами. А то как то не очень хорошо создавать портфель ручками.

Alexander
Alexander Автор

Не помогло. Более того - после вызова var result = GetPortfolio(account.Account); (account.Account - имя счёта) у result Trader проставлен уже.

Кстати, попутно вопрос - надо ли вызывать base.RegisterPortfolio(result); или это делается автоматически при создании портфеля?

Alexander
Alexander Автор

Trader ÐÒÏÓÔÁ×ÌÅÎ × ÍÏÊ ËÌÁÓÓ OwnQuikTrader:

public class OwnQuikTrader : QuikTrader { public OwnQuikTrader(string path, string ddeServer, string dllName) : base(path, ddeServer, dllName)

   public override void ReStartExport()
    {
        if (!IsConnected)
            base.ReStartExport();
    }

   public Portfolio GetNewPortfolio(Accounts account)
    {
        var result = GetPortfolio(account.Account);
        result.Trader = account.Trader;
        base.RegisterPortfolio(result);
        return result;
    }
}
Mikhail Sukhov
Mikhail Sukhov

Так понятно. Бага. Выставите Order.Trader.

Alexander
Alexander Автор

Всё заработало, спасибо.

Чтобы по теме не осталось вопросов - надо ли регистрировать через метод RegisterPortfolio новые портфели (как те, которые приходят в событие NewPortfolios так и те, которые создаются через GetPortfolio)? Через метод GetPortfolio могут быть возвращены уже созданные портфели

  • надо ли регистрировать их, или встраивать проверку, что портфеля не было в Trader.Portfolios до регистрации?
Mikhail Sukhov
Mikhail Sukhov

Для QuikTrader RegisterPortfolio ничего не делает. Я его сделал для аналогии с SmartCOM, но и там от него можно отказаться. Надо посмотреть на другие системы. Возможно его вообще стоит выкинуть.