Михаил возникла вот такая проблема.
у меня код клиента, кторый я забиваю во время создания шлюза, отличатеся от того кода клиента ,кторый необходимо выставить при создании сделки на РТС Стандарт. что делать? мне надо в рамках одного ITrader совершать сделки и на мамбе и на фортсе и на ртс стандарт
Kommentare (52)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Меняйте транзакции строку на лету как здесь
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
и смотрите своб заявку. В зависимости от этого меняйте код клиента.
cсвоб заявку? своп или стоп? :) не очень понял, что менять в ордере. можно оподробнее плиз?
Может зря вы код клиента из заявки удалили?
Он там никогда не был.... Менять саму строку транзакции. Через TransactionBuilder. В качестве примера можно взять код из доки. Там меняется другая инструкция, но просто замените ее на
http://stocksharp.com/doc/help/html/M_Ecng_Trading_Quik_TransactionBuilder_SetClientCode_1_bb3a7a4f.htm
Интерсное кино :) я добавил в Инструменты газвпрои из РТС Стандарт, и когда выставляю ордер , в Order.Security.Class стоит RTSST (что есть правда), а в Exchage.Name тоит ММВБ, что есть брехня наверное :)
версия 2.1 у меня еще
Неважно. Все, что не RTSFUT и RTSOPT - в баню, то есть в Мамбу и как Equity. Так что может быть. Всех я кодов не знаю, а с экзотикой не работал.
Получается свойство Echage может врать. На ртсе такая банда кодов?
Не то, чтобы врать... Если посмотреть на класс Exchange, то он знает только рынок ФОРТС и фондовую мамбу. Тоесть, классическое. У ртс стандарт, вроде, даже время отличается от работы ФОРТСа, нет?
Неа. с 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% - думаю такое же как и на фортс. биржа то одна.
Значит начинаем очередной список улучшений к 2.5. RTSST, какие еще есть коды? Что насчет классики?
если честно, из прочитанного выше совсем не понял в чем суть проблемы. с помощью S# попробовал сделать бота так он одновременно торгует как на мамбе так и на стандарте. а если вы про торговые площадки то можно добавить к примеру LSE (11:15 - 18:30 мск) и все европейские.
Ну я пока с RTSST столкнулся. может быть имеет смылс не хардкодить классы и быржи, а что типа ini файла сделать? кторые есл ичто сам пользователь может расширять? простейший файл вида Class = Excange, то есть
SPBFUT = FORTS EQBR = MICEX RTSST = FORTS,
если не нашел класс -по умолчанию MICEX. Эт оочень важный маомент, т.к. из свойсва Exchege я планирую брать рабочие периоды, чтобы тормозть робота.
И походу изза этой баги позиции по РТС Стандарту не выводтся в ITrader.Position. Наверно изза того, что квик их выводить в Таблицу позиций по фьючерсам.
Вдогонку - у меня LKOH и GAZP ест ьв обеих таблицах по позициям - и в бумагах, и в деривативах. прикладываю скрин шот - Позиции_РТССтандарт.
Еще вдогонку - у меня в ITrader.Position всего 3 элемента - GZU0 = 1, GAZP = 0 и LKOH = 0. бумаги видимо из таблицы с бумагами бумаг подтянулись. А GAZR10 и LKOH10 вообще нет. 100% это изза некорректно проставленой биржи.
Ок, отпишусь после просмотра.
GAZR10 и LKOH10 эт когда они будут поставлены. Текущие позиции должны отражать GAZR и LKOH
А отображают и то и то. а квиковцы мне прислали новую версию квика . 177 , клянуся что там это исправлено.
Я нить разговора потерял. Что именно квиковцы обновили?
Это я 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 :)
я тож запутался уже с этими позами. чет они там намудрили. отправьте плиз .177 на мыло. спасибо
версию обновил... тут та же фигня. непонятно как выяснить текущий остаток на стандарте по бумаге
Ок, тогда я расписываю логику получения позиции как есть (как надо пока не знаю). Сейчас, для РТС стандарт инструменты определяются как Equity и Micex. QuikTrader берет позиции из двух таблиц - бумаг и деривативов. Для каждой строчки из таблицы бумаг ищется соответствующий инструмент:
Securities.FirstOrDef(s => s.Code == secCode && s.Type == Equity)
Если инструмент не находится, то выводится ошибка в ProcessDataError.
Для деривативов все точно так же, но уже ищется по критерию s.Type != Equity.
Я правильно понял, что Квик стандартовские инструменты отображает в таблице деривативов?
Что за инструменты с постфиксом 10?
А где инструменту +3, +2, +1? Как по ним выводится поза?
По коду инструмента он ищет
Я уже сделал. Сделал отдельную табличку с позициями по фьючерсам , назвал ее "ПОзиции РТС Стандарт", и из нее тяну позы для стандарта. а чтобы корректно проставляся класс в ITRader.Position для бумаг, в Таблице интрументов бумагу GAZP поднял наверх, чтобы она была первее GAZP.RTSST. Настроил фильтры, чтобы в "Позиции по деривативам" не попадали GAZP и т.д., и чтобы в таблицу "Позиции РТС Стандарт" попадали ТОЛЬКО GAZP и так далее.
Да, имено так и есть.
Это акция РТС Стандарт с датой поставки Т+4. Кстати если открыть позу вчера, и перенести ее, то в таблице деривативов будет уже 3 запси
GAZP10 входящая чистая поза -100, текущая 0 GAZP входящая чистая поза -100, текущая -100 GAZP13 входящая чистая поза -0, текущая -100
и за то, что брокер перенс позу с GAZP10 на GAZP13 (поставку с 10 сентября на 13-е), он возьмет 13% годовых. Переносит он потму что контракт безпоставочный
не понял о чем вы. если про инструментыс T+1 и т.д. - то не знаю. Наверно у нас только Т+4 включен
P.S. А я даже не знаю, как вы будете корректно проставлять код класса в бумагу в ITrader.Position - в таблицах с позициями только код бумаги, без класса. Разве что по названию?
пункт 1 не пробовал.
когда писал про обновления имел ввиду квика) к s# претензий нет... мое мнение что квиковцы должны внести изменения расчета тек поз по "стандарту"
по вашим пунктам Михаил: 1 не выводиться и не должна так как в таблице деривативов этот инстр присутствует. но вместе с ним есть еще около 4 0; +1; +2; +3; +4. 0 - эт текущий день строка имеет код инструмента GAZP. если сегодня 7е число месяца то +1 будет иметь код 08, например GAZP08, +2 - GAZP09 ... +4 - GAZP13.
опять мое мнение по пункту 1. 0- должна отражать тек состояние остатка по бумаге, а отражает чтото непонятное
Ок, теперь понятно.
Плохо то, что Квик пишет позицию бумажек в деривативы. То, что QuikTrader не выдает ошибки через ProcessDataError, на самом деле плохой признак. Это означает, что банально находится другой инструмент, но с тем же кодом. И по нему то и расчитывается поза. Если бы не было такого дериватива, то подобную ситуацию с РТС стандарт можно было исправить путем принудительного исправления типа инструмента на дериватив в NewSecurities и SecuritiesChanged. А так, появятся два инструмента. Один с форца, другой со стандатрам, оба дериватива и оба имею одинаковый код. Выход пока не вижу. Не было бы проблем, если Квик добавил класс инструмента. А так исправления от них ждать не скоро.
Насчет теории инструментов. Я правильно понимают, что нельзя, скажем, купить 7 и 8 числа GAZP +4? 8-го стакан будет торговаться уже по +3 и для того, чтобы купить +4, нужно подождать 3 дня? Тогда да, наверное, это будут одинаковые инструменты. Я сначала подумал, что +4 можно купить в любой день и отсрочка будет идти с момента покупки.
Насчет +0 - что это текущий день... Может быть наоборот, +0 - это день выплаты? Собственно, это разве не Мамба?
Tauler>и за то, что брокер перенс позу с GAZP10 на GAZP13 (поставку с 10 сентября на 13-е), он возьмет 13% годовых.
А если делать арбитраж, закрывающий позу к концу сессии, то ничего не возьмет? Насколько плечо увеличивается по сравнению с мамбой?
Все иснтрумента на РТС Стандарт Т+4 то ест ьсегодня вы покупаете GAZP13, завтра ваш курленый GAZP13 станет GAZP14 - т.к. он безпоставочный.
Плохо то, что Квик пишет позицию бумажек в деривативы. То, что QuikTrader не выдает ошибки через ProcessDataError, на самом деле плохой признак. Это означает, что банально находится другой инструмент, но с тем же кодом.
кончено - коды у них совпадают. Можно забиться на "Краткое название" - на мамбе и на РТС Стандарт названия разные - на мамбе называетя "ГАЗВПРОМ ао", на РТССТ тупо GAZp. столбез название есть в таблицах по позициям.
Разве поза ртс стандарта попадает в мамба инструменты? Насколько я понял из описания поведения, поза попадает в деривативные инструменты. Те же фьючерсы ФОРЦА... Поза по таблице деривативов попадает в инструменты с типом, не равный Equity. Так что с мамбой все в порядке
Поза РТС Стандарта в ITRader.Position икуда не попадает.
Поза должна попадать или в форц инструмент или выбрасывать исключением. ProcessDataError точно ничего не выводит?
да не смотрел я ProcessDataError.
Есть там ошибка или нет? И какая?
Я сегодня вечером могу фикс для стандарта выложить (правильная биржа, правильная поза). Так что чем быстрее фидбек тем лучше =)
Извините что не отвечал - не было в городе. вот что в ProcessDataError
"Инструмент с кодом SBER для деривативной позиции не найден."
Уважаемый Михаил,
не могли бы вы обратить внимание снова на эту тему. Я также натолкнулся на то, что после покупки акций на РТС стандарт позиции появляются в таблице деривативов с числовым постфиксом и значение позиции я получить никак не могу. Использую S# 2.6.2 + Квик 5.17
Дело ухудшается тем, что добавляется не только постфикс, но меняется и буквенное обозначение.
S# кидает эксепшн:
System.InvalidOperationException: Инструмент с кодом SBRF05 для деривативной позиции не найден. at Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList
1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func2 #=qUaGr534rtCUVxUZdZlNE8Q==) at Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)Я уже забыл суть проблемы... Выше объяснение с настройками фильтров не решает проблему?
Суть проблемы: после покупки бумаги на РТС-Стандарт она появляется в таблице деривативов с другим названием:
Код Бумаги (Инструменты) -> Код инструмента (Поз. по деривативам)
SBER -> SBRF05 GAZP -> GAZR05
И летит эксепшн при попытке получить позицию
System.InvalidOperationException: Инструмент с кодом SBRF05 для деривативной позиции не найден. at Ecng.Trading.Quik.QuikTrader.#=qTre19CdRPyKpnVO8WaQdUkvQrIiCuIHe9XcW7RXbC04=.#=qAw6bx57W6lM8GTpXWPCckA==(IList
1 #=qw0QSyhxdA2ygktRIeaDpsw==, Func2 #=qUaGr534rtCUVxUZdZlNE8Q==) at Ecng.Trading.Quik.DdeTable.#=qZiwPb3v2t_oT0D7mrAAKDQ==(IList1 #=qGZJOOyj9_11QAXVxoVAHJQ==, Action2 #=qytkU$YIpb54LPXCs3YXrAA==, Action`1 #=qrtTaqcpDj5SIhcizQIpeJg==)Т.о. никак не получить позицию по акции РТС-стандарт
А выше решение с фильтрами никак не решает эту проблему?
Честно сказать, я не понимаю о каких фильтрах идет речь - я просто нашел тему с проблемой как у меня и написал вопрос о помощи.
Прочитайте всю тему.
Тему прочитал. Товарищ делал отдельную таблицу для позиций по РТС-Стандарту и смотрел ее изменения. Видимо это будет работать.
Вопрос в том, можно ли сделать исправления в S#, чтобы это работало стандартными средствами через ITrader.GetPosition, ITrader.NewPositions, ITrader.PositionChanged из стандартной таблицы деривативов.
Попробуйте через QuikTrader.PreProcessDdeData изменять названия со стандартовских в обычные.
Попробовал. В QuikTrader.PreProcessDdeData мне приходит только информация о таблице "инструменты". Логичнее было бы менять названия в таблице "Позиции по деривативам" - есть ли событие, в кот. это можно сделать?
В PreProcessDdeData приходят все данные, и из инструментов, и из позиций.
Экспорт вызывается такой:
Далее
Получаю на выходе только "инструменты". Что я делаю не так?
А остальные таблицы правильно оформлены? Verifier не ругается?
Оформлены правильно. Экспортируются нормально и я получаю все изменения по ним типа NewOrder, OrderChanged, NewPosistion, NewPorfolio, и т.д.
Проверил с вашим кодом, приходят все.
Возможно это связано с тем что я сижу на S# 2.6.2 (Quik 5.17). Видимо пора перебираться на S# 3.0 beta
Вряд ли. А как вы проверяете имена? И когда именно это делаете?
Не очень понял вопрос. Я просто распечатываю имена таблиц, которые приходят в Trader.PreProcessDdeData. (Код я привел выше) Вижу только "инструменты"
Я понял почему не работает - таблица по деривативам была пустая (я думал что PreProcessDdeData придет хотя бы раз при старте экспорта)
В итоге все удалось. Я тупо меняю значение из колонки с именем РТС-стандартного дериватива на имя РТС-стандартной бумаги SBRF16 -> SBER, GAZR16 -> GAZP
Запускаем и получаем:
вместо эксепшенов что инструменты с именами SBRF16, GAZR16 не найдены.
Т.о. проблема решается стандартными средствами S#
Спасибо, Михаил, за отличную библиотеку, с ПРЕВОСХОДНЫМ дизайном!!!