← Zurück

РТС Стандарт

Михаил возникла вот такая проблема.

у меня код клиента, кторый я забиваю во время создания шлюза, отличатеся от того кода клиента ,кторый необходимо выставить при создании сделки на РТС Стандарт. что делать? мне надо в рамках одного ITrader совершать сделки и на мамбе и на фортсе и на ртс стандарт

War dieses Thema hilfreich?

Thema teilen

Kommentare (52)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Меняйте транзакции строку на лету как здесь

http://stocksharp.com/doc/help/html/0b0bd6e0-7ddf-407d-9e03-a218796163af.htm

Беритеhttp://stocksharp.com/doc/help/html/P_Ecng_Trading_Quik_TransactionBuilder_Orders.htm

и смотрите своб заявку. В зависимости от этого меняйте код клиента.

Tauler
Tauler Autor

cсвоб заявку? своп или стоп? :) не очень понял, что менять в ордере. можно оподробнее плиз?

Tauler
Tauler Autor

Может зря вы код клиента из заявки удалили?

Mikhail Sukhov
Mikhail Sukhov

Он там никогда не был.... Менять саму строку транзакции. Через TransactionBuilder. В качестве примера можно взять код из доки. Там меняется другая инструкция, но просто замените ее на

http://stocksharp.com/doc/help/html/M_Ecng_Trading_Quik_TransactionBuilder_SetClientCode_1_bb3a7a4f.htm

Tauler
Tauler Autor

Интерсное кино :) я добавил в Инструменты газвпрои из РТС Стандарт, и когда выставляю ордер , в Order.Security.Class стоит RTSST (что есть правда), а в Exchage.Name тоит ММВБ, что есть брехня наверное :)

Tauler
Tauler Autor

версия 2.1 у меня еще

Mikhail Sukhov
Mikhail Sukhov

Неважно. Все, что не RTSFUT и RTSOPT - в баню, то есть в Мамбу и как Equity. Так что может быть. Всех я кодов не знаю, а с экзотикой не работал.

Tauler
Tauler Autor

Получается свойство Echage может врать. На ртсе такая банда кодов?

Mikhail Sukhov
Mikhail Sukhov

Не то, чтобы врать... Если посмотреть на класс Exchange, то он знает только рынок ФОРТС и фондовую мамбу. Тоесть, классическое. У ртс стандарт, вроде, даже время отличается от работы ФОРТСа, нет?

Tauler
Tauler Autor

Неа. с 10 до 23.50 с 2-мя перерывами на клиринг. а засада была вот в чем - у меня ест ькод вида (пишу по памяти)

if(security.Exchage.Name = "РТС") order.Account = fortsAccout; else order.Account = micexAccount;

поэтому (т.к. в security.Exchage.Name стоял "ММВБ") в ордер совался неверный СЧЕТ. а вот почему эксепшн был "неверный код клиента" - не знаю. все заработало после костыля

if(security.Exchage.Name = "РТС" || security.Class = "RTSST") order.Account = fortsAccout; else order.Account = micexAccount;

ну и в событи FormatTransaction на всякий случаю инструкцию удаляю и код клиента делаю раным фортсовому счету (хотя может это уже и лишнее)

P.S. насчет иного времени работы РТС Стандарт не уверен на все 100%, но на 85% - думаю такое же как и на фортс. биржа то одна.

Mikhail Sukhov
Mikhail Sukhov

Значит начинаем очередной список улучшений к 2.5. RTSST, какие еще есть коды? Что насчет классики?

Serg
Serg

если честно, из прочитанного выше совсем не понял в чем суть проблемы. с помощью S# попробовал сделать бота так он одновременно торгует как на мамбе так и на стандарте. а если вы про торговые площадки то можно добавить к примеру LSE (11:15 - 18:30 мск) и все европейские.

Tauler
Tauler Autor

Ну я пока с RTSST столкнулся. может быть имеет смылс не хардкодить классы и быржи, а что типа ini файла сделать? кторые есл ичто сам пользователь может расширять? простейший файл вида Class = Excange, то есть

SPBFUT = FORTS EQBR = MICEX RTSST = FORTS,

если не нашел класс -по умолчанию MICEX. Эт оочень важный маомент, т.к. из свойсва Exchege я планирую брать рабочие периоды, чтобы тормозть робота.

Tauler
Tauler Autor

И походу изза этой баги позиции по РТС Стандарту не выводтся в ITrader.Position. Наверно изза того, что квик их выводить в Таблицу позиций по фьючерсам.

Tauler
Tauler Autor

Вдогонку - у меня LKOH и GAZP ест ьв обеих таблицах по позициям - и в бумагах, и в деривативах. прикладываю скрин шот - Позиции_РТССтандарт.

Tauler
Tauler Autor

Еще вдогонку - у меня в ITrader.Position всего 3 элемента - GZU0 = 1, GAZP = 0 и LKOH = 0. бумаги видимо из таблицы с бумагами бумаг подтянулись. А GAZR10 и LKOH10 вообще нет. 100% это изза некорректно проставленой биржи.

Mikhail Sukhov
Mikhail Sukhov

Ок, отпишусь после просмотра.

Serg
Serg

GAZR10 и LKOH10 эт когда они будут поставлены. Текущие позиции должны отражать GAZR и LKOH

Tauler
Tauler Autor

А отображают и то и то. а квиковцы мне прислали новую версию квика . 177 , клянуся что там это исправлено.

Mikhail Sukhov
Mikhail Sukhov

Я нить разговора потерял. Что именно квиковцы обновили?

Tauler
Tauler Autor

Это я Serg ответил. позиция по РТС Стандарту в квике показывается по одному инструменту в 2-х строках - одна с кодом LKOH, а другая с LKOH10. И в квике видимо недоработка - когда я на таблицу с позициями ставлю фильтр - не отображать бумагу LKOH, строка с кодом LKOH исчезает, а с LKOH10 остается. вот квиковцы мне версию .177 и выслали

  • вроде как там эта недоработка исправлена. Вот линк на пост в форуме

http://quik.ru/forum/quik/60148/60148/

это к проблеме того, что в Itrader.Positions нету элементов со стандартом не имеет отношения видимо. кстати .в конце рабочего дня (уже перед выходом), ковырял свой менеджер позиций - он у меня в упор не видел позу по GAZP (обычному). Я в отладку залез - а там в ITrader.Positions поза по GAZP есть, 100 акций, но в поле Position.Security.Class стоит RTSST . завтра с утра отпишусь точнее. в таблице инструментов у меня оба GAZP - как мамбовский с EQNE, так и фортсовый с RTSST. Вы наверно бумагу подтягиваете в таблицу позиций по бумага методом First? Я сегодня изза этого весь код робота претряхивал :) менял sec=>sec.Code == code на sec => sec.Code = =code && sec.Class = class :)

Serg
Serg

я тож запутался уже с этими позами. чет они там намудрили. отправьте плиз .177 на мыло. спасибо

Serg
Serg

версию обновил... тут та же фигня. непонятно как выяснить текущий остаток на стандарте по бумаге

Mikhail Sukhov
Mikhail Sukhov

Ок, тогда я расписываю логику получения позиции как есть (как надо пока не знаю). Сейчас, для РТС стандарт инструменты определяются как Equity и Micex. QuikTrader берет позиции из двух таблиц - бумаг и деривативов. Для каждой строчки из таблицы бумаг ищется соответствующий инструмент:

Securities.FirstOrDef(s => s.Code == secCode && s.Type == Equity)

Если инструмент не находится, то выводится ошибка в ProcessDataError.

  1. Она выводится?

Для деривативов все точно так же, но уже ищется по критерию s.Type != Equity.

  1. Я правильно понял, что Квик стандартовские инструменты отображает в таблице деривативов?

  2. Что за инструменты с постфиксом 10?

  3. А где инструменту +3, +2, +1? Как по ним выводится поза?

По коду инструмента он ищет

Tauler
Tauler Autor

Я уже сделал. Сделал отдельную табличку с позициями по фьючерсам , назвал ее "ПОзиции РТС Стандарт", и из нее тяну позы для стандарта. а чтобы корректно проставляся класс в ITRader.Position для бумаг, в Таблице интрументов бумагу GAZP поднял наверх, чтобы она была первее GAZP.RTSST. Настроил фильтры, чтобы в "Позиции по деривативам" не попадали GAZP и т.д., и чтобы в таблицу "Позиции РТС Стандарт" попадали ТОЛЬКО GAZP и так далее.

  1. Я правильно понял, что Квик стандартовские инструменты отображает в таблице деривативов?

Да, имено так и есть.

  1. Что за инструменты с постфиксом 10?

Это акция РТС Стандарт с датой поставки Т+4. Кстати если открыть позу вчера, и перенести ее, то в таблице деривативов будет уже 3 запси

GAZP10 входящая чистая поза -100, текущая 0 GAZP входящая чистая поза -100, текущая -100 GAZP13 входящая чистая поза -0, текущая -100

и за то, что брокер перенс позу с GAZP10 на GAZP13 (поставку с 10 сентября на 13-е), он возьмет 13% годовых. Переносит он потму что контракт безпоставочный

  1. А где инструменту +3, +2, +1? Как по ним выводится поза?

не понял о чем вы. если про инструментыс T+1 и т.д. - то не знаю. Наверно у нас только Т+4 включен

P.S. А я даже не знаю, как вы будете корректно проставлять код класса в бумагу в ITrader.Position - в таблицах с позициями только код бумаги, без класса. Разве что по названию?

пункт 1 не пробовал.

Serg
Serg

когда писал про обновления имел ввиду квика) к s# претензий нет... мое мнение что квиковцы должны внести изменения расчета тек поз по "стандарту"

по вашим пунктам Михаил: 1 не выводиться и не должна так как в таблице деривативов этот инстр присутствует. но вместе с ним есть еще около 4 0; +1; +2; +3; +4. 0 - эт текущий день строка имеет код инструмента GAZP. если сегодня 7е число месяца то +1 будет иметь код 08, например GAZP08, +2 - GAZP09 ... +4 - GAZP13.

  1. Да
  2. Цифра после кода это день поставки. То есть когда бумага должна зачислиться
  3. По ним она не выводиться так как таких инстр не существует.

опять мое мнение по пункту 1. 0- должна отражать тек состояние остатка по бумаге, а отражает чтото непонятное

Mikhail Sukhov
Mikhail Sukhov

Ок, теперь понятно.

Плохо то, что Квик пишет позицию бумажек в деривативы. То, что QuikTrader не выдает ошибки через ProcessDataError, на самом деле плохой признак. Это означает, что банально находится другой инструмент, но с тем же кодом. И по нему то и расчитывается поза. Если бы не было такого дериватива, то подобную ситуацию с РТС стандарт можно было исправить путем принудительного исправления типа инструмента на дериватив в NewSecurities и SecuritiesChanged. А так, появятся два инструмента. Один с форца, другой со стандатрам, оба дериватива и оба имею одинаковый код. Выход пока не вижу. Не было бы проблем, если Квик добавил класс инструмента. А так исправления от них ждать не скоро.

Насчет теории инструментов. Я правильно понимают, что нельзя, скажем, купить 7 и 8 числа GAZP +4? 8-го стакан будет торговаться уже по +3 и для того, чтобы купить +4, нужно подождать 3 дня? Тогда да, наверное, это будут одинаковые инструменты. Я сначала подумал, что +4 можно купить в любой день и отсрочка будет идти с момента покупки.

Насчет +0 - что это текущий день... Может быть наоборот, +0 - это день выплаты? Собственно, это разве не Мамба?

Tauler>и за то, что брокер перенс позу с GAZP10 на GAZP13 (поставку с 10 сентября на 13-е), он возьмет 13% годовых.

А если делать арбитраж, закрывающий позу к концу сессии, то ничего не возьмет? Насколько плечо увеличивается по сравнению с мамбой?

Tauler
Tauler Autor

Все иснтрумента на РТС Стандарт Т+4 то ест ьсегодня вы покупаете GAZP13, завтра ваш курленый GAZP13 станет GAZP14 - т.к. он безпоставочный.

Плохо то, что Квик пишет позицию бумажек в деривативы. То, что QuikTrader не выдает ошибки через ProcessDataError, на самом деле плохой признак. Это означает, что банально находится другой инструмент, но с тем же кодом.

кончено - коды у них совпадают. Можно забиться на "Краткое название" - на мамбе и на РТС Стандарт названия разные - на мамбе называетя "ГАЗВПРОМ ао", на РТССТ тупо GAZp. столбез название есть в таблицах по позициям.

Mikhail Sukhov
Mikhail Sukhov

Разве поза ртс стандарта попадает в мамба инструменты? Насколько я понял из описания поведения, поза попадает в деривативные инструменты. Те же фьючерсы ФОРЦА... Поза по таблице деривативов попадает в инструменты с типом, не равный Equity. Так что с мамбой все в порядке

  • ее инструменты не могут содержать тип, отличный от Equity.
Tauler
Tauler Autor

Поза РТС Стандарта в ITRader.Position икуда не попадает.

Mikhail Sukhov
Mikhail Sukhov

Поза должна попадать или в форц инструмент или выбрасывать исключением. ProcessDataError точно ничего не выводит?

Tauler
Tauler Autor

да не смотрел я ProcessDataError.

Mikhail Sukhov
Mikhail Sukhov

Есть там ошибка или нет? И какая?

Я сегодня вечером могу фикс для стандарта выложить (правильная биржа, правильная поза). Так что чем быстрее фидбек тем лучше =)

Tauler
Tauler Autor

Извините что не отвечал - не было в городе. вот что в ProcessDataError

"Инструмент с кодом SBER для деривативной позиции не найден."

  • это после того, как купил одну акцию на РТС Стандарт.
Den
Den

Tauler: Извините что не отвечал - не было в городе. вот что в ProcessDataError

"Инструмент с кодом SBER для деривативной позиции не найден."

  • это после того, как купил одну акцию на РТС Стандарт.

Уважаемый Михаил,

не могли бы вы обратить внимание снова на эту тему. Я также натолкнулся на то, что после покупки акций на РТС стандарт позиции появляются в таблице деривативов с числовым постфиксом и значение позиции я получить никак не могу. Использую S# 2.6.2 + Квик 5.17

Дело ухудшается тем, что добавляется не только постфикс, но меняется и буквенное обозначение.

Код Бумаги (Инструменты) -> Код инструмента (Поз. по деривативам)

SBER -> SBRF05 GAZP -> GAZR05

S# кидает эксепшн:

System.InvalidOperationException: Инструмент с кодом SBRF05 для деривативной позиции не найден. at Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func2 #=qUaGr534rtCUVxUZdZlNE8Q==) at Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)

Mikhail Sukhov
Mikhail Sukhov

Den: не могли бы вы обратить внимание снова на эту тему. Я также натолкнулся на то, что после покупки акций на РТС стандарт позиции появляются в таблице деривативов с числовым постфиксом и значение позиции я получить никак не могу.

Я уже забыл суть проблемы... Выше объяснение с настройками фильтров не решает проблему?

Den
Den

Mikhail Sukhov:

Den: не могли бы вы обратить внимание снова на эту тему. Я также натолкнулся на то, что после покупки акций на РТС стандарт позиции появляются в таблице деривативов с числовым постфиксом и значение позиции я получить никак не могу.

Я уже забыл суть проблемы... Выше объяснение с настройками фильтров не решает проблему?

Суть проблемы: после покупки бумаги на РТС-Стандарт она появляется в таблице деривативов с другим названием:

Код Бумаги (Инструменты) -> Код инструмента (Поз. по деривативам)

SBER -> SBRF05 GAZP -> GAZR05

И летит эксепшн при попытке получить позицию

System.InvalidOperationException: Инструмент с кодом SBRF05 для деривативной позиции не найден. at Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func2 #=qUaGr534rtCUVxUZdZlNE8Q==) at Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)

Т.о. никак не получить позицию по акции РТС-стандарт

Mikhail Sukhov
Mikhail Sukhov

Den: Т.о. никак не получить позицию по акции РТС-стандарт

А выше решение с фильтрами никак не решает эту проблему?

Den
Den

Mikhail Sukhov:

Den: Т.о. никак не получить позицию по акции РТС-стандарт

А выше решение с фильтрами никак не решает эту проблему?

Честно сказать, я не понимаю о каких фильтрах идет речь - я просто нашел тему с проблемой как у меня и написал вопрос о помощи.

Mikhail Sukhov
Mikhail Sukhov

Den:

Mikhail Sukhov:

Den: Т.о. никак не получить позицию по акции РТС-стандарт

А выше решение с фильтрами никак не решает эту проблему?

Честно сказать, я не понимаю о каких фильтрах идет речь - я просто нашел тему с проблемой как у меня и написал вопрос о помощи.

Прочитайте всю тему.

Den
Den

Mikhail Sukhov:

Den:

Mikhail Sukhov:

Den: Т.о. никак не получить позицию по акции РТС-стандарт

А выше решение с фильтрами никак не решает эту проблему?

Честно сказать, я не понимаю о каких фильтрах идет речь - я просто нашел тему с проблемой как у меня и написал вопрос о помощи.

Прочитайте всю тему.

Тему прочитал. Товарищ делал отдельную таблицу для позиций по РТС-Стандарту и смотрел ее изменения. Видимо это будет работать.

Вопрос в том, можно ли сделать исправления в S#, чтобы это работало стандартными средствами через ITrader.GetPosition, ITrader.NewPositions, ITrader.PositionChanged из стандартной таблицы деривативов.

Mikhail Sukhov
Mikhail Sukhov

Den: Тему прочитал. Товарищ делал отдельную таблицу для позиций по РТС-Стандарту и смотрел ее изменения. Видимо это будет работать.

Вопрос в том, можно ли сделать исправления в S#, чтобы это работало стандартными средствами через ITrader.GetPosition, ITrader.NewPositions, ITrader.PositionChanged из стандартной таблицы деривативов.

Попробуйте через QuikTrader.PreProcessDdeData изменять названия со стандартовских в обычные.

Den
Den

Mikhail Sukhov:

Den: Тему прочитал. Товарищ делал отдельную таблицу для позиций по РТС-Стандарту и смотрел ее изменения. Видимо это будет работать.

Вопрос в том, можно ли сделать исправления в S#, чтобы это работало стандартными средствами через ITrader.GetPosition, ITrader.NewPositions, ITrader.PositionChanged из стандартной таблицы деривативов.

Попробуйте через QuikTrader.PreProcessDdeData изменять названия со стандартовских в обычные.

Попробовал. В QuikTrader.PreProcessDdeData мне приходит только информация о таблице "инструменты". Логичнее было бы менять названия в таблице "Позиции по деривативам" - есть ли событие, в кот. это можно сделать?

Mikhail Sukhov
Mikhail Sukhov

Den: Попробовал. В QuikTrader.PreProcessDdeData мне приходит только информация о таблице "инструменты".

В PreProcessDdeData приходят все данные, и из инструментов, и из позиций.

Den
Den

Mikhail Sukhov:

Den: Попробовал. В QuikTrader.PreProcessDdeData мне приходит только информация о таблице "инструменты".

В PreProcessDdeData приходят все данные, и из инструментов, и из позиций.

Экспорт вызывается такой:


this.Trader.Terminal.StartDde(this.Trader.SecuritiesTable, this.Trader.DerivativePositionsTable, this.Trader.OrdersTable, this.Trader.MyTradesTable);

Далее



                        System.Collections.Generic.List<String> names = new System.Collections.Generic.List<string>();

                        this.Trader.PreProcessDdeData += (str, preData) =>
                        {
                            if (!names.Contains(str))
                            {
                                names.Add(str);
                                Console.WriteLine("new dde name: " + str);
                            }
                        };


Получаю на выходе только "инструменты". Что я делаю не так?

Mikhail Sukhov
Mikhail Sukhov

А остальные таблицы правильно оформлены? Verifier не ругается?

Den
Den

Mikhail Sukhov: А остальные таблицы правильно оформлены? Verifier не ругается?

Оформлены правильно. Экспортируются нормально и я получаю все изменения по ним типа NewOrder, OrderChanged, NewPosistion, NewPorfolio, и т.д.

Mikhail Sukhov
Mikhail Sukhov

Den:

Mikhail Sukhov: А остальные таблицы правильно оформлены? Verifier не ругается?

Оформлены правильно. Экспортируются нормально и я получаю все изменения по ним типа NewOrder, OrderChanged, NewPosistion, NewPorfolio, и т.д.

Проверил с вашим кодом, приходят все.

Den
Den

Mikhail Sukhov:

Den:

Mikhail Sukhov: А остальные таблицы правильно оформлены? Verifier не ругается?

Оформлены правильно. Экспортируются нормально и я получаю все изменения по ним типа NewOrder, OrderChanged, NewPosistion, NewPorfolio, и т.д.

Проверил с вашим кодом, приходят все.

Возможно это связано с тем что я сижу на S# 2.6.2 (Quik 5.17). Видимо пора перебираться на S# 3.0 beta

Mikhail Sukhov
Mikhail Sukhov

Den: Возможно это связано с тем что я сижу на S# 2.6.2 (Quik 5.17). Видимо пора перебираться на S# 3.0 beta

Вряд ли. А как вы проверяете имена? И когда именно это делаете?

Den
Den

Mikhail Sukhov:

Den: Возможно это связано с тем что я сижу на S# 2.6.2 (Quik 5.17). Видимо пора перебираться на S# 3.0 beta

Вряд ли. А как вы проверяете имена? И когда именно это делаете?

Не очень понял вопрос. Я просто распечатываю имена таблиц, которые приходят в Trader.PreProcessDdeData. (Код я привел выше) Вижу только "инструменты"

Den
Den

Den:

Mikhail Sukhov:

Den: Возможно это связано с тем что я сижу на S# 2.6.2 (Quik 5.17). Видимо пора перебираться на S# 3.0 beta

Вряд ли. А как вы проверяете имена? И когда именно это делаете?

Не очень понял вопрос. Я просто распечатываю имена таблиц, которые приходят в Trader.PreProcessDdeData. (Код я привел выше) Вижу только "инструменты"

Я понял почему не работает - таблица по деривативам была пустая (я думал что PreProcessDdeData придет хотя бы раз при старте экспорта)

В итоге все удалось. Я тупо меняю значение из колонки с именем РТС-стандартного дериватива на имя РТС-стандартной бумаги SBRF16 -> SBER, GAZR16 -> GAZP



                        this.Trader.PreProcessDdeData += (str, preData) =>
                        {
                            if (str.Contains("позиции по деривативам"))
                            {
                                Console.WriteLine("line0,item1: {1}", str, preData[0][1]);
                                Console.WriteLine("line1,item1: {1}", str, preData[1][1]);
                                preData[0][1] = "SBER";
                                preData[1][1] = "GAZP";
                            }
                        };

Запускаем и получаем:


позиции по деривативам   line0,item1: SBRF16
позиции по деривативам   line1,item1: GAZR16


New Position for  SBER  at  0  with margin  0
New Position for  GAZP  at  0  with margin  0

вместо эксепшенов что инструменты с именами SBRF16, GAZR16 не найдены.

Т.о. проблема решается стандартными средствами S#

Спасибо, Михаил, за отличную библиотеку, с ПРЕВОСХОДНЫМ дизайном!!!