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


Использую 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

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


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

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


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

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

Автор топика
Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


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

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


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

Спасибо:

Alexander

Фотография
Дата: 16.08.2010
Ответить


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2010
Ответить


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

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy