Убить упрямую тварь!
Atom
06.09.2012
Oppositus


Здравствуйте.

Я использую MQS для открытия позиции, как дочернюю стратегию. В процессе работы котирования произошла ошибка, и котирование осталось висеть дочерней стратегией. Но при этом, перед ошибкой, позиция по инструменту была открыта. Мне надо сделать так, чтобы дочерняя MQS закончилась и самоудалилась из базовой стратегии, даже при ошибке. В данном же случае MQS переходит в ProcessState == Stopping и висит в родительской стратегии. Мне же нужно удалять дочерние стратегии после совершения сделок, или после ошибок. То есть - если стратегия отработала или ошиблась, то она должна удалиться.

Как это сделать самым лучшим способом? Под "лучшим способом" я понимаю в порядке убывания лучшести:
1. При создании стратегии выставить какое-нибудь свойство, которое указывает стратегии убиться в любом нештатном случае
2. Написать обработчик Error, в котором прибивать стратегию самостоятельно. (И что там примерно писать?).
3. Следить за дочерней стратегией из базовой, и выпиливать дочернюю, если что не так.

Лог утерян. В общем же, там было следующее:
1. Стратегия отправила ордер, тот зарегистрировался.
2. Изменился стакан или что-то еще произошло, и стратегия начала перерегистрацию ордера
3. В процессе перерегистрации заявка исполнилась.
4. Новый ордер ушел на биржу
5. ФОРТС ответил "нехватка по лимитам"
6. MQS вывалила в лог исключение (сообщение с ФОРТС) и осталась висеть в состоянии Stopping

Код:

Код

        protected void EnterLong()
        {
            // дожидаемся завершения стратегий
            if(base.ChildStrategies.Count != 0)
            {
                this.AddWarningLog("EnterLong - отказ, есть активные стратегии!");
                return;
            }

            // Проверяем время
            if(m_TTM.State(DateTime.Now) != TradeState.Opened)
            {
                this.AddWarningLog("EnterLong - отказ, неторговое время");
                return;
            }

            decimal LongVolume = base.Volume - base.Position;
            this.AddInfoLog("Входим в лонг, макс. объем {0}", LongVolume);

            if(LongVolume < 1)
            {
                this.AddWarningLog("EnterLong - отказ, неправильный объем {0}. Вычислено {1} - {2}", LongVolume, base.Volume, base.Position);
                return;
            }

            m_PositionEnter = base.Security.LastTrade.Price;
            MarketQuotingStrategy buyer = new MarketQuotingStrategy(OrderDirections.Buy, Math.Min(LongVolume, m_Depth.BestAsk.Volume))
            {
                PriceType = MarketPriceTypes.Opposite/*,
                MaxErrorCount = 3,
                MaxReRegisterCount = 10,
                MaxRegisterFailCount = 3*/
            };
            base.ChildStrategies.Add(buyer);
        }

Теги:


Спасибо:


1 2  >
Oppositus

Фотография
Дата: 06.09.2012
Ответить


Ситуация повторилась. Получил лог. Все оказалось еще хуже, чем в прошлый раз! MQS почему-то зависла - судя по всему (потребление процессора 0) на каком-то объекте синхронизации. И повесила намертво всю мою программу. Потом отвисла. Но, сами понимаете, это не дело. Обратите внимание на время - MQS висела почти пять минут. Все это время в робот не приходили сделки и пр. После ошибки MQS осталась висеть в состоянии Stopping. Это было раз.

Два оказадлось тоже ничего себе. Я отдал приказ на покупку 1 контракта. А MQS пыталась купить два! Видимо, стратегия заботится о том, чтобы у меня было больше прибыли, ггг.

Есть ли какие-нибудь рекомендации, как этого - зависания и неверного объема, избежать?

Код

TC_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.722 |            | Buy 140915 with stop 140805 in 110 pt and take 141215 in 300
TC_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.725 |            | Входим в лонг, макс. объем 1
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.753 |            | Стратегия запущена.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.755 |            | Котирование на Buy объема 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.762 |            | Приостановка правил. _rulesSuspendCount 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.811 |            | Возобновление правил. _rulesSuspendCount 0.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.849 |            | Цена текущей NULL и лучшей 140930.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.850 |            | Лучший бид 140920 и лучший аск 140930.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.858 |            | Регистрация новой заявки на Buy с ценой 140930 и объемом 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:38.896 |            | Заявка 45101909 на Buy отправлена с ценой 140930 объемом 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.077 |            | Заявка 45101909 принята биржей.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.082 |            | Сброс счетчика ошибок регистрации с 0 до нуля.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.209 |            | Цена текущей 140930 и лучшей 140925.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.209 |            | Лучший бид 140915 и лучший аск 140925.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.217 |            | Котирование заявки 45101909 на Buy с ценой 140930 объемом 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.231 |            | Перекотирование зарегистрировано для заявки 45101910 на Buy с ценой 140925.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.393 |            | Заявка 45101909 полностью исполнилась. Оставшийся объем 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.401 |            | Цена текущей NULL и лучшей 140925.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.407 |            | Лучший бид 140915 и лучший аск 140925.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.415 |            | Регистрация новой заявки на Buy с ценой 140925 и объемом 1.
TC_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.442 |            | Новый трейд. Теперь прибыль 0 за 0 трейдов. Макс. убыток 0. Макс прибыль -79228162514264337593543950335.
TC_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.444 |            | Новая Buy сделка 625120903 по цене 140925 на 1 заявки 45101909.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.463 |            | Новая Buy сделка 625120903 по цене 140925 на 1 заявки 45101909.
TC_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.467 |            | Новая позиция 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.480 |            | Новая позиция 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 12:55:39.430 |            | Заявка 45101911 на Buy отправлена с ценой 140925 объемом 1.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.443 |            | Заявка 45101909 больше не активна.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.455 |            | Позиция изменилась на 1. Оставшийся объем 0.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.456 |            | Заканчиваем котирование.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.457 |            | Стратегия останавливается.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.459 |            | Ожидание снятия всех активных заявок.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.830 |            | Заявка 45101911 больше не активна.
MQS_RIU2@RTS_SPBFUT00TE4 | 06.09.2012 13:01:01.939 | Ошибка     | Заявка 45101911 не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Ошибка создания заявки. [FORTS] "Нехватка средств по лимитам клиента."..
Спасибо:

ra81

Фотография
Дата: 06.09.2012
Ответить


не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.
Спасибо:

Oppositus

Фотография
Дата: 06.09.2012
Ответить


ra81
не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.


Я склоняюсь... Но MQS позволяет не писать обработку ордеров, ошибок, перерегистрацию и пр. Запустил - и она сама все сделала. Так намного продуктивнее.
Спасибо:

ra81

Фотография
Дата: 06.09.2012
Ответить


Oppositus
ra81
не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.


Я склоняюсь... Но MQS позволяет не писать обработку ордеров, ошибок, перерегистрацию и пр. Запустил - и она сама все сделала. Так намного продуктивнее.


Если бы все работало как следует то да. А так я уже написал обработку ордеров, Ошибок перерегистрацию и все такое. Запускаю и все само делается. Как будет все работать без ошибок буду пользоваться.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 07.09.2012
Ответить


ra81
не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.


Котирование - сложная вещь. Сложная вовсе не потому, что ее так придумали, а потому что управление заявками довольно не простая задача. Со стороны всегда кажется, что это довольно просто, и проще переписать. На деле все далеко не так.

Ты, Родион, используешь Альфа Директ. Где по определению нет быстрой операции перестановки заявок. Котирование на такой медленной платформе работает нормально. Единственно, что оно не совместимо с написанным тобой коннектором. Я уже писал, что у тебя локи, которые использовать не нужно. Ты неправильно их используешь, что приводит к дедлокам. Котирование тут не виновато, раз ты решил написать свой коннектор. Раз он криво написан, не вини, пожалуйста, СтокШарп.

Еще котирование довольно сложно настраивать. Отвечать всем как это делать нет физически времени (на это существует дока). Теперь еще и нет смысла, когда у нас тех поддержкой занимаются профессионально. Документации, возможно, недостаточно, чтобы описать весь принцип работы котирования. Поэтому тут всегда есть вариант, использовать стандартное или написать самому. К варианту "использовать" прилагается опцион с получение сырцов котирования. К варианту "написать" прилагается куча геморроя с неисполнением заявок, частичным исполнением и т.д. Еще раз повторюсь, если бы котирование было простой задачей - оно было бы давно реализовано и работало как часы.

И последнее. Всегда можно помощь обменять на помощь. Помогаете - получаете в ответ. Конечно, если хочется пойти самым сложным путем (написать дэдлочный коннектор, написать непонятно какое котирование[laugh]), то тут да, путь единственный - все писать самому, все делать самому. Только потом чур не удивляться, что у вас наблюдаются ошибки, которых нет у других. Но я лично не понимаю смысла этого подхода. Тоесть, вместо того, чтобы потратить несколько дней, будет потрачено несколько недель. А в чем смысл? Чтобы продолжать сидеть на старом коде, с кучей не поддерживаемых файлов, и советовать другим загнать себя так же в тупиковую студию?
Спасибо: Alexander

Oppositus

Фотография
Дата: 07.09.2012
Ответить


Mikhail Sukhov
Ты, Родион, используешь Альфа Директ. Где по определению нет быстрой операции перестановки заявок. Котирование на такой медленной платформе работает нормально. Единственно, что оно не совместимо с написанным тобой коннектором. Я уже писал, что у тебя локи, которые использовать не нужно. Ты неправильно их используешь, что приводит к дедлокам. Котирование тут не виновато, раз ты решил написать свой коннектор. Раз он криво написан, не вини, пожалуйста, СтокШарп.


Насчет Родиона не знаю, но у меня тоже локи - см. второе сообщение темы. И коннектор Квик - стандартный, из библиотеки.

Mikhail Sukhov
Документации, возможно, недостаточно, чтобы описать весь принцип работы котирования.


Совершенно недостаточно. Скажу более (уж не обижайтесь) - то, что лежит на сайте и скачивается с библиотекой - это не документация, это отписка. Документация выглядит примерно так: http://msdn.microsoft.co...ng.readerwriterlockslim Понятно, что написание документации такого уровня требует отдельной команды. Но текущая документация по S# API просто бесполезна. Добавьте чуть более подробные описания - и отпадет много вопросов, которые постоянно всплывают на форуме. Если бы можно было настроить котирование по документации, этой темы точно не было бы.

Mikhail Sukhov
К варианту "использовать" прилагается опцион с получение сырцов котирования.


Михал, подскажите пожауйста, где и как можно посмотреть на исходники котирования? Профессиональную поддержку я пока не хочу.
Спасибо:

ra81

Фотография
Дата: 08.09.2012
Ответить


Mikhail Sukhov
ra81
не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.


Котирование - сложная вещь. Сложная вовсе не потому, что ее так придумали, а потому что управление заявками довольно не простая задача. Со стороны всегда кажется, что это довольно просто, и проще переписать. На деле все далеко не так.

Ты, Родион, используешь Альфа Директ. Где по определению нет быстрой операции перестановки заявок. Котирование на такой медленной платформе работает нормально. Единственно, что оно не совместимо с написанным тобой коннектором. Я уже писал, что у тебя локи, которые использовать не нужно. Ты неправильно их используешь, что приводит к дедлокам. Котирование тут не виновато, раз ты решил написать свой коннектор. Раз он криво написан, не вини, пожалуйста, СтокШарп.

Еще котирование довольно сложно настраивать. Отвечать всем как это делать нет физически времени (на это существует дока). Теперь еще и нет смысла, когда у нас тех поддержкой занимаются профессионально. Документации, возможно, недостаточно, чтобы описать весь принцип работы котирования. Поэтому тут всегда есть вариант, использовать стандартное или написать самому. К варианту "использовать" прилагается опцион с получение сырцов котирования. К варианту "написать" прилагается куча геморроя с неисполнением заявок, частичным исполнением и т.д. Еще раз повторюсь, если бы котирование было простой задачей - оно было бы давно реализовано и работало как часы.

И последнее. Всегда можно помощь обменять на помощь. Помогаете - получаете в ответ. Конечно, если хочется пойти самым сложным путем (написать дэдлочный коннектор, написать непонятно какое котирование[laugh]), то тут да, путь единственный - все писать самому, все делать самому. Только потом чур не удивляться, что у вас наблюдаются ошибки, которых нет у других. Но я лично не понимаю смысла этого подхода. Тоесть, вместо того, чтобы потратить несколько дней, будет потрачено несколько недель. А в чем смысл? Чтобы продолжать сидеть на старом коде, с кучей не поддерживаемых файлов, и советовать другим загнать себя так же в тупиковую студию?


Ничего не имею против котирования. Оно работает. На альфа оно не работает толком ни на моем ни на другом коннекторе при определенном потоке заявок. И дело не в коннекторах а в самой альфе. Поэтому и я, и не только я от него отказались, потому как возникающие проблемы сводят на нет всю пользу котирования. Стоит отметить что я не говорил - котирование глючное и полно багов :). Нет. У него есть некоторые ограничения, скажем так. Мне они не подошли я отказался от котирования. Хотя я лично проверял и у меня оно работало после переработки тех багов с дедлоками, о которых Михаил сообщает. Сейчас нет такой проблемы в принципе (потому что все развязано через очереди), но от котирования я все же отказался.
И подтверждаю что котирование непростой алгоритм. Совершенно согласен тут с Михаилом.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 08.09.2012
Ответить


ra81
Ничего не имею против котирования. Оно работает. На альфа оно не работает толком ни на моем ни на другом коннекторе при определенном потоке заявок.


На стандартном коннекторе котирование работает. Я проверял как раз несколько месяцев назад сам.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 08.09.2012
Ответить


Oppositus
Насчет Родиона не знаю, но у меня тоже локи - см. второе сообщение темы. И коннектор Квик - стандартный, из библиотеки.


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

Oppositus

Совершенно недостаточно. Скажу более (уж не обижайтесь) - то, что лежит на сайте и скачивается с библиотекой - это не документация, это отписка. Документация выглядит примерно так: http://msdn.microsoft.co...ng.readerwriterlockslim Понятно, что написание документации такого уровня требует отдельной команды. Но текущая документация по S# API просто бесполезна. Добавьте чуть более подробные описания - и отпадет много вопросов, которые постоянно всплывают на форуме. Если бы можно было настроить котирование по документации, этой темы точно не было бы.


То, что вы смотрите - это авто генерация документации. Она не руками пишется. И в нее нет возможности добавлять расширенное описание. Смотреть надо раздел http://stocksharp.com/doc/ Да и, если уж так дело пошло, пришлите ссылку на хотя бы одну документацию по трейдинговой системе, где она полнее нашей. С МСДН сравнивать некорректно. Та документация стоит сотни миллионов долларов. Хотя, если у вас есть хотя бы один миллион, обещаем, что сделаем с помощью него документацию намного качественнее.[cool]

Oppositus

Михал, подскажите пожауйста, где и как можно посмотреть на исходники котирования? Профессиональную поддержку я пока не хочу.


Где - от меня. Как - помочь проекту. В основном это программирование. Пишите свои координаты для быстрого чатинга. Будем думать, чем сможете вы помочь.
Спасибо: Sergey Masyura

Oppositus

Фотография
Дата: 10.09.2012
Ответить


Mikhail Sukhov
То, что вы смотрите - это авто генерация документации. Она не руками пишется. И в нее нет возможности добавлять расширенное описание. Смотреть надо раздел http://stocksharp.com/doc/


"Обучающая часть" документации (там где примеры) достаточно для первого знакомства. Когда надо уже использовать библиотеку - нужно знать тонкости. Поэтому я лезу в раздел API и вижу там очень мало полезной информации, увы.

Насчет "не руками пишется". А как же богатые возможности документирования C#? http://msdn.microsoft.co...t78ax%28v=vs.71%29.aspx и http://msdn.microsoft.co...88481%28v=vs.71%29.aspx Вопрос, как я понимаю, стоит в недостатке времени, а не в невозможности добавить расширенное описание - это как раз можно сделать. Или есть технические ограничения при сборке документации из XML в CHM?

Mikhail Sukhov
Да и, если уж так дело пошло, пришлите ссылку на хотя бы одну документацию по трейдинговой системе, где она полнее нашей.


Тут вы правы, посмотрел TSLab и Qwatch - вообще финиш.

Mikhail Sukhov
Где - от меня. Как - помочь проекту. В основном это программирование. Пишите свои координаты для быстрого чатинга. Будем думать, чем сможете вы помочь.


А какие задачи есть? В этой теме http://stocksharp.com/fo...1/Tiekushchiie-zadachi/ явно не все перечислено. Я готов поучаствовать в пределах разумного времени (час-два в день, больше нету). Например, документировать чего-нибудь. Координаты или в скайп oppositus или на почту trader@devilstar.ru (почту читаю только после 20:00 Мск).
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy