Здравствуйте.
Я использую MQS для открытия позиции, как дочернюю стратегию. В процессе работы котирования произошла ошибка, и котирование осталось висеть дочерней стратегией. Но при этом, перед ошибкой, позиция по инструменту была открыта. Мне надо сделать так, чтобы дочерняя MQS закончилась и самоудалилась из базовой стратегии, даже при ошибке. В данном же случае MQS переходит в ProcessState == Stopping и висит в родительской стратегии. Мне же нужно удалять дочерние стратегии после совершения сделок, или после ошибок. То есть - если стратегия отработала или ошиблась, то она должна удалиться.
Как это сделать самым лучшим способом? Под "лучшим способом" я понимаю в порядке убывания лучшести:
- При создании стратегии выставить какое-нибудь свойство, которое указывает стратегии убиться в любом нештатном случае
- Написать обработчик Error, в котором прибивать стратегию самостоятельно. (И что там примерно писать?).
- Следить за дочерней стратегией из базовой, и выпиливать дочернюю, если что не так.
Лог утерян. В общем же, там было следующее:
- Стратегия отправила ордер, тот зарегистрировался.
- Изменился стакан или что-то еще произошло, и стратегия начала перерегистрацию ордера
- В процессе перерегистрации заявка исполнилась.
- Новый ордер ушел на биржу
- ФОРТС ответил "нехватка по лимитам"
- 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);
}
Comentários (14)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Ситуация повторилась. Получил лог. Все оказалось еще хуже, чем в прошлый раз! MQS почему-то зависла - судя по всему (потребление процессора 0) на каком-то объекте синхронизации. И повесила намертво всю мою программу. Потом отвисла. Но, сами понимаете, это не дело. Обратите внимание на время - MQS висела почти пять минут. Все это время в робот не приходили сделки и пр. После ошибки MQS осталась висеть в состоянии Stopping. Это было раз.
Два оказадлось тоже ничего себе. Я отдал приказ на покупку 1 контракта. А MQS пыталась купить два! Видимо, стратегия заботится о том, чтобы у меня было больше прибыли, ггг.
Есть ли какие-нибудь рекомендации, как этого - зависания и неверного объема, избежать?
не используй mqs. я ее не использую еще с 4.0.22. Там тоже были проблемы. Вхожу по маркету. Ну или напиши свою которая будет работать так как ты хочешь.
Я склоняюсь... Но MQS позволяет не писать обработку ордеров, ошибок, перерегистрацию и пр. Запустил - и она сама все сделала. Так намного продуктивнее.
Если бы все работало как следует то да. А так я уже написал обработку ордеров, Ошибок перерегистрацию и все такое. Запускаю и все само делается. Как будет все работать без ошибок буду пользоваться.
Котирование - сложная вещь. Сложная вовсе не потому, что ее так придумали, а потому что управление заявками довольно не простая задача. Со стороны всегда кажется, что это довольно просто, и проще переписать. На деле все далеко не так.
Ты, Родион, используешь Альфа Директ. Где по определению нет быстрой операции перестановки заявок. Котирование на такой медленной платформе работает нормально. Единственно, что оно не совместимо с написанным тобой коннектором. Я уже писал, что у тебя локи, которые использовать не нужно. Ты неправильно их используешь, что приводит к дедлокам. Котирование тут не виновато, раз ты решил написать свой коннектор. Раз он криво написан, не вини, пожалуйста, СтокШарп.
Еще котирование довольно сложно настраивать. Отвечать всем как это делать нет физически времени (на это существует дока). Теперь еще и нет смысла, когда у нас тех поддержкой занимаются профессионально. Документации, возможно, недостаточно, чтобы описать весь принцип работы котирования. Поэтому тут всегда есть вариант, использовать стандартное или написать самому. К варианту "использовать" прилагается опцион с получение сырцов котирования. К варианту "написать" прилагается куча геморроя с неисполнением заявок, частичным исполнением и т.д. Еще раз повторюсь, если бы котирование было простой задачей - оно было бы давно реализовано и работало как часы.
И последнее. Всегда можно помощь обменять на помощь. Помогаете - получаете в ответ. Конечно, если хочется пойти самым сложным путем (написать дэдлочный коннектор, написать непонятно какое котирование😂), то тут да, путь единственный - все писать самому, все делать самому. Только потом чур не удивляться, что у вас наблюдаются ошибки, которых нет у других. Но я лично не понимаю смысла этого подхода. Тоесть, вместо того, чтобы потратить несколько дней, будет потрачено несколько недель. А в чем смысл? Чтобы продолжать сидеть на старом коде, с кучей не поддерживаемых файлов, и советовать другим загнать себя так же в тупиковую студию?
Насчет Родиона не знаю, но у меня тоже локи - см. второе сообщение темы. И коннектор Квик - стандартный, из библиотеки.
Совершенно недостаточно. Скажу более (уж не обижайтесь) - то, что лежит на сайте и скачивается с библиотекой - это не документация, это отписка. Документация выглядит примерно так: http://msdn.microsoft.com/ru-ru/library/system.threading.readerwriterlockslim Понятно, что написание документации такого уровня требует отдельной команды. Но текущая документация по S# API просто бесполезна. Добавьте чуть более подробные описания - и отпадет много вопросов, которые постоянно всплывают на форуме. Если бы можно было настроить котирование по документации, этой темы точно не было бы.
Михал, подскажите пожауйста, где и как можно посмотреть на исходники котирования? Профессиональную поддержку я пока не хочу.
Ничего не имею против котирования. Оно работает. На альфа оно не работает толком ни на моем ни на другом коннекторе при определенном потоке заявок. И дело не в коннекторах а в самой альфе. Поэтому и я, и не только я от него отказались, потому как возникающие проблемы сводят на нет всю пользу котирования. Стоит отметить что я не говорил - котирование глючное и полно багов :). Нет. У него есть некоторые ограничения, скажем так. Мне они не подошли я отказался от котирования. Хотя я лично проверял и у меня оно работало после переработки тех багов с дедлоками, о которых Михаил сообщает. Сейчас нет такой проблемы в принципе (потому что все развязано через очереди), но от котирования я все же отказался. И подтверждаю что котирование непростой алгоритм. Совершенно согласен тут с Михаилом.
На стандартном коннекторе котирование работает. Я проверял как раз несколько месяцев назад сам.
Без логов абсолютно не понятно, что произошло. Стратегия не останавливается до тех пор, пока не будут получены финальные сообщения по ее заявкам.
То, что вы смотрите - это авто генерация документации. Она не руками пишется. И в нее нет возможности добавлять расширенное описание. Смотреть надо раздел http://stocksharp.com/doc/ Да и, если уж так дело пошло, пришлите ссылку на хотя бы одну документацию по трейдинговой системе, где она полнее нашей. С МСДН сравнивать некорректно. Та документация стоит сотни миллионов долларов. Хотя, если у вас есть хотя бы один миллион, обещаем, что сделаем с помощью него документацию намного качественнее.😎
Где - от меня. Как - помочь проекту. В основном это программирование. Пишите свои координаты для быстрого чатинга. Будем думать, чем сможете вы помочь.
"Обучающая часть" документации (там где примеры) достаточно для первого знакомства. Когда надо уже использовать библиотеку - нужно знать тонкости. Поэтому я лезу в раздел API и вижу там очень мало полезной информации, увы.
Насчет "не руками пишется". А как же богатые возможности документирования C#? http://msdn.microsoft.com/en-us/library/5ast78ax%28v=vs.71%29.aspx и http://msdn.microsoft.com/en-us/library/aa288481%28v=vs.71%29.aspx Вопрос, как я понимаю, стоит в недостатке времени, а не в невозможности добавить расширенное описание - это как раз можно сделать. Или есть технические ограничения при сборке документации из XML в CHM?
Тут вы правы, посмотрел TSLab и Qwatch - вообще финиш.
А какие задачи есть? В этой теме http://stocksharp.com/forum/2001/Tiekushchiie-zadachi/ явно не все перечислено. Я готов поучаствовать в пределах разумного времени (час-два в день, больше нету). Например, документировать чего-нибудь. Координаты или в скайп oppositus или на почту trader@devilstar.ru (почту читаю только после 20:00 Мск).
Тоже сегодня столкнулся с тем, что стратегия дублирует заявки. Работаю на смарте. Делать свою реализацию? Мог бы посмотреть имеющуюся, если бы доступ был. После дублирования стратегия перестала работать. Как теперь уходить от компа? )
Может стоит лог приложить? Или нам догадываться надо в очередной раз?
Сегодня снова. Лог:
А где проблемное место в логе?