← Atrás

исключение в MarketQuotingStrategy

собственно текст:

System.ArgumentException: Транзакции 'CLASSCODE=SPBFUT; SECCODE=RIM0;TRANS_ID=48817801;ACTION=KILL_ORDER;ORDER_KEY=562984869;'не была зарегистрирована.Причина Вы не можете снять данную заявку'. Имя параметра: transaction Txt в . (String, OrderStatus&,Int32&|,Double&,String&-) в Ecng.Trading.Quik.QuikTrader.(Order, TransactionBuilder~,Boolean|,Boolean) в Ecng.Trading.Quik.QuikTrader.CancelOrder(Order order) в Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(ITrader trader, Order order) в Ecng.Trading.Algo.TraderHelper.ReRegisterOrder(ITrader trader, Order oldOrder, Func~1 getNewPrice, Boolean isForts) в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy.-()

частота обновления котировок - 1 секунда

¿Le resultó útil este tema?

Compartir tema

Comentarios (19)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Mikhail Sukhov
Mikhail Sukhov

А по логу ее котировщик снимал? Параллельно код никакой не снимал? Что с ней в итоге произошло?

dart
dart Autor

Котировщик снимал. Параллельного кода снимающего заявку нет. В итоге заявку снял, но дальше выставлять не стал. Бывает что выставил заявку, она исполнилась, но это сообщение тем не менее вылетает. При этом статус Runned остается. Может дело в частоте? Когда была 1 минута - не было такого.

Mikhail Sukhov
Mikhail Sukhov

А он по логу ее снимал один раз или два раза?

dart
dart Autor

Вот лог: 23:42:10.5596140 SS_RIM0SmaStrategy runned 23:46:12.4906634 MQS_RIM0Цена текущей 156445 и лучшей 156445. 23:46:13.4906787 MQS_RIM0Цена текущей 156445 и лучшей 156430. 23:46:13.4906787 MQS_RIM0Регистрация новой заявки Buy с ценой 156430 и объемом 3. 23:46:13.8944349 MQS_RIM0Заявка зарегистрирована Buy под номером 568405098 с ценой 156430 объемом 3 ID транзакции 85298145. 23:46:14.9119504 MQS_RIM0Цена текущей 156430 и лучшей 156430. 23:46:15.9119657 MQS_RIM0Цена текущей 156430 и лучшей 156430. 23:46:16.9169811 MQS_RIM0Цена текущей 156430 и лучшей 156430. 23:46:17.9169964 MQS_RIM0Цена текущей 156430 и лучшей 156430. 23:46:18.9170116 MQS_RIM0Цена текущей 156430 и лучшей 156430. 23:46:19.9170269 MQS_RIM0Цена текущей 156430 и лучшей 156405. 23:46:19.9170269 MQS_RIM0Котируемая заявка 568405098 исполнилась. 23:46:19.9170269 MQS_RIM0MarketQuotingStrategy stopping 23:46:20.9170422 MQS_RIM0Котирование заканчивается на заявке 568405098. 23:46:20.9170422 MQS_RIM0MarketQuotingStrategy stopped 23:47:21.8242228 SS_RIM0System.ArgumentOutOfRangeException: Неправильное значение для ожидаемой цены. Имя параметра: estimatedPrice Фактическое значение было 0. в Ecng.Trading.Algo.BaseSlippageManager. ..ctor(Order , Double ) в Ecng.Trading.Algo.BaseSlippageManager. . (Order ) в Ecng.Collections.CollectionHelper.SafeAdd[K,V](IDictionary2 dictionary, K key, Func2 handler) в Ecng.Trading.Algo.BaseSlippageManager.OnNewOrder(Order order) в System.Action1.Invoke(T obj) в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в Ecng.Trading.Algo.Strategy.AddOrder(Order order) в SampleSMA.SmaStrategy.OnProcess() в D:\Bsn\Stock\Soft\Ecng.Trading \StockSharp_1.8 - mySTRAT1-fRTS - TakeProf\Sources\SampleSMA \SmaStrategy.cs:строка 201 в Ecng.Trading.Algo.Strategy. () 23:47:21.8242228 SS_RIM0SmaStrategy stopping 23:47:22.4217320 MQS_RIM0MarketQuotingStrategy stopping 23:47:22.4217320 MQS_RIM0Котирование заканчилось. 23:47:22.4217320 MQS_RIM0MarketQuotingStrategy stopped 23:47:23

dart
dart Autor

У меня ещё вопрос: как работать с колонкой "Операция" таблицы "Все сделки". Считываю её нормально, когда вывожу значение - пишется Buy или Sell. Что с ней делать дальше? Пробую if (trade.OrderDirection == "Buy") - выдаёт ошибку.

dart
dart Autor

Вот ещё один лог: 00:52:38.4612808 SS_RIM0SmaStrategy runned 00:56:39.6651908 MQS_RIM0Цена текущей 156100 и лучшей 156080. 00:56:39.6651908 MQS_RIM0Регистрация новой заявки Buy с ценой 156080 и объемом 3. 00:56:40.4789532 MQS_RIM0Заявка зарегистрирована Buy под номером 568512447 с ценой 156080 объемом 3 ID транзакции 3074575. 00:56:41.4927187 MQS_RIM0Цена текущей 156080 и лучшей 156120. 00:56:41.4927187 MQS_RIM0Котирование заявки Buy под номером 568512447 с ценой 156080 объемом 3 ID транзакции 3074575. 00:56:42.8227391 MQS_RIM0Перекотирование прошло успешно для заявки Buy под номером 568512510 с ценой 156120 объемом 3 ID транзакции 3074577. 00:56:43.8240044 MQS_RIM0Цена текущей 156120 и лучшей 156105. 00:56:43.8240044 MQS_RIM0Котирование заявки Buy под номером 568512510 с ценой 156120 объемом 3 ID транзакции 3074577. 00:56:44.7852690 MQS_RIM0Перекотирование прошло успешно для заявки Buy под номером 568512590 с ценой 156105 объемом 3 ID транзакции 3074579. 00:56:45.7852843 MQS_RIM0Цена текущей 156105 и лучшей 156130. 00:56:45.7852843 MQS_RIM0Котирование заявки Buy под номером 568512590 с ценой 156105 объемом 3 ID транзакции 3074579. 00:56:47.0878042 MQS_RIM0Перекотирование прошло успешно для заявки Buy под номером 568512647 с ценой 156130 объемом 3 ID транзакции 3074581. 00:56:48.0890695 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:49.0890848 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:50.0891001 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:51.1141158 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:52.1141310 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:53.1141463 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:54.1141616 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:55.1141769 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:56.1141922 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:57.1142074 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:58.1142227 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:56:59.1142380 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:57:00.1142533 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:57:01.1142686 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:57:02.1142838 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:57:03.1142991 MQS_RIM0Цена текущей 156130 и лучшей 156130. 00:57:04.1143144 MQS_RIM0Цена текущей 156130 и лучшей 156110. 00:57:04.1143144 MQS_RIM0Котирование заявки Buy под номером 568512647 с ценой 156130 объемом 3 ID транзакции 3074581. 00:57:04.9130766 MQS_RIM0System.ArgumentException: Транзакции 'CLASSCODE=SPBFUT; SECCODE=RIM0; TRANS_ID=3074582; ACTION=KILL_ORDER; ORDER_KEY=568512647;' не была зарегистрирована. Причина 'Вы не можете снять данную заявку'. Имя параметра: transactionTxt в . (String , OrderStatus& , Int32& , Double& , String& ) в Ecng.Trading.Quik.QuikTrader. (Order , TransactionBuilder , Boolean , Boolean ) в Ecng.Trading.Quik.QuikTrader.CancelOrder(Order order) в Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(ITrader trader, Order order) в Ecng.Trading.Algo.TraderHelper.

Mikhail Sukhov
Mikhail Sukhov

Спасибо, уже говорили -http://groups.google.ru/group/stocksharp/browse_thread/thread/8910990083e35efd

. Будет фикс в следующей версии.

Mikhail Sukhov
Mikhail Sukhov

Странно, по всей видимости шалит брокер (если ничего параллельно не происходит с заявкой и ею распоряжается только робот). Времени прошло предостаточно - 17 секунд. Попробуйте включить FORTS перестановку, может она поможет.

Mikhail Sukhov
Mikhail Sukhov

if (trade.OrderDirection == OrderDirections.Buy)

dart
dart Autor

Спасибо, ещё один момент. Сегодня попробовал одним контрактом на боевом квике S#1.8. На ФОРТС не получилось: пишет коллекция котировок пуста. На всякий случай прикладываю лог: 14:15:05.8750000 SS_SBRF-6.10SmaStrategy runned 14:16:08.5937500 MQS_SBRF-6.10System.ArgumentException: Коллекция котировок пуста. Имя параметра: quotes в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(IEnumerable`1 quotes, ITrader trader, Order currentOrder) в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(MarketDepth depth, OrderDirections orderDirection, ITrader trader, Order currentOrder) в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(Security security, OrderDirections orderDirection, ITrader trader, Order currentOrder) в Ecng.Trading.Algo.QuotingStrategy.get_FilteredQuotes() в Ecng.Trading.Algo.QuotingStrategy.GetBestPrice() в Ecng.Trading.Algo.MarketQuotingStrategy.GetNewPrice() в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy. () 14:16:08.5937500 MQS_SBRF-6.10MarketQuotingStrategy stopping 14:16:10.5312500 MQS_SBRF-6.10Котирование заканчилось. 14:16:10.5312500 MQS_SBRF-6.10MarketQuotingStrategy stopped 14:19:12.5937500 MQS_SBRF-6

При этом на акциях на Лукойле всё получилось. Думаю что это связано с тем, что у этого брокера обозначение класса бумаги на ФОРТС другие. Например, вместо RIM0 пишется RTS-6.10. То есть если раньше стакан назывался "RTS-6.10 Котировки", теперь он называется "RTS-6.10- SPBFUT". Теперь в названии два тире получается.

Mikhail Sukhov
Mikhail Sukhov

Да, это интересное поведение. А код бумаги поменять возможно через настройки Квика? Например, прописать алиас.

dart
dart Autor

Насколько знаю, код бумаги брокер задаёт. Насчёт того чтобы алиас прописать в квике не знаю насколько это возможно. По-крайней мере я с этим уже сталкивался, когда настраивал связку Омега-квик. Человек, автор адаптера, в конце концов стал вместо тире звёздочку использовать. Получился универсальный адаптер для всех брокеров.

Mikhail Sukhov
Mikhail Sukhov

Ок, я сделаю это настраиваемым. Но оно будет только в следующей версии.

dart
dart Autor

Тишина какая-то в блоге, наверно все уже всё давно освоили, сейчас прибыль молча считают.)) Такой вопрос задам. Если вызывать NewTrades в OnProcess, то данные получатся рваные, так как онпроцесс вызывается дискретно. Можно как-то сделать чтоб данные о всех сделках считывались непрерывно, параллельно с течением программы, записывались в буфер нужной мне длины, чтоб в любой момент времени мгновенно я имел бы к нему доступ.

Mikhail Sukhov
Mikhail Sukhov

Блог зависит от меня. А вот форум - уже от пользователей.

А зачем вызывать NewTrades? Его Strategy сам вызывает. Про рваные не понял.

dart
dart Autor

У меня стратегия имеет ту же структуру что и SMASample. В onprocess вызываю newtrades, набираю статистику нужной длины, на основе её принимается решение buy, sell или ничего не делать. Понимаю что корявая схема, но по-другому пока не получилось. Вот и спрашиваю, как можно сделать чтобы статистика всех сделок набиралась неперерывно и имелся к ней уже мгновенный доступ.

ЗЫ где-то есть форум? На мой взгляд, форум вещь нужная, так как продукт хороший, но спросить можно только у первоисточника, то есть у вас. Постоянно вас напрягать не совсем хорошо. Даже по Омеге, ВЛД есть целые форумы, в S# же требуется квалификация как программиста, не ниже а выше чем в популярных платформах, соответственно у людей вопросов будет как минимум не меньше. Сорри за много буковок.

Mikhail Sukhov
Mikhail Sukhov

Есть событие ITrader.NewTrades - по описанию оно то, что нужно.

А как Вы вызываете NewTrades из OnProcess? Приведите кусок кода.

Форум - а вот он, где мы сейчас переписываемся. Омега и ВЛД - это поп софт. У меня пока уровень популярности не такой. Да и какой смысл во множестве форумах. Там свои собственные языки. А у меня - .NET. Форумов по нему - как все омеги велсы и мета трейдеры вместе взятые да помноженные на 100 =) Книжек - тонна. Статей в интернете - столько же. Неужели не хватает?

dart
dart Autor
   protected override bool OnProcess()
    {
        // если наша стратегия в процессе остановки
        if (base.ProcessState == StrategyProcessStates.Stopping)
        {
            // отменяем стратегию
            base.Orders.Where(o => o.State ==

OrderStates.Active).ForEach(base.Trader.GuarantyCancelOrder); // так как все активные заявки гарантированно были отменены, то возвращаем false return false; } base.Trader.NewTrades += Trades => { foreach (var Trade in Trades) { var trade = Trade; if (trade.Security.Code == "RIM0") {

Mikhail Sukhov
Mikhail Sukhov

А зачем Вы каждый раз подписываетесь на событие NewTrades? OnProcess вызывается довольно часто, и внутри него не нужно подписываться на события ITrader. Делайте это при старте программы. И при таком раскладе у Вас приложение умрет от бесконечного события о поступивших сделках.