Форум. StockSharphttps://stocksharp.ru/handlers/atom.ashx?category=forum&page=231Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T16:45:05Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/topic/1440/Стратегия в C# для WLD5.2011-03-12T21:10:56Z2011-03-12T21:10:56Zgars9999https://stocksharp.ru/users/142/info@stocksharp.ruТогда еще вопрос. Есть стратегия в C# для WLD5. У Вас никто не пишет роботов на заказ для СмартКом?https://stocksharp.ru/topic/1439/x64 version available2011-03-12T18:28:05Z2011-03-12T18:28:05ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABEoSgPQckMg9Vy6amK5z0h4DRhbYyzE22zXBPbag4fphaxbqPYF2K3_om5I48p7B0p8KHrUHONonDymdr-WKFbmAfHRhksTOdZ8e8X-DSAsQ" title="ftp://ftp.rts.ru/pub/FORTS/test/Plaza2/P2_ClientGate1.10.9_TEST64.exe">ftp://ftp.rts.ru/pub/FOR...entGate1.10.9_TEST64.exe</a>https://stocksharp.ru/topic/1438/Комментарии и предложения2011-03-11T12:07:44Z2011-03-11T12:07:44Zskuvvhttps://stocksharp.ru/users/28621/info@stocksharp.ruЗаметил пару нюансов по PlazaTrader:<br />1)<br /><div class="code"><strong>Код</strong><div class="innercode"><br />_plazaStreamManager = new PlazaStreamManager(_plazaConnectionPool, TRequestType.RT_COMBINED_DYNAMIC, 1000);<br /></div></div><br />Почему рекваест тайп фиксированный? надо конкретно задавать, например у меня так было:<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />"FORTS_FUTAGGR20_REPL" - RT_REMOTE_ONLINE<br />"FORTS_FUTTRADE_REPL" - RT_REMOTE_ONLINE<br />"FORTS_FUTINFO_REPL" - RT_COMBINED_DYNAMIC<br />"FORTS_FUTCOMMON_REPL" - RT_REMOTE_ONLINE<br />"FORTS_POS_REPL" - RT_COMBINED_DYNAMIC<br />"FORTS_PART_REPL" - RT_COMBINED_DYNAMIC<br />"FORTS_VM_REPL" - RT_COMBINED_DYNAMIC<br /></div></div><br />Допустим если FORTS_FUTCOMMON_REPL задать в RT_COMBINED_DYNAMIC, то при реконнекте будет перекачиваться весь поток заново.<br />+Revision тоже надо указывать в некоторых потоках.<br />2) в PlazaStreamManager void Run()<br />Не обрабатывает состояния типа DS_STATE_ERROR или DS_STATE_CLOSE, те в случае чего будет затык и поток будет висеть закрытым или с ошибкой.<br />Я для себя брал реализацию с примера(могу выложить если что)<br />PS У меня несколько сместились приоритеты - придется задержаться на квике, но постораюсь не пропадать.https://stocksharp.ru/topic/1437/Рефакторинг метаданных2011-03-10T21:50:28Z2011-03-10T21:50:28ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ruУбрал перечисление PlazaTableTypes. Совершенно бесмысленная информация. Вместо этого за основу взял то что раньше называлось PlazaColumns.Table. Теперь везде именуется едино - SystemTableName. Оно равно НазваниеПотока/НазваниеТаблицы.<br /><br />Не закончил до конца. Залил пока не компилябельное. Если есть желающие закончить - посмотрите как пример PlazaUsdOnlineColumns.https://stocksharp.ru/topic/1436/Несовпадение инструкции и реальности (Настройка таблиц quik)2011-03-10T20:13:36Z2011-03-10T20:13:36ZDreablinhttps://stocksharp.ru/users/27706/info@stocksharp.ruЮзаю инструкцию <a href="http://stocksharp.com/doc/help/html/5c13da7b-b6e4-4fd4-958a-66c93c58b941.htm " title="http://stocksharp.com/doc/help/html/5c13da7b-b6e4-4fd4-958a-66c93c58b941.htm ">http://stocksharp.com/do...4-958a-66c93c58b941.htm </a>для настройки квика.<br />Таблица "инструменты" , 4 поле - статус. Но в квике нет прсото "статус", там есть "стату клиринга" и "статус торговли инструментом", которые само собой не подходят (проверено Verifier'ом).<br />А еще Verifier требует там 19 полей в отличаи от инструкции, где всего 7.<br />Подскажите, какие там поля? Или я где-то не прав?https://stocksharp.ru/topic/1435/Набор индикаторов2011-03-10T20:13:02Z2011-03-10T20:13:02Zrusshttps://stocksharp.ru/users/567/info@stocksharp.ruЗдравствуйте.<br />Сталкиваюсь с проблемой написания индикаторов на C#. <br />Может есть смысл сделать какой-то набор готовый и вложить в апи, например такой набор:<br />SMA, EMA, WMA, FRAMA, RSI, MACD, Bollinger Bands, ADX, Parabolic Sar. Если кто уже реализовывал, поделитесь пожалуйста.https://stocksharp.ru/topic/1434/[3.0.14] Перерегистрация заявок Smart2011-03-10T18:05:49Z2011-03-10T18:05:49Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ru[3.0.14]<br /><br />При перерегистрации новый Order может остаться в состоянии None навечно.<br /><br />Сценарий 1<br /><br />1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170<br />2) 29.32 Пришел OrdersChanged на Active <br />3) 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)<br />4) 29.98 Пришел OrdersChanged на Active<br />5) 30.40 Посылаем ReRegisterOrder на sell 194620@2. Т.е. меняется только объем. Получаем TransID=71653170<br /><br />После этого 10 секунд никаких событий. А ожидается что 71653170 придет Done V=1,B=1, а 71653170 придет OrdersChanged=Active.<br /><br />Отправляет ли S# MoveOrder для только измененного объема?<br /><br />В качестве дополнения еще один формат лога;)<br />Легенда: <br />A=REG call RegisterOrder<br />A=MYTRADE event NewMyTrade<br />A=STATE event OrdersChanged<br />A=POSCHG event PositionsChanged<br />TID=TransactionID, ID = Order.ID (или Trade.ID), V=Volume, B=Balance.<br />POS=позиция возвращаема PositionManager. PrevID=ID перерегистрируемого ордера.<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><br />T=2011031020012924,A=REG,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=None,STATUS=,POS=0<br />T=2011031020012932,A=MYTRADE,ID=13313305,OID=378434295,TID=71653169,DIR=Buy,P=194580,V=1,OP=194580,OV=1,OB=0,STATE=Done<br />T=2011031020012932,A=STATE,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=ReceiveByServer<br />T=2011031020012943,A=ORD,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted<br />T=2011031020012946,A=POSCHG,ID=2011031020012946,P=RIH1,V=1<br />T=2011031020012990,A=POSCHG,ID=2011031020012990,P=RIH1,V=1<br />T=2011031020012998,A=STATE,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted<br />T=2011031020013040,A=REREG,ID=0,TID=71653171,PrevID=378434509,DIR=Sell,P=194620,V=2,B=2,STATE=None,STATUS=,POS=1<br /></div></div><br /><br /><br />Сценарий 2. Лога нет, но суть такая.<br /><br />Пусть перерегистрируем заявку1. Актуальная информация о ней - что она Active. <br />Запрос на перереристрацию уходит. Новая заявка Заявка2. За то время пока он идет по перерегистрируемой заявке1 случается полный филл. К нам приходит Done по заявке1. А вот по заявке2 никакого Fail не придет в этом случае. Она так и останется в состоянии None.<br /><br /><br /><br />Плюс такой вопрос. точнее несколько.<br /><br />1) Правильно ли я понимаю, что OrdersChanged, NewMyTrade и PositionsChanged все асинхронные и могут прийти в любом порядке?<br />2) Из этого следует проблема, что к моменту OrderChanged на Done информация в PositionManager.Position может еще не обновится. Правильно ли я понимаю что она обновляется по NewMyTrade?<br />3) Правильно ли что PositionsChanged берет инфу о позиции напрямую из Смарта а не из пересчета по NewMyTrade?<br /><br /><br />С уважением.<br /><br /><br />https://stocksharp.ru/topic/1433/[3.0.13] RealTimeTestTrader котирование2011-03-10T10:05:26Z2011-03-10T10:05:26Zvvthttps://stocksharp.ru/users/34/info@stocksharp.ruПри запуске стратегии с котированием через RealTimeTestTrader<QuikTrader> вылезает ошибка:<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">Регистрация новой заявки на Sell с ценой 198755 и объемом 1.<br />Заявка 0 на Sell отправлена с ценой 198755 объемом 1.<br />Цена текущей 198755 и лучшей 198750.<br />Котирование заявки 0 на Sell с ценой 198755 объемом 1.<br />System.ArgumentException: Заявка не имеет информацию о шлюзе.<br /> в Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(Order order)<br /> в Ecng.Trading.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Func`<br />1 getNewPrice, Func`1 getNewVolume, Boolean isForts)<br /> в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()<br /> в Ecng.Trading.Algo.Strategies.Strategy.#=q_7aAU8b_zEypCQ8s7GI9rpJ4uiSQ4jqTKo<br />3$1bhmZoo=.#=q1xDZDIblA8UZbmo72Ys1aA==()<br />Стратегия останавливается.<br />Котирование закончилось.<br />Стратегия остановлена.</div></div>https://stocksharp.ru/topic/1432/IsExportRunning == false after reConnect2011-03-10T06:59:23Z2011-03-10T06:59:23ZGreene-nskhttps://stocksharp.ru/users/27932/info@stocksharp.ruМихаил, добрый день!<br /><br />У меня такая небольшая проблемка..<br /><br />Я подписан на событие:<br /><div class="code"><strong>Код</strong><div class="innercode"><br /> // подписываемся на событие успешного соединения<br /> this.Trader.Connected += () =><br /> {<br /> this.IsConnected = true;<br /> Log.Out("Соединение установлено.", LogLevel.notice);<br /><br /> // запускаем экпорт, если не запущен<br /> if (!this.Trader.IsExportRunning)<br /> {<br /> Log.Out("Запускаем экспорт " + Const.TraderType + " ...", LogLevel.notice);<br /> this.Trader.StartExport();<br /> }<br /><br /> _ConnectHandle.Set();<br /> };<br /></div></div><br /><br />Также установлены ReConnectionSettings.<br />Первоначальный коннект и старт экспорта происходит отлично. Затем, если произошел дисконнект и происходит повторное соединение, Trader.IsExportRunning почему-то имеет значение false (хотя нигде остановки экспорта я явно не делал). Соответственно опять запускается экспорт и я получаю очень много ошибок вида "System.ArgumentException: Элемент с тем же ключом уже был добавлен." через Trader.ProcessDataError.<br /><br />Это IsExportRunning неправильно работает или я что не так делаю?<br /><br />Ошибка:<br /><div class="code"><strong>Код</strong><div class="innercode"><br />09.03.2011 19:38:10 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.InvalidOperationException: Timout detected. check your internet connectivity or event handler code<br />09.03.2011 19:38:30 [OpenWealth.StockSharp.TraderInitializator.Trader_ConnectionError] ERROR: Ошибка соединения System.InvalidOperationException: Соединение не было установлено.<br />09.03.2011 19:38:34 [OpenWealth.StockSharp.TraderInitializator.<Init>b__2] Соединение установлено.<br />09.03.2011 19:38:34 [OpenWealth.StockSharp.TraderInitializator.<Init>b__2] Запускаем экспорт Smart ...<br />09.03.2011 19:38:35 [OpenWealth.StockSharp.TraderInitializator.Trader_ProcessDataError] ERROR: Ошибка обработки данных System.ArgumentException: Элемент с тем же ключом уже был добавлен.<br /> в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)<br /> в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)<br /> в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)<br /> в Ecng.Collections.SynchronizedDictionary`2.Add(TKey key, TValue value)<br /> в Ecng.Trading.Smart.SmartTrader.#=q51k2unzMIsNyRtIj9eqUHAWG1vpOTm_EnhcELxwzk18=.#=qHYtNp3Oq0wi5iYKFl4EY208vdoxZ0LK9yJJy8eAVByo=(Security #=q7quMwu_Bzmw8O0CkI7XjJA==)<br /> в Ecng.Trading.Algo.BaseTrader.GetSecurity(String id, Func`2 createSecurity, Action`1 changeSecurity)<br /> в Ecng.Trading.Algo.BaseTrader.GetSecurity(String id, Action`1 changeSecurity)<br /> в Ecng.Trading.Smart.SmartTrader.#=qdrdBGX21A5eLENJf3ptKAA==(Int32 #=qvYc1SRNnVYaugo8TTapgNQ==, Int32 #=qeO4QX3nBzQgyDnwMfZtKrA==, String #=qBMKdqfg2OQ5yRrqr1gNjTQ==, String #=qyUb925f$nwA0AepJn$J03g==, String #=qDglujU417hVywZLPioBx7Q==, String #=qXExfZs10qQGmZ1Dg_jDB2A==, Int32 #=qvxoDwHTOJ4ySbsvV0xlD_g==, Int32 #=qEjVNe5vbQz$sy_ks5IXngQ==, Double #=qPgAqEqCLUVYYnAV6IFPEPA==, Double #=q5yIeWw1FAkzyUxEssGOdOA==, String #=qsKD9O1f$5Ocp9io7L4HTJg==, String #=qrdP_YbKfA6M$TJ$t_t8h5A==, Nullable`1 #=qVzECTYxPjudgjMW0vBjqMA==, Double #=qAtSy5Brikaa2NebNjmmVv8h1G$cj4cpWya5$9U0XsXw=)<br /> в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14](Action`14 handler, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)<br /> в Ecng.Trading.Smart.SmartComWrapper.#=qAYx9wRCrRwCsEvMIqJuSgZnn1mBfEPtkmHJ_XDbfM8Q=.#=qGbWrt3y25WxRTlQc1U4TP2QX1j4hCZ0w7O3q6nyaxRA=()<br /> в Ecng.Trading.Algo.BaseTrader.ProcessEvents(Action handler)<br /></div></div>https://stocksharp.ru/topic/1431/Отработка Connect / Reconnect2011-03-09T21:48:01Z2011-03-09T21:48:01Zigorkhttps://stocksharp.ru/users/6303/info@stocksharp.ruМихаил, в соответствии с примерами, дизайним форму, на которой две кнопки Connect и Disconnect. Полезной нагрузки нет. <br /><br />Код кнопки Connect:<br /><br />....<br /><br /> if (this.objMainTrader == null)<br /> {<br /><br /> this.objMainTrader = new SmartTrader(strLogin, strPWD, objIPEndPoint);<br /> this.objMainTrader.Connected += () => { this.SmartConnectStatusSucced(); };<br /> this.objMainTrader.ConnectionError += error => { this.SmartConnectStatusFailed(error); };<br /> this.objMainTrader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);<br /><br /> this.objMainTrader.ReConnectionSettings.ConnectDisconnectTimeOutInterval = TimeSpan.FromSeconds(60);<br /><br /> this.objMainTrader.ReConnectionSettings.ReConnectingAttemptCount = 1000; // здесь пробовал -1, на поведение не влияет<br /><br /> this.objMainTrader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;<br /> this.objMainTrader.ReConnectionSettings.ConnectionAttemptError += error =><br /> { this.SmartReConnectStatusFailed(error); };<br /><br /> this.objMainTrader.ReConnectionSettings.ConnectionRestored += () =><br /> { this.SmartReConnectStatusSucced(); };<br /><br /> }<br /><br /> // try to connect to the server<br /> if (!this.objMainTrader.IsConnected)<br /> this.objMainTrader.Connect(); <br /> <br />.....<br /><br />Все функции, которые вызываются, тупо создают соединение с базой SQL Server и пишут сообщение с именем вызванной функции. Итого, что происходит. <br /><br />При нажатии кнопки Connect код аккуратно отрабатывает, и SmartConnectStatusSucced тоже. <br />Далее, на виртуальной машине (Tools -> Settings) отключаем сетевую карту. Очень быстро отрабатывает SmartConnectStatusFailed, в журнал записывается следующее сообщение:<br /><br /><Timeout detected. Check your internet connectivity or event handler code>. <br /><br />Далее я ожидаю, что в соответствии с настройками ReconnectionSettings, objMainTrader будет пытаться производить повторное подключение. Ждем 5 минут, но ничего не происходит. Выставленные в отладчике точки прерывания тоже не срабатывают. <br /><br />Обратно возвращаемся к настройкам виртуальной машины, и возвращаем на место сетевой адаптер. Сеть восстанавливается, но объект этого не замечает. <br /><br />Прошу подсказать, что делаю не так. Возможно, нужно запустить какие-то операции, обращаться к объекту и т.п., чтобы код переподключения заработал?<br /><br />P.S. Библиотеки версии 3.0.8. <br />P.P.S. Готов выложить проект, скриншоты и how to reproduce, но форум не позволяет. <br />P.P.P.S. Может ли причина заключаться в том, что тесты производятся в ночное время? :-) Если да, то исчезнет ли проблема, если подменить WorkingTime?<br /><br />Спасибо. <br />https://stocksharp.ru/topic/1430/Hydra и свечи2011-03-09T17:26:35Z2011-03-09T17:26:35Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruДобрый день, Михаил.<br />Просматривал возможности гидры и возник невольный вопрос: а почему в ней нет интерфейса для сохранения свечек? По крайней мере, было бы удобно чтобы все данные в одном месте с одним интерфейсом. Или это было обусловлено тем что свечи преимущественно качаются с финама ввиде файлов .csv?https://stocksharp.ru/topic/1429/Какие основные шаги нужно выполнить ...2011-03-09T16:44:06Z2011-03-09T16:44:06Zs_kudhttps://stocksharp.ru/users/6261/info@stocksharp.ru У меня вопросы по интеграции и теханализу ...<br />Михаил, подскажите, please, какие основные шаги (процедуры) нужно выполнить, чтобы данные о срабатывании индикаторов из систем тех. анализа можно было вводить в управляющие программы на С# ... (На начальном этапе работы это было бы оправданно ...).<br /> К примеру из Метастока ... В нем данные о срабатывании индикаторов можно представить в виде Глобальной переменной типа GL.dll или в виде внещней библиотеки типа MSX DLL ...<br /> С#, конечно, могуч ... Но новичкам приходится сложно ... <br />Такое количество объемной литературы ... и такое множество деталей и вариантов ... <br />https://stocksharp.ru/topic/1428/Ошибка DDE [3.0.13]2011-03-09T09:58:40Z2011-03-09T09:58:40Zvvthttps://stocksharp.ru/users/34/info@stocksharp.ruОшибка DDE [Quik Junior] [3.0.13]<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">System.ArgumentException: Order с номером '372938456' дублируется в полученном D<br />DE пакете.<br />Имя параметра: item<br /> в Ecng.Trading.Quik.QuikTrader.#=qEHdBg2$OEu8s0sWQpQfm$bpbIfa49v2VoXF0gM0cByM<br />=[TItem,TId](Dictionary`2 #=qOvPfBieWX6zq24YZKYcoo5GbnbmCU7GlPrWyxai1QcA=, TItem<br /> #=qtTAjGQ9d7yZcpQQbj2TK9w==, IList`1 #=qHdMGT40iovM1cOmw3t6rMw==, TId #=qR5gUDO<br />piqm7X5ZgBgQaOew==)<br /> в Ecng.Trading.Quik.QuikTrader.#=qwzmGrKnG$0lhDHOD3BPyMIybX4QS$hB_jhFvK7U7Sqw<br />=.#=qUB3dZfs7sbw0FgNACNbYPQ==(IList`1 #=qqU62oa8eKJncQ6fTiq2qJQ==, Func`2 #=quby<br />eVzaDZSN7cVFcKooW3w==)<br /> в #=qOZqGto7Ls4dPruNydBEWEr1zYbqb3mru2frkCDOhXC2iotNePY0rY_6bLmHhr2Xm.#=qdE1H<br />iiOYgpCrNWXJqh6o$g==(DdeTable #=qwPP8r23KKR7tSnFhGjyFQw==, IList`1 #=qMlzkONMhb7<br />7s00f8Tr$V4Q==, Action`2 #=qJ23mOaJY8FLjm6U$mb2kUA==, Action`1 #=qVRSinSLfNgIiDF<br />WIhUc0DA==)</div></div><br /><br /><a href='http://content.screencast.com/users/vvt/folders/Jing/media/8381fa54-ef93-4134-b6b3-acb6be277af1/2011-03-09_1214.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="http://content.screencast.com/users/vvt/folders/Jing/media/8381fa54-ef93-4134-b6b3-acb6be277af1/2011-03-09_1214.png" style='max-width: 600px;' alt=""/></a><br /><br />Заявки 372938456 и 372938670 были выставлены на дневной сессии 05.03.11 с переносом, а исполнены на вечерней сессии, код класса у них разный SPBFUT и FUTEVN.<br /><br />https://stocksharp.ru/topic/1427/Hydra: поддержка украинской биржы2011-03-07T20:19:27Z2011-03-07T20:19:27ZLaferthttps://stocksharp.ru/users/26871/info@stocksharp.ruПланируется ли создание плагина для украинской биржы, аналогичного плагину ртс ?<br />Зазипованые файлы со сделками лежат по адресу <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAACaK5r_6-rt2TnDAO9P0MDkZKa3ikovKadBvxjs23_9cCepWjkpvYpho3idOQhXr6k" title="ftp://ftp.ux.ua/pub/info/statforts/
">ftp://ftp.ux.ua/pub/info/statforts/
</a><br />К сожалению, сделки украинского фьючерса можно достать только по этому адресу в dbf, или в тексте порциями по 5000 записей по адресу <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABXGExIofrAc-nqGVpwwmWmTN4OMxwPQdZmKk3oA7ZPCNgj5Fd2uu5JBNwN7El6Mk4" title="http://www.ux.ua/ru/marketdata/export.aspx, ">http://www.ux.ua/ru/marketdata/export.aspx, </a>что очень неудобно.<br />Формат аналогичен ртс.https://stocksharp.ru/topic/1426/Hydra: exception при выгрузке сделок в текстовый файл2011-03-07T20:13:28Z2011-03-07T20:13:28ZLaferthttps://stocksharp.ru/users/26871/info@stocksharp.ruПри компиляции в x86 при попытке выгрузить сделки за 10 дней по фьючу на индекс РТС занимаемая оперативная память растет до 1300 мб, а потом выбивает исключение out of memory (кстати, файл так и не создается). <br /><br />При компиляции в x64 занимаемая память растет за 3 ГБ, но ничего не происходит, файл не создается также.<br /><br />При попытке выгрузить 1 день память переваливает за 1ГБ, но файл создается и все работает. <br /><br />https://stocksharp.ru/topic/1425/BaseTrader.MartketTime, предложение2011-03-06T14:57:06Z2011-03-06T14:57:06ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruВначале немного предыстории - в последнее время заметил задержки в получение времени средствами QuikTrader.MartketTime - в квике в ходе торгов секунды зачастую идут с задержкой 1-3 секунды, да и отсчёт идёт не каждую секунду. В общем не очень хорошо, на мой взгляд, использовать данное решение.<br /><br />Смарт, насколько я понимаю, использует время компьютера.<br /><br />Поэтому появилась идея использовать не системное время (т.к. оно может:<br />- быть не синхронизировано<br />- быть не московским,<br />....), а московское время из интернета.<br /><br />Т.е. обращаться к стандартными NTP серверам и опрашивая их получать московское время.<br /><br />Поискав в инете наткнулся на множество тем, выбрал решение отсюда как наиболее простое: <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAA2ekziqpglRxbXK4EiWaFCj15CYquX_8lm8rVB_EHiEH0HboIA9dOwcBQ9_KILRf_3VCTzPsew29COghLmnbhgzFbgFnjfyTMyXhxsbCTefipZzoorvnMICfgvleckuCUgJmoI9iDiJelFQ0kIcktX" title="http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/8670212a-4157-4e91-b5dd-44934ca31b9e">всемогущий MSDN</a><br /><br />Немного его отредактировал под наши нужны, получил следующее:<br /><br /><div class="code"><strong>Код</strong><div class="innercode">using System;<br />using System.Net;<br />using System.Net.Sockets;<br /><br />namespace Robots.Entities<br />{<br /> /// <summary><br /> /// Static class to receive Moscow time from a NTP server.<br /> /// </summary><br /> public static class NtpClient<br /> {<br /> /// <summary><br /> /// Gets Moscow DateTime from <paramref name="ntpServer"/>.<br /> /// </summary><br /> /// <param name="ntpServer">The hostname of the NTP server.</param><br /> /// <returns>A DateTime containing Moscow current time.</returns><br /> public static DateTime GetMoscowTime(string ntpServer = "time-a.nist.gov")<br /> {<br /> var address = Dns.GetHostEntry(ntpServer).AddressList;<br /><br /> if (address == null || address.Length == 0)<br /> throw new ArgumentException(string.Format("Could not resolve ip address from '{0}'.", ntpServer), "ntpServer");<br /><br /> var ep = new IPEndPoint(address[0], 123);<br /> return GetMoscowTime(ep);<br /> }<br /><br /> /// <summary><br /> /// Gets Moscow DateTime form <paramref name="ep"/> IPEndPoint.<br /> /// </summary><br /> /// <param name="ep">The IPEndPoint to connect to.</param><br /> /// <returns>A DateTime containing Moscow current time.</returns><br /> private static DateTime GetMoscowTime(IPEndPoint ep)<br /> {<br /> var s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);<br /> s.Connect(ep);<br /><br /> var ntpData = new byte[48]; // RFC 2030<br /> ntpData[0] = 0x1B;<br /> for (var i = 1; i < 48; i++)<br /> ntpData[i] = 0;<br /><br /> s.Send(ntpData);<br /> s.Receive(ntpData);<br /><br /> const byte offsetTransmitTime = 40;<br /> ulong intpart = 0;<br /> ulong fractpart = 0;<br /><br /> for (var i = 0; i <= 3; i++)<br /> intpart = 256 * intpart + ntpData[offsetTransmitTime + i];<br /><br /> for (var i = 4; i <= 7; i++)<br /> fractpart = 256 * fractpart + ntpData[offsetTransmitTime + i];<br /><br /> var milliseconds = (intpart * 1000 + (fractpart * 1000) / 0x100000000L);<br /> s.Close();<br /><br /> var timeSpan = TimeSpan.FromMilliseconds(milliseconds);<br /><br /> var dateTime = new DateTime(1900, 1, 1);<br /> dateTime += timeSpan;<br /><br /> var moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");<br /> var offsetAmount = moscowTimeZone.GetUtcOffset(dateTime);<br /> var networkDateTime = dateTime + offsetAmount;<br /><br /> return networkDateTime;<br /> }<br /><br /> /// <summary><br /> /// Gets TimeSpan offset.<br /> /// </summary><br /> /// <returns>Gets offset between local time and Moscow Time.</returns><br /> public static TimeSpan GetMoscowTimeOffset()<br /> {<br /> try<br /> {<br /> var moscowDateTime = GetMoscowTime();<br /> return moscowDateTime - DateTime.Now;<br /> }<br /> catch(Exception)<br /> {<br /> return new TimeSpan(0);<br /> }<br /> }<br /> }<br />}<br /></div></div><br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">NtpClient.GetMoscowTime("time.nist.gov")</div></div> возвращает текущее московское время :)<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">NtpClient.GetMoscowTimeOffset()</div></div> - смещение с московским временем.<br /><br />Предложение состоит в том, чтобы использовать данное время для определения BaseTrader.MarketTime.<br />1 раз - при инициализации получать московское время и просто подсчитать первоначальную разницу между московским временем и локальным.<br />Затем установить его в MarketTimeOffset.<br /><br /><br />Вот текущее использование, которое я сегодня добавил в моего робота:<br /><div class="code"><strong>Код</strong><div class="innercode"> public class OwnQuikTrader : QuikTrader<br /> {<br /> public OwnQuikTrader(string path, string ddeServer, string dllName) :<br /> base(path, ddeServer, dllName)<br /> {<br /> base.MarketTimeOffset = NtpClient.GetMoscowTimeOffset();<br /> }<br /><br />//...<br /><br /> public override DateTime MarketTime<br /> {<br /> get { return DateTime.Now; }<br /> }<br /> }</div></div>https://stocksharp.ru/topic/1424/Ошибка при попытке отправки заявки на следующий день по таймеру2011-03-05T17:20:49Z2011-03-05T17:20:49Za.dobrynhttps://stocksharp.ru/users/28111/info@stocksharp.ruВот такая ошибка<br /><a href='http://s1.ipicture.ru/uploads/20110305/VrFsP05E.jpg' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="http://s1.ipicture.ru/uploads/20110305/VrFsP05E.jpg" style='max-width: 600px;' alt=""/></a><br />Если тестировать (переводить дату компа на завтра и на нужное время), заявки успешно отправляются. А если "вживую", то такая ошибка. В чем может быть дело? Учебная биржа ммвбhttps://stocksharp.ru/topic/1423/SampleSmartSMA2011-03-05T12:53:09Z2011-03-05T12:53:09Zromanhttps://stocksharp.ru/users/27830/info@stocksharp.ruНа примере SampleSmartSMA попробовал разобраться как работать с этой библиотекой.<br />1. Если поменять таймфрейм на SmartTimeFrames.Minute1 то _candleManager.GetTimeFrameCandle(base.Security, base.TimeFrame, _nextTime - base.TimeFrame); почти всегда возвращает null. Если время на локальном компьютере отличается от времени Trader.MarketTime то со 100% вероятностью это происходит.<br />2. ProcessDataError - часто возникает событие сo stackoverflowexception.<br /><br />Как с этим бороться?https://stocksharp.ru/topic/1422/Рабочие дни для бирж, 2011 год2011-03-05T08:49:11Z2011-03-05T08:49:11ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruСоздал метод, который проставляет рабочие дни на выходных и выходные на рабочих для наших бирж (2011 год).<br />Пользуйтесь кому необходимо, чтобы информацию вновь не искать :)<br /><br /><div class="code"><strong>Код</strong><div class="innercode"> private static void UpdateWorkingDays()<br /> {<br /> var specialWorkingDays = new[] { new DateTime(2011, 3, 5) };<br /> var specialHolidays = new[]<br /> {<br /> new DateTime(2011, 1, 3),<br /> new DateTime(2011, 1, 4),<br /> new DateTime(2011, 1, 5),<br /> new DateTime(2011, 1, 6),<br /> new DateTime(2011, 1, 7),<br /> new DateTime(2011, 1, 10),<br /> new DateTime(2011, 2, 23),<br /> new DateTime(2011, 3, 7),<br /> new DateTime(2011, 3, 8),<br /> new DateTime(2011, 5, 2),<br /> new DateTime(2011, 5, 9),<br /> new DateTime(2011, 6, 13),<br /> new DateTime(2011, 11, 4)<br /> };<br /><br /> Exchange.Rts.WorkingTime.SpecialWorkingDays = specialWorkingDays;<br /> Exchange.Rts.WorkingTime.SpecialHolidays = specialHolidays;<br /><br /> Exchange.Micex.WorkingTime.SpecialWorkingDays = specialWorkingDays;<br /> Exchange.Micex.WorkingTime.SpecialHolidays = specialHolidays;<br /> }</div></div>https://stocksharp.ru/topic/1421/Exception при генераци XML отчёта [3.0.11]2011-03-04T16:52:02Z2011-03-04T16:52:02ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruНа 3.0.11 следующий exception (стакан экспортируется):<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">System.ArgumentException was unhandled<br /> Message=Котировка для направления Sell отсутствует.<br />Parameter name: bestPair<br /> Source=Ecng.Trading.Algo<br /> ParamName=bestPair<br /> StackTrace:<br /> at Ecng.Trading.Algo.TraderHelper.GetMarketPrice(MarketDepthPair bestPair, OrderDirections direction, Unit priceDelta, MarketPriceTypes priceType)<br /> at Ecng.Trading.Algo.TraderHelper.GetMarketPrice(MarketDepth depth, OrderDirections direction, Unit priceDelta, MarketPriceTypes priceType)<br /> at Ecng.Trading.Algo.TraderHelper.GetMarketPrice(Security security, OrderDirections direction, Unit priceDelta, MarketPriceTypes priceType)<br /> at Ecng.Trading.Algo.TraderHelper.GetPnL(Security security, Int64 position)<br /> at Ecng.Trading.Algo.PnL.BasePnLManager.#=q836kuXrCbvnCKEJj5Cbj2g==(KeyValuePair`2 #=qhm9jo7HetgxyijS5fWjtCA==)<br /> at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()<br /> at System.Linq.Enumerable.Sum(IEnumerable`1 source)<br /> at Ecng.Trading.Algo.PnL.BasePnLManager.#=q2do1oc9dZRDiwTtYLiYssg==(SynchronizedDictionary`2 #=qWPvwsgC0Ugb3v9rxLZzh4w==)<br /> at Ecng.Collections.CollectionHelper.SyncGet[TCollection,TResult](TCollection collection, Func`2 func)<br /> at Ecng.Trading.Algo.PnL.BasePnLManager.get_PnL()<br /> at Ecng.Trading.Algo.Reporting.XmlStrategyReport.Generate()<br /> at Robots.MainWindow.MainWindow.GenerateStrategyReports(Strategy strategy) in c:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots\Robots\MainWindow\MainWindow.xaml.cs:line 65<br /> at Robots.MainWindow.MainWindow.OnClosing(CancelEventArgs e) in c:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots\Robots\MainWindow\MainWindow.xaml.cs:line 130<br />.......<br /> InnerException: <br /></div></div>