исключение в MarketQuotingStrategy
Atom Ответить
15.04.2010


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

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 секунда


Теги:


Спасибо:




19 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.04.2010
Ответить


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

Спасибо:

dart

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


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

Спасибо:

dart

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


Вот лог:
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](IDictionary`2
dictionary, K key, Func`2 handler)
в Ecng.Trading.Algo.BaseSlippageManager.OnNewOrder(Order order)
в System.Action`1.Invoke(T obj)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 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

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


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

Автор топика
Спасибо:

dart

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


Вот ещё один лог:
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

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


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

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

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


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

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


if (trade.OrderDirection == OrderDirections.Buy)

Спасибо:

dart

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


Спасибо, ещё один момент. Сегодня попробовал одним контрактом на
боевом квике 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

Фотография
Автор статей Программист Трейдер
Дата: 20.04.2010
Ответить


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

Спасибо:

dart

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 20.04.2010
Ответить


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

Спасибо:

dart

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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 05.05.2010
Ответить


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

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

Спасибо:

dart

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


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.05.2010
Ответить


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

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

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

Спасибо:

dart

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


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

Фотография
Автор статей Программист Трейдер
Дата: 06.05.2010
Ответить


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

Спасибо:


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

loading
clippy