API 4.2.8 при использовании lua коннектора Security.Name приходит в нижнем регистре. Если IsDDE = true, то приходит в верхнем. Непорядок..
Всем доброго времени суток! Я совсем недавно начал изучать S# API и столкнулся с проблемой недостаточного описания в документации. Если разработчики S# API читают этот пост, то примите, пожалуйста, какие-нибудь меры для того, чтобы рядовой программист, не знакомый с вашим API, изучив вашу документацию и примеры, смог самостоятельно написать приложение без прохождения обучения и обращения на форум. В данный момент я не разобрался с тем, каким образом работать с несколькими квиками. Во время прочтения документации возникло много вопросов, на которые, на мой взгляд, должен быть ответ в документации и примерах. Вот отрывок документации: 1) В папку с программой необходимо поместить два файла TRANS2QUIK.dll (пример работает с 2-мя Quik-ами). Например, один будет иметь оригинальное название, а второй будет переименован TRANS2QUIK_2.dll. Это обязательное требование работы с несколькими Quik-ами из одной программы: один Quik - одна dll. 2) После этого, идет создание нескольких QuikTrader. Через свойство QuikTrader.DdeServer передается уникальное имя для DDE сервера, а через QuikTrader.DllName путь к TRANS2QUIK.dll: var quikTrader1 = new QuikTrader { Path = path1, DdeServer = \"quik1\" }; var quikTrader2 = new QuikTrader { Path = path2, DdeServer = \"quik2\", DllName = @\"TRANS2QUIK_2.dll\" }; // если вторая dll находится в другой папке, то можно создать шлюз, указав путь к dll // var quikTrader2 = new QuikTrader { Path = path2, DdeServer = \"quik2\", DllName = @\"Folder1\\TRANS2QUIK_2.dll\" }; Что за файл TRANS2QUIK.dll? В папке квика его нет, в папке References в S# API этого файла тоже нет. В примере, который демонстрирует работу с несколькими квиками (StockSharp_4.2.3.14\\Samples\\Quik\\SampleFewQuiks) этого файла тоже нет. Допустим, этот файл есть. Куда его нужно копировать? Варианты: в корень проекта Visual Studio, где лежит файл типа Microsoft Visual Studio Solution; в папку, где код робота и папки bin и obj; в папку, где лежит исполняемый файл робота (bin\\Debug); в папку с квиком. Нужно ли этот файл добавлять в свойствах проекта в разделе \"References\"? Какое правило указания пути к этому файлу? В примере написано @\"TRANS2QUIK_2.dll\". Это значит, что этот файл лежит там же, где и exe-шник? Ещё в примере написано @\"Folder1\\TRANS2QUIK_2.dll\". Это означает, что файл лежит в папке, а папка там же, где и exe-шник? А если этот файл на другом диске, то как нужно это прописывать? Разъясните мне, пожалуйста, эти вопросы.
System.OverflowException: Value was either too large or too small for an Int32. at System.Decimal.ToInt32(Decimal d) at System.Decimal.op_Explicit(Decimal value) at #=qZ104p5z2eov1_mYO_k1HL3qd433raEyXKQiRbsnKmNglEOVZ4DA3_64Cm5Ht5TpL.#=qIXf66HzCEmtO1Wdjhp9WUw==(#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA= #=qdAmiLVrcUhz6m_nNxImNqQ==) at #=q5EdaFwPV1ERNKALP2WC1eH4yJqcY9G4z0Sq7Lv5xjXCmEqb6p_7ia$WJJRFMkJfwI3eez87iQcNEy8XasBGtRQ==.#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA=.MoveNext() at System.Linq.Enumerable.d__14`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at StorageResave.Resavers.SecurityChangeResaver.Resave(String sourcePath, String destinationPath, DateTime from, DateTime to) in c:\\Projects\\StockSharpTests\\trunk\\StorageResave\\StorageResave\\Resavers\\SecurityChangeResaver.cs:line 79 Маркет данные с изменениями инструмента для воспроизведения ошибки прилагаю. Инструмент: FEES@TQNL, дата: 06.01.2014, записано через Смартком.
System.ArgumentException: Decimal byte array constructor requires an array of length four containing valid decimal bytes. at System.Decimal.SetBits(Int32[] bits) at #=q7hbTCONvIO4muPuc2eMrnaMieTHfWWwAqKMgNtaGvW0rMY4sOXFfNR53eoGxLVfcrl_efCSw291uSuOv6cNuRg==.#=qhWibxfqJAv212d1e6qnM3vkcSVgiY772TRtJqTO3Jqk=(BitArrayReader #=q6QpFnl8OvFEEJikOGoD5_Q==, Decimal #=qt7Urm8KiV6PAhnGjy5djog==) at #=q7hbTCONvIO4muPuc2eMrnaMieTHfWWwAqKMgNtaGvW0rMY4sOXFfNR53eoGxLVfcrl_efCSw291uSuOv6cNuRg==.#=qh5FLVCQ5dIRJc0BphWDyM0m_BBjh$nReKXvfuc9o5go=[T](BitArrayReader #=qHCKz9fHxXoknhhWwNqSJSg==, #=qek3V_aKLd71R0$hcSuVtT7ZCVQB71cVJlM93QvvrAA6blcWdRdJogknlwwv7sX0E #=qI$GePiDpmN0KYiz6EeUdTQ==) at #=qZ104p5z2eov1_mYO_k1HL3qd433raEyXKQiRbsnKmNglEOVZ4DA3_64Cm5Ht5TpL.#=qIXf66HzCEmtO1Wdjhp9WUw==(#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA= #=qdAmiLVrcUhz6m_nNxImNqQ==) at #=q5EdaFwPV1ERNKALP2WC1eH4yJqcY9G4z0Sq7Lv5xjXCmEqb6p_7ia$WJJRFMkJfwI3eez87iQcNEy8XasBGtRQ==.#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA=.MoveNext() at System.Linq.Enumerable.d__14`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at StorageResave.Resavers.SecurityChangeResaver.Resave(String sourcePath, String destinationPath, DateTime from, DateTime to) in c:\\Projects\\StockSharpTests\\trunk\\StorageResave\\StorageResave\\Resavers\\SecurityChangeResaver.cs:line 79 Маркет данные с изменениями инструмента для воспроизведения ошибки прилагаю. Инструмент: GMKN@TQBS, дата: 27.12.2013, записано через Смартком.
System.ArgumentException: Поле для кода 0 не найдено. at #=qZ104p5z2eov1_mYO_k1HL3qd433raEyXKQiRbsnKmNglEOVZ4DA3_64Cm5Ht5TpL.#=qheoz9sYupuN9QbbAibSfZA==(#=qUWCbw99GO2K4UY9lwMnfETli5zX9M7v44RC64qzmb0RRi3zYlZMNqw8bou1PRpzF #=qxy2e9U8j_Kn13z1qunwnew==, Int32 #=qCOKqhO5T$9HB5fRcvhN5rw==) at #=qZ104p5z2eov1_mYO_k1HL3qd433raEyXKQiRbsnKmNglEOVZ4DA3_64Cm5Ht5TpL.#=qIXf66HzCEmtO1Wdjhp9WUw==(#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA= #=qdAmiLVrcUhz6m_nNxImNqQ==) at #=q5EdaFwPV1ERNKALP2WC1eH4yJqcY9G4z0Sq7Lv5xjXCmEqb6p_7ia$WJJRFMkJfwI3eez87iQcNEy8XasBGtRQ==.#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA=.MoveNext() at System.Linq.Enumerable.d__14`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at StorageResave.Resavers.SecurityChangeResaver.Resave(String sourcePath, String destinationPath, DateTime from, DateTime to) in c:\\Projects\\StockSharpTests\\trunk\\StorageResave\\StorageResave\\Resavers\\SecurityChangeResaver.cs:line 79 Маркет данные с изменениями инструмента для воспроизведения ошибки прилагаю. Инструмент: FEES@TQNL, дата: 18.06.2013, записано через Смартком.
System.InvalidOperationException: Неизвестное изменение 1028783254 инструмента. at #=qZ104p5z2eov1_mYO_k1HL3qd433raEyXKQiRbsnKmNglEOVZ4DA3_64Cm5Ht5TpL.#=qIXf66HzCEmtO1Wdjhp9WUw==(#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA= #=qdAmiLVrcUhz6m_nNxImNqQ==) at #=q5EdaFwPV1ERNKALP2WC1eH4yJqcY9G4z0Sq7Lv5xjXCmEqb6p_7ia$WJJRFMkJfwI3eez87iQcNEy8XasBGtRQ==.#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA=.MoveNext() at System.Linq.Enumerable.d__14`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at StorageResave.Resavers.SecurityChangeResaver.Resave(String sourcePath, String destinationPath, DateTime from, DateTime to) in c:\\Projects\\StockSharpTests\\trunk\\StorageResave\\StorageResave\\Resavers\\SecurityChangeResaver.cs:line 79 Встречается наиболее часто. Изменения по 18 инструментам записывались около 1,5 лет. Эта ошибка встречается в примерно 50 раз. Маркет данные с изменениями инструмента для воспроизведения ошибки прилагаю. Инструмент: FEES@TQNL, дата: 24.12.2013, записано через Смартком.
Хранилище записывалось разными версиями S# API с конца 2012 г через SmartCom. Изменения инструментов за некоторые даты из хранилищ не читаются. Решил перегнать те изменения инструментов что читаются в новое хранилище. Для информации разработчикам библиотеки привожу ошибки, которые появляются при чтении: ```plain \"Поле для кода 0 не найдено\", \"Неизвестное изменение инструмента\", \"Value was either too large or too small for an Int32\", \"Specified argument was out of the range of valid values\", \"Decimal byte array constructor requires an array of length four containing valid decimal bytes\",
System.NotSupportedException: Дробный объем не поддерживается. at #=q7hbTCONvIO4muPuc2eMrnaMieTHfWWwAqKMgNtaGvW0rMY4sOXFfNR53eoGxLVfcrl_efCSw291uSuOv6cNuRg==.#=qh5FLVCQ5dIRJc0BphWDyM0m_BBjh$nReKXvfuc9o5go=[T](BitArrayReader #=qHCKz9fHxXoknhhWwNqSJSg==, #=qek3V_aKLd71R0$hcSuVtT7ZCVQB71cVJlM93QvvrAA6blcWdRdJogknlwwv7sX0E #=qI$GePiDpmN0KYiz6EeUdTQ==) at #=q7hbTCONvIO4muPuc2eMrnbBm4ev$cPQy5X$dmJ8XYnfADUufPeSVMuvDEz3nh_1$.#=qIXf66HzCEmtO1Wdjhp9WUw==(#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA= #=qMxJoFFjaxj2cUZSg6sTgZQ==) at #=q5EdaFwPV1ERNKALP2WC1eH4yJqcY9G4z0Sq7Lv5xjXCmEqb6p_7ia$WJJRFMkJfwI3eez87iQcNEy8XasBGtRQ==.#=qQ$9pKiVYmuQlxy1UDxDyklIy7h1WI$VD32oe4WzImoA=.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at StorageResave.Resavers.TradeResaver.Resave(String sourcePath, String destinationPath, DateTime from, DateTime to) in c:\\Projects\\StockSharpTests\\trunk\\StorageResave\\StorageResave\\Resavers\\TradeResaver.cs:line 49 Маркет данные со сделками прилагаю. Инструмент: FEES@TQNL, дата: 04.04.2013, записано через Смартком.
StockSharp 4.2.3 Создаю заявки с помощью Trader.RegisterOrder, они прекрасно регистрируются и появляются в терминале. Но снять их не получается. Пробовал несколько способов: запоминал Order в переменную и пробовал удалять его брал ордера из Trader.Orders / Trader.StopOrders и пробовал удалять их пробовал удалять все ордера на текущем счету по данному инструменту, вызов типа: Trader.CancelOrders(null, Portfolio, null, null, Security); В логе постоянно получаю след картину 2014/06/30 20:31:42.826| |QuikTrader|CancelOrder: 73389503/0 Покупка Цена=131070 Объем=1 Сост=Pending Бал=1 2014/06/30 20:31:42.826| |QuikTrader|CancelOrder: 73389504/0 Продажа Цена=128390 Объем=1 Сост=Pending Бал=1 Прекрасно снимает ордера простой вызов Trader.CancelOrders(). В этом случае вывод в лог другой 2014/06/30 20:31:43.191| |QuikTrader|CancelOrder: 73390405/0 Покупка Цена=130970 Объем=1 Сост=Pending Бал=1 2014/06/30 20:31:43.191| |QuikTrader|CancelOrder: 73390405/2386060201 Покупка Цена=130970 Объем=1 Сост=Active Бал=1 2014/06/30 20:31:43.841| |QuikTrader|Order changed: 73390405/2386060201 Покупка Цена=130970 Объем=1 Сост=Done Бал=1 Т.е. ордер переходит в Active и потом в Done. В чем может быть проблема? Я не могу даже удалить все ордера для одного инструмента, а все сразу - пожалуйста.
Доброго дня. В HistoryEmulationConnector при задании ```csharp connector.MarketDataAdapter.SessionHolder.MarketTimeChangedInterval = timeFrame событие MarketTimeChanged приходит с интервалом исключительно в два timeFrame.(версия Api 4.2.6,хотя в 4.2.3.21 тоже самое) Данный факт наблюдается в том числе и в SampleHistoryTest