Судя по всему у некоторых участников на 3.2.xxx появился сабж. Давайте сделаем следующее для поиска причины:
- Подпишемся на QuikTrader.ProcessDataError, QuikTrader.PreProcessDdeData, QuikTrader.NewOrders, QuikTrader.OrdersChanged, QuikTrader.OrdersFailed, QuikTrader.NewMyTrades, Strategy.NewOrder, Strategy.OrderChanged, Strategy.NewMyTrades.
- Из этих событий сделайте логирование.
- У стратегии сделайте логирование. В 3.2.6 стало больше логов, особенно в плане заявок и сделок.
Без логов разобраться сложно. Скажу больше, скорее всего, невозможно. Поэтому, чтобы взаимно упростить работу, ждем от вас логов.
Comments (60)
Login or Create account, Log in or register to leave a comment
для удобства логгирования пожелание переопределить ToString у Order, Trade и MyTrade - чтобы они выводили всю полезную для отладки информацию - а то самому приходится методом тыка выбирать что выводить Id, TransactionId, направление, цену, инструмент - и везде это пишеь а потом когда нужное событие возникло оказывается что забыл вывести еще чтото важное ;)
ToString сейчас используется для удобного чтения в Debug (например, для портфелей и инструментов). Хотелось бы и для Order + MyTrade это оставить на будущее.
Какую именно информацию выводить?
А вот не знаю. Пришлите, посмотрим, хватает ли.
присоединяюсь к вопросу vader. пока решил выводить id, transactionid, security code, direction, volume, price, time для трейдов и Exception там где он приходит. было бы проще: получил параметр в евент и его и вывожу (он сам умеет выводить через ToString все что нужно для отладки. а если там коллекция то и она както вывелась)
также FYI QuikTrader.PreProcessDdeData событие отсутствует
Отправил Вам, Михаил, в личку.
Да, получил, спасибо. Будем разбираться.
Кое-что удалось накопать. Была одна ошибка. Приводила ли она ко всем проблемам найденным пока сложно сказать. В 3.2.11 будет доступен фикс.
Ложная победа. Фикс не поменял ничего, так как он был ошибочным.
Просьба ко всем протестировать с таким PositionManager-ом (устанавливать его через Strategy.PositionManager):
Уже никому не актуально? Проблема сама собой разрешилась?
Акутально, я все никак не могу добиться повтора своей "проблемы со сделками, позициями".
Подскажите, а что необходимо искать в логах или в чем собственно проблема?
У вас видимо проблемы нет. Значит вам ее искать не нужно. У других она есть. Нужно понять причину. Как одно из решений для понимания http://stocksharp.com/posts/m/10790/
Пока что-то вроде этого:
SPM: OrderId 4928838387 Volume 3 Balance 0 Pos -3 SPM: OrderId 4928838387 Volume 3 Balance 0 Pos -3 SPM: OrderId 4928838387 Volume 3 Balance 0 Pos -3 SPM: OrderId 4928838387 Volume 3 Balance 0 Pos -3 SPM: OrderId 4928838387 Volume 3 Balance 0 Pos -3
Итоговая поза правильная получается?
Тогда зачем логи? Интересны логи тогда, когда поза неправильная.
Прошло 10 дней со дня просьбы о сборе логов среди тех, у кого наблюдались проблемы... 0 ответов. Не ждите когда за вас соберут другие.
Сегодня, после долгих 10 дней, стокшарп услышал ваш "родительский" призыв в теме и сбился таки в подсчете позиции😀
Отправил в личку.
Заявки посылаются через одну стратегию или используется дочерние для этого?
Залил на CodePlex файлы 3.2.12 с возможным фиксом (вероятность что это он очень высока).
Попутно вопрос ко всем - кто-нибудь наблюдал проблемы с позициями или иными событиями где-нибудь кроме QuikTrader?
Версия 3.2.11
Сработал стоп.
Лог: 23:17:10.869 | | SPM: OrderId 5098943951 Volume 2 Balance 0 Pos 2 23:17:10.885 | | SPM: OrderId 5098943951 Volume 2 Balance 0 Pos 2
Правило PositionChanged() не выполнилось
5098943951 - это стоп заявка или порождённая заявка (Derived order)?
Квик или другой ITrader? С фиксом с codeplex, что 1м постом выше Миша выкладывал, или без оного?
Скачать из папки References
использовал 3.2.11 и были иногда какие то глюки c PositionManager скачал 3.2.12 ,но так же остались проблемы( К сожелениею логи от стокшарпа не использую,но просто хочу сказать ,что помоему проблемы с positionmanager не решили(
С уважением!Спасибо за S#)
Проблемы при работе с квиком? какую сборку 3.2.12 использовали?
Использовал сборку 3.2.12 ,никаких проблем с квиком не было всё отлично работало.Раньше просто один робот работал на одном инструменте,затем решили использовать несколько роботов на одном инструменте и тут понадобился S# методы,чтобы использовать именно колиечство позиций со стратегии ,а не с одного инструмента.Запускал для теста всё нормально работало,пока местами начали проскальзывать глюки там допустим на счету 2 позиции,а он пишет 3. Затем поставил новую сборку и вот она тоже дала глюк.
Все заявки через стратегию реалицию через this.CreateOrder(......); this.RegisterOrder(order); this.ChildStrategies.Add(mqs);
Последняя строчка тут не при чём я так понимаю. Попробуйте выше логгер для дебага, скиньте результат его выполнения.
Дочерние стратегии имеют свойство заканчивать свою работу раньше, чем по ним придут сделки. Лечится через Strategy.RemoveChildsStrategy
Даже если я захожу обычной лимитной заявкой он всё равно не всегда правильно распознаёт кол-во позиций.Причём если бы я что-то неправильно делал,то он скорее всего,всегда бы писал ноль количество позиций.🤨
Тестирование с указанным PositionManager-ом уже выполняется, о результатах отпишусь позднее.
для скорейшего нахождения возможных ошибок эту задачу необходимо делать не одному человеку :) Интересно, какие результаты Вы, esper, получили. По моим наблюдениям ошибки в подсчете позиции бывают когда в стратегию не приходит столько же OnOrderChanged, сколько их появляется через QuikTrader.
Все верно, в некоторых случаях, OrderChanged для стратегии не вызывается и PositionManager стратегии не пересчитывает свою позицию. Происходит это, скорее всего, из-за того, что:
Примерный лог работы:> 14:37:54:8445 | Debug | Trader | Новая заявка id: 966412305 (49537765) state:Done Buy code:RIZ1 price:135280 volume:1
P.s. перенесите последние два сообщения в эту тему
Мда, грустно все как-то со S#.
4.03. Пользую QuikTrader
Эвент Strategy.OrderChanged действительно не появляется. От греха по-дальше перешел на ITrader.NewOrders и ITrader.OrdersChanged было уже спокойно выдохнул.
Ан нет, порой исполненные либо снятые заявки так и остаются в стейте Active, хоть ты тресни.
А с чего решили, что это S#? Ошибку с позами уже почти локализовали, проверим на этих выхах. Но она явно не связана с вашей ситуацией (вообще из другой оперы). С учетом того, что больше никто о проблеме с Active не писал, вывод напрашивается сам собой.😎
Насчет "оперы" не буду судить. Увидел сообщение тов. esper.
Но вот заявочки остаются в Active. Смотрите, вот даже после всего вызываю CancelActiveOrders и в логе возникают сообщения "Вы не можете снять данную заявку". Предположу, что QuikTrader, как и мои обработчики изменения состояния заявок видят их как Active и соответственно CancelActiveOrders пытается их снять. Хотя в квике заявы давно исполнены либо сняты.
Не факт. Заявка может быть исполнена на бирже но еще не обновила свой статус у вас на компьютере.
Насчет постоянно висит Active. Запускали пример Sample? Выставляли заявки? Снимали? Статус менялся?
Запускали пример Sample? Выставляли заявки? Снимали? Статус менялся?
Данный код помимо активных заявок выводит и сработавшие заявки со статусом Active. Why?
Потому что у вас почему то заявки не меняют свой статус на Done. В Sample раз все работает, значит ошибка у вас.
Михаил. Sample запускал, работает. Мой код тоже работает и статусы меняются. Но, не всегда: заявки обновляются каждую секунду (reregister) и периодически некоторые заявки, которые по факту уже сняты (например сравнивая с таблицей в квике), так и остаются висеть активными. Процент этих заявок не большой (на вскидку <4%). Есть ли возможность принудительно поставить статус done для определенной заявки в Trader.Orders?
Долго ковырялся, нашел причину - не был запущен DDE экспорт по таблице заявок.
На КодеПлексе лежит залеченная версия Algo. Она решает проблему с позициями. Просьба проверить ее.
Отвлеку, а симптом типа: заявка из None сразу становится Done (без Active) и в такой ситуации заявка на появляется в Strategy.Orders случаем не "про этот фикс"? :-)
Версия 4.1.1? Покажите список таких заявок и скриншот квика, где видна описанная вами проблема.
Есть такое, если часто посылать заявки , причем на РТС случается редко, а на УБ полный завал , в трейдер ордерс висит полно оредров со статусом актив а в системе реально их нет , бывают и ордера со статусом ноне,а в системе они активны, видно какая то ошибка при обработке ордеров с УБ есть в стокшарпе.
Это через КвикТрейдер, через ПлазаТрейдер такого не замечал.
версия 4.1.1 лог не веду ибо тормозит робот , так как много заявок шлет.
Без лога с вашей стороны не может быть никакого фикса с нашей стороны. Вообще не понятно с чем связано у вас.
Раз тормозит робот - значит что-то не так с логикой. Даже на стареньком Pentium IV должно работать очень шустро. Да и запись в файл не ресурсоёмкая задача.
Таже логика через плазатрейдер работает без лишних ордеров... меня это не сильно напрягает, просто увидел что у человека , таже проблема вот и сказал что есть такое ... Просто гляньте, если будет свободная, минутка чем отличаеться работа с ордерами через квик на РТС и на УБ.
Проверил - ничем не отличается.
Заметил еще одну странность : Робот подключон через квик к РТС , тот же робот на другом компе подключен через квик к УБ. Посилаю зявку не с робота, а с Квика там и там -- в том роботе что подключен к РТС заявку видно , а в тот что к УБ никак не видит заявок посланых через квик.
Это конечно ничего не значит , может проблема у брокера, а может стокшарп работаес с УБ как то по другому .
Есть свойство у QuikTrader, для отображения заявок поданных руками. Читайте доку или новости.
Спасибо ,незнал, почитаю доку... но робот все равно один и тотже , скомпилирован в одном месте а потом перенесен на разные компы.
Это нормальная ситуация. См. в сторону свойств QuikTrader.