← Voltar

Ошибка при регистрации заявок в 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 всё отлично работало

Este tópico foi útil?

Compartilhar tópico

Comentários (7)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Mikhail Sukhov
Mikhail Sukhov

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

Mikhail Sukhov
Mikhail Sukhov

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

Alexander
Alexander Autor

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

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

Alexander
Alexander Autor

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 Autor

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

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

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

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