После восстановления соединения новые свечи не приходят
Atom Ответить
20.04.2010


S#1.8.

ReConnectionManager соединение восстанавливает,но изменения не
приходят.
В SampleSMA свечи не будут изменяться. Возможно и другие данные по dde

--
Subscription settings:http://groups.google.com/group/stocksharp/subscribe?hl=ru



Теги:


Спасибо:




16 Ответов
Mikhail Sukhov

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


А соединение терялось по какой причине?

Спасибо:

Ilya Usenko

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


Перезапустил quik

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

Mikhail Sukhov

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


Нужно экспорт ДДЕ запускать в этом случае.

Спасибо:

Ilya Usenko

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


Что подразумевается под потерей соединения, если на разрыв связи(меню
- разорвать соединение) в квике ConnectionError не вылетает.
А вылетает только на закрытие квика. И смысл ReConnectionManager, если
нужно нужно запускать экспорт дде?
Не понимаю может чего я?

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

Mikhail Sukhov

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


Да, знаю о баге. Пофиксил еще к выходу 1.8, но не выложил - не провел
тестирования (как выяснилось - удачно получилось, потому что в
следующем релизе появится Смарт, который уж совсем имеет другую
логику, и пришлось бы переделывать). Фикс будет в следующей релизе,
честное пионерское =)

Насчет ДДЕ. Давайте обсудим. Дело в том, что ДДЕ устроен другим
образом. В связке через trans2quik.dll клиентом является робот. В
случае ДД, клиентом является сервер. Если идти от того, что узнавать о
умерших клиентах серверу, является плохим дизайном, то нужно пойти по
другом подходу. Более того, через QuikTrader.Reconnect идет
переподключение только по апи, а по ДДЕ нет. Как я уже описал здесь -

http://stockmarketdotnet.blogspot.com/2010/04/smartcom.htmlя в новой
версии добавил ITrader.ConnectionTimeOut В случае QuikTrader, если по
ДДЕ не приходит событие, он выбрасывает событие с ошибкой. Я думаю
научить ReConnectionManager ловить это событие. А вот что делать
дальше, пока не знаю. Все равно ReConnectionManager не умеет запускать
ДДЕ.

Спасибо:

Ilya Usenko

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


Доброе утро, Михаил!
Считаю что ReConnectionManager не нужен. Мне например.
Достаточно ловить исключение и выполнять всю последовательность
действий, как при старте робота.
Можно возложить это несложное дело на программиста.

Может двигаться в другом направлении.
Запоминать состояние робота на момент сбоя.
Но здесь тоже все непонятно.
У всех разные данные, стратегии и т.д.
Некоторый набор функций в S# 1.8 уже есть.
Пока не пользовался.

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

Mikhail Sukhov

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


По Вашему описанию уже все сделано (с учетом фикса в новой версии)...
На самом деле, если не учитывать падение Квика (что у меня было разы),
то ReConnectionManager работает нормально. Если Квик не падает, то и
перезапускать ДДЕ не нужно. Даже если инет отключиться, Квик сам
переподключится. А ДДЕ при это не останавливается и просто в первую
секунду нового соединения разом все данные перетекут. Или не так?

Спасибо:

Ilya Usenko

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


Все равно не понял смысла ReConnectionManager.
Если квик падает, то ReConnectionManager просто ничего нее делает,
кроме как Trader.Connect
Если падает связь в работающем квике, то ReConnectionManager вообще
ничего не делает.
Квик сам восстанавливает соединение и льет данные.

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

Mikhail Sukhov

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


Как я уже написал - фикс есть.

Сразу хочу уточнить. В ReConnectionManager я вкладывал логику не
столько самовосстанавливающегося помощника к роботу, сколько
уведомителя. Упал Квик или он перестал слать данные по ДДЕ - событие о
тайм ауте. Прервалась связь - событие о разрыве соединения. Все эти
событие более нужны не роботу, а человеку. Чтобы трейдер был оповещен
как можно раньше (вряд ли робот может восстановить потерю интернета,
здесь нужен человек, чтобы позвонить провайдеру). Не следить же 100%
за роботом весь день - есть и другие задачи.

Спасибо:

Garry

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


А почему не получается запустить 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});
}

private void StopDde()
{
this.Trader.StopDde(new[] { Trader.SecuritiesTable,
Trader.OrdersTable, Trader.StopOrdersTable, Trader.MyTradesTable });
_isDdeStarted = false;
}

Спасибо:

Mikhail Sukhov

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


Версия 1.8?

Спасибо:

Garry

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


Ну да! Только у меня WinForms а не WPF, ReConnectionManager и
экземпляр QuikTrader создается при нажатии кнопки соединения. Может ли
это как-нибудь влиять? Например, какие-нибудь проблеммы с
синхронизацией или потоками? просто в GUI программировании новичек
еще.

Спасибо:

Mikhail Sukhov

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


Проверил на своей текущей версии - все нормально. Но у меня уже 2.0...
Можете привести полный текст ошибки?

Спасибо:

Garry

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


Делаю так, жму подключение(создаются все объекты), после этого
закрываю, открываю квик, 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, Func`2 keySelector, Func`2 elementSelector,
IEqualityComparer`1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement]
(IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
at Ecng.Trading.Quik.QuikTrader. (IEnumerable`1 , 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:

Спасибо:

Mikhail Sukhov

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


Да, действительно, взял 1.8 пример, переделал - на дает. Как
workaround, в обработчике сделать Reconnect а затем уже StartDde();

Спасибо:

Garry

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


Спасибо! Добавил reconnect все работает!
Спасибо:


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

loading
clippy