S#1.8.
ReConnectionManager соединение восстанавливает,но изменения не приходят. В SampleSMA свечи не будут изменяться. Возможно и другие данные по dde
-- Subscription settings:http://groups.google.com/group/stocksharp/subscribe?hl=ru
S#1.8.
ReConnectionManager соединение восстанавливает,но изменения не приходят. В SampleSMA свечи не будут изменяться. Возможно и другие данные по dde
-- Subscription settings:http://groups.google.com/group/stocksharp/subscribe?hl=ru
コメント (16)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
А соединение терялось по какой причине?
Перезапустил quik
Нужно экспорт ДДЕ запускать в этом случае.
Что подразумевается под потерей соединения, если на разрыв связи(меню
Да, знаю о баге. Пофиксил еще к выходу 1.8, но не выложил - не провел тестирования (как выяснилось - удачно получилось, потому что в следующем релизе появится Смарт, который уж совсем имеет другую логику, и пришлось бы переделывать). Фикс будет в следующей релизе, честное пионерское =)
Насчет ДДЕ. Давайте обсудим. Дело в том, что ДДЕ устроен другим образом. В связке через trans2quik.dll клиентом является робот. В случае ДД, клиентом является сервер. Если идти от того, что узнавать о умерших клиентах серверу, является плохим дизайном, то нужно пойти по другом подходу. Более того, через QuikTrader.Reconnect идет переподключение только по апи, а по ДДЕ нет. Как я уже описал здесь -
http://stockmarketdotnet.blogspot.com/2010/04/smartcom.htmlя в новой версии добавил ITrader.ConnectionTimeOut В случае QuikTrader, если по ДДЕ не приходит событие, он выбрасывает событие с ошибкой. Я думаю научить ReConnectionManager ловить это событие. А вот что делать дальше, пока не знаю. Все равно ReConnectionManager не умеет запускать ДДЕ.
Доброе утро, Михаил! Считаю что ReConnectionManager не нужен. Мне например. Достаточно ловить исключение и выполнять всю последовательность действий, как при старте робота. Можно возложить это несложное дело на программиста.
Может двигаться в другом направлении. Запоминать состояние робота на момент сбоя. Но здесь тоже все непонятно. У всех разные данные, стратегии и т.д. Некоторый набор функций в S# 1.8 уже есть. Пока не пользовался.
По Вашему описанию уже все сделано (с учетом фикса в новой версии)... На самом деле, если не учитывать падение Квика (что у меня было разы), то ReConnectionManager работает нормально. Если Квик не падает, то и перезапускать ДДЕ не нужно. Даже если инет отключиться, Квик сам переподключится. А ДДЕ при это не останавливается и просто в первую секунду нового соединения разом все данные перетекут. Или не так?
Все равно не понял смысла ReConnectionManager. Если квик падает, то ReConnectionManager просто ничего нее делает, кроме как Trader.Connect Если падает связь в работающем квике, то ReConnectionManager вообще ничего не делает. Квик сам восстанавливает соединение и льет данные.
Как я уже написал - фикс есть.
Сразу хочу уточнить. В ReConnectionManager я вкладывал логику не столько самовосстанавливающегося помощника к роботу, сколько уведомителя. Упал Квик или он перестал слать данные по ДДЕ - событие о тайм ауте. Прервалась связь - событие о разрыве соединения. Все эти событие более нужны не роботу, а человеку. Чтобы трейдер был оповещен как можно раньше (вряд ли робот может восстановить потерю интернета, здесь нужен человек, чтобы позвонить провайдеру). Не следить же 100% за роботом весь день - есть и другие задачи.
А почему не получается запустить DDE после закрытия и открытия квика? Делаю вот так: _reConnectionManager = new ReConnectionManager(this.Trader, TimeSpan.FromSeconds(10), new Range<TimeSpan>[0]); _reConnectionManager.ConnectionRestored += () => { MessageBox.Show("Соединение восстановлено"); //StopDde(); StartDde(); }; Вот такая ошибка в студии выдается при выполнении this.Trader.StartDde "Окно с заголовком 'инструменты' не было найдено." Если квик не закрывать то дде стартуется стопится сколько угодно раз.
вот процедуры private void StartDde() { _isDdeStarted = true; this.Trader.StartDde(new[] {Trader.SecuritiesTable,Trader.OrdersTable,Trader.StopOrdersTable,Trader.MTradesTable}); }
Trader.OrdersTable, Trader.StopOrdersTable, Trader.MyTradesTable }); _isDdeStarted = false; }
Версия 1.8?
Ну да! Только у меня WinForms а не WPF, ReConnectionManager и экземпляр QuikTrader создается при нажатии кнопки соединения. Может ли это как-нибудь влиять? Например, какие-нибудь проблеммы с синхронизацией или потоками? просто в GUI программировании новичек еще.
Проверил на своей текущей версии - все нормально. Но у меня уже 2.0... Можете привести полный текст ошибки?
Делаю так, жму подключение(создаются все объекты), после этого закрываю, открываю квик, ReConnectionManager пересоединяется выдается MessageBox.Show("Соединение восстановлено"); а вот на StartDde(); выдается исключение. Вот скопировал текст исключения в клипборд.
System.ArgumentException was unhandled by user code Message="Окно с заголовком 'инструменты' не было найдено.\r \nParameter name: caption" Source="Ecng.Trading.Quik" ParamName="caption" StackTrace: at Ecng.Trading.Quik.QuikTrader. (String ) at Ecng.Trading.Quik.QuikTrader. (DdeTable ) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (IEnumerable
1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (IEnumerable1 source, Func2 keySelector, Func2 elementSelector) at Ecng.Trading.Quik.QuikTrader. (IEnumerable1 , Action`2 ) at Ecng.Trading.Quik.QuikTrader.StartDde(DdeTable[] ddeTables) at WindowsFormsApplication1.Form1.StartDde() in E:\bcs\C#\my \WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 73 at WindowsFormsApplication1.Form1.<button1_Click>b__2() in E: \bcs\C#\my \WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 151 at Ecng.Common.DelegateHelper.SafeInvoke(Action handler) at Ecng.Trading.Algo.ReConnectionManager. () InnerException:Да, действительно, взял 1.8 пример, переделал - на дает. Как workaround, в обработчике сделать Reconnect а затем уже StartDde();
Спасибо! Добавил reconnect все работает!