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


Как создать элемент Security с заданными параметрами?
Atom
9/29/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. надеюсь создал тему в нужной ветке ))

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 9/29/2015
Reply


MrLightKing Go to
Добрый день.

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


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

orphan

Avatar
Date: 9/30/2015
Reply


MrLightKing Go to

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


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

MrLightKing

Avatar
Date: 9/30/2015
Reply


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

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

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

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

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

RomSunZ

Avatar
Date: 10/5/2015
Reply


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

MrLightKing

Avatar
Date: 10/6/2015
Reply


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

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,
};

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

RomSunZ

Avatar
Date: 10/7/2015
Reply


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

MrLightKing

Avatar
Date: 10/7/2015
Reply


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

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

Avatar
Date: 10/7/2015
Reply


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

MrLightKing

Avatar
Date: 11/7/2015
Reply


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

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

Шаг 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. только между первым и вторым шагом должно пройти некоторое время, пока инструменты придут в коннектор.
Thanks:

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

Avatar
Date: 11/7/2015
Reply


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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy