QuikLua ReRegisterOrder Баг~/topic/8365/quiklua-reregisterorder-bag/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T07:23:46Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/40294/На каком-то этапе работы с СтокШарпом, тебе откроется одна простая истина - что всё надо переписыват...2017-07-06T10:19:22Z2017-07-06T10:37:15ZSlepoyhttps://stocksharp.ru/users/820/info@stocksharp.ruНа каком-то этапе работы с СтокШарпом, тебе откроется одна простая истина - что всё надо переписывать под себя. Создаёшь в боте отдельную либу, в которую постепенно переписываешь все методы, которые тебе необходимы. К примеру, твой метод ReRegisterOrder(order, price, vol). На него есть исходники, которые ты просто копируешь в свою либу и правишь под свои нужды. К примеру, в твоём методе, после создания клона заявки вызывается метод ReRegisterOrder(oldOrder, order) в котором обнаружишь нижеприведённый участок, где показано как они перерегистрируют стопы:<br /><b>if (oldOrder.Type == OrderTypes.Conditional)<br />{<br /> this.CancelOrder(oldOrder);<br /> this.RegisterOrder(newOrder);<br />}</b><br />То есть, тупо проверяют тип ордера, если он условный(т.е. стоп заявка) то просто отменяют старую и тут же регают новую. Код банален и работает. С обычными заявками, там код иной, гораздо сложнее. С простыми заявками они создают там сообщение на переристрацию и т.п. Кстати, насколько мне известно, далеко не все биржевые площадки нативно поддерживают механизм переригистрации заявок. Вот этот сложный код и не робит ))). Нужен ли тебе сложный код который не робит? Я думаю, что нет. Так делай точно также как сделано со стопами, т.е. просто выпили проверку на тип заявки, т.е. выпили блок if и введи проверку на снятие заявки:<br /><b>1. Делаешь клон заявки, тупо скопируй строчку из их же метода: Order order = oldOrder.ReRegisterClone(new decimal?(price), new decimal?(volume));<br />2. Снимаешь старую заявку: this.CancelOrder(oldOrder); <br />3. Тут нужна проверка, о том что заявка снята, т.е. нужно подписаться на событие снятия и проверить снят ордер или нет<br />4. Если проверка прошла успешно, то регаешь новый ордер: this.RegisterOrder(newOrder);</b><br /><br />Тут четыре строки кода и это будет работать. Да, желательно всё это дело обезопасить в конструкции try-catch, но это необязательно. Всё будет робить и так. Вот такие дела. По-другому тут не выжить, ибо разработчики постоянно видоизменяют API и с каждым новым релизом API, у твоего бота будет что-то отваливаться. Надо всё переписывать под себя, ковыряясь в их исходинках ты сразу поймёшь насколько их код избыточен, запутан и сложен. Там такие цепочки связей и зависимостей, что мозг закипает. Неудивительно, что они раз за разом попадают на баги ))). Сами виноваты, правда расплачиваемся за это мы - простые пользователи.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/40288/При использовании ReRegisterOrder(order, price, vol) новая заявка встает как надо, но старая так и о...2017-07-05T11:38:51Z2017-07-05T11:38:51Zv3Rtexhttps://stocksharp.ru/users/62061/info@stocksharp.ruПри использовании ReRegisterOrder(order, price, vol) новая заявка встает как надо, но старая так и остается висеть, хотя должна удаляться. В итоге вместо движения одной заявки по стакану, в нем плодится целая орава неуправляемых заявок.<br />В логе луа есть 2017/07/05 12:39:07.178|Error |FixServer |System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта.<br /><br />Что не так?<br /><br />Есть ли какие нибудь не закрытые методы для отправки собственных транзакций в квик, или все сообщение с квиком закрыто и можно пользоваться только готовыми функциями типа register,cancel итд?<br /><br />зы. версия билда 4.3.24<br />кстати arqa недавно фиксила баг с move_orders в trans2quik, мб появились некие изменения в архитектуре и дело в этом?Copyright @ StockSharp Platform LLC 2010 - 2024