Как создать элемент Security с заданными параметрами?


Как создать элемент Security с заданными параметрами?
Atom
29.09.2015


Добрый день.

Я тут новенький, камнями не забивайте )) со StockSharp недавно начал знакомство. Опыт работы в C# приличный.

Вопрос вот в чем. Как сразу создать элемент Security для выбранной акции (например для SPY для площадок ALL), чтобы не пользоваться SecurityPicker'ом, не добавлять туда инструмент, а потом извлекать при помощи SelectedSecurity.

Я пробовал разное:
Security SPY = new Security
{
Code = "SPY",
Type = SecurityTypes.Stock,
Board = ExchangeBoard.Nyse (или Associated еще на разобрался)
};
MessageBox.Show(Convert.ToString(SPY));

Security SPY2 = new Security();
SPY2.Code = "SPY";
SPY2.Type = SecurityTypes.Stock;
SPY2.Board = ExchangeBoard.Nyse;
MessageBox.Show(Convert.ToString(SPY2));

Ничего не выдает.


Если я в примере создаю такой блок, который потом посылается в SecurityPicker
Trader.SendOutMessage(new SecurityMessage
{
SecurityId = new SecurityId
{
SecurityCode = "SPY",
BoardCode = "All",
},
Name = "SPY",
SecurityType = SecurityTypes.Stock,
});

То потом при выборе этого инструмента, вывод Convert.ToString(SecurityPicker.SelectedSecurity) выдает то что надо: "SPY@ALL"

P.S. надеюсь создал тему в нужной ветке ))

Теги:


Спасибо:


Mikhail Sukhov

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


MrLightKing Перейти
Добрый день.

Я тут новенький, камнями не забивайте )) со StockSharp недавно начал знакомство. Опыт работы в C# приличный.


Тогда вам проще будет это использовать https://github.com/StockSharp/StockSharp
Спасибо:

orphan

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


MrLightKing Перейти

Как сразу создать элемент Security для выбранной акции


А зачем?
Все объекты Security для выбранных в терминале инструментов и так создаются в коннекторе и помещаются в коллекцию Trader.Securities.
Остается достать нужный и пользоваться.
Спасибо:

MrLightKing

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


Спасибо за ответы.

Дело в том, что я пользуюсь Sterling, а там так не передается.

Это из документации: "Некоторые коннекторы (например, OpenECry, Interactive Brokers или Sterling) не поддерживают после вызова соединения (IConnector.Connect()) передачу всех имеющихся на сервере инструментов на клиент (как правило, это сделано для уменьшения нагрузки на сервер брокера)."

И в примере по Sterling там SecurityPicker заполняется не c сервера, а вручную написанными в коде акциями.

Пока у себя в коде так и делаю, и выбираю необходимые акции для работы. Просто думал, что оптимизировать этот момент ))
Спасибо:

RomSunZ

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


Посмотрите примеры, например samplehistorytesting.
Спасибо: MrLightKing

MrLightKing

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


Спасибо, шаг вперед сделал, взял из примера блок кода:

var secIdParts = SecId.Text.Split('@'); //SecId.Text = "SPY@ALL"
var secCode = secIdParts[0];
var board = ExchangeBoard.GetOrCreateBoard(secIdParts[1]);

var SPY= new Security
{
Id = SecId.Text,
Code = secCode,
Board = board,
};

Но потом для этой акции не выдает никаких данных при вызове, например, последней цены. Я тут думаю, может дело в американском рынке.
Спасибо:

RomSunZ

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


Ну и посмотрите дальше в том же примере как с этим инструментом работать. Думаю суть будет та же, что и в обычном коннекторе...
Спасибо:

MrLightKing

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


Буду разбираться, как найду решение - опубликую, может еще кому-то поможет в дальнейшем.
Просто чем дальше читаю форум и работы людей, тем больше понимаю, что у американского рынка есть отличия от российского, вот теперь надо понять принципиальные.
Спасибо:

Валентин Лебедев

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


Уже сталкивался с этим, победить не смог, что только ни делал, даже разработчиков просил добавить такую функцию - https://github.com/Stock...p/StockSharp/issues/18.
Если найдете решение, буду благодарен.
Спасибо:

MrLightKing

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


Есть решение вопроса. Кстати, помог вебинар от Финам, который ведет Самунджян Артём.

У меня коннектор американский, но думаю принцип везде один и тот же.

Шаг 1 - запросить инструменты в коннекторе:
var criteria1 = new Security
{
Code = "BAC",
};
var criteria2 = new Security
{
Code = "FB",
};
Trader.LookupSecurities(criteria1);
Trader.LookupSecurities(criteria2);

Они туда приходят, потом шаг 2 - взять инструмент из коннектора и присвоить переменной:
Stock1 = Trader.Securities.First(security => security.Code == "BAC" && security.Board == ExchangeBoard.GetOrCreateBoard("EDGX"));
Stock2 = Trader.Securities.First(security => security.Code == "FB" && security.Board == ExchangeBoard.GetOrCreateBoard("ALL"));

И все работает ))

P.S. только между первым и вторым шагом должно пройти некоторое время, пока инструменты придут в коннектор.
Спасибо:

Валентин Лебедев

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


Другой вариант - отправить на этот инструмент лимитный ордер с ценой допустим 0.01 и тут же его отменить. Инструмент сразу приходит в Trader.Securities и его уже можно оттуда брать и использовать по нормальному. Делал так на Fusion. С LookupSecurities тоже вариант, но подольше.
Спасибо:


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

loading
clippy