Судя по всему у некоторых участников на 3.2.xxx появился сабж. Давайте сделаем следующее для поиска причины:
- Подпишемся на QuikTrader.ProcessDataError, QuikTrader.PreProcessDdeData, QuikTrader.NewOrders, QuikTrader.OrdersChanged, QuikTrader.OrdersFailed, QuikTrader.NewMyTrades, Strategy.NewOrder, Strategy.OrderChanged, Strategy.NewMyTrades.
- Из этих событий сделайте логирование.
- У стратегии сделайте логирование. В 3.2.6 стало больше логов, особенно в плане заявок и сделок.
Без логов разобраться сложно. Скажу больше, скорее всего, невозможно. Поэтому, чтобы взаимно упростить работу, ждем от вас логов.
Kommentare (60)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
для удобства логгирования пожелание переопределить 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.