Mikhail Sukhov
|
Date: 4/20/2010
А соединение терялось по какой причине?
|
|
|
|
Thanks:
|
|
|
|
|
|
Ilya Usenko
|
Date: 4/20/2010
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/20/2010
Нужно экспорт ДДЕ запускать в этом случае.
|
|
|
|
Thanks:
|
|
|
|
|
|
Ilya Usenko
|
Date: 4/21/2010
Что подразумевается под потерей соединения, если на разрыв связи(меню
- разорвать соединение) в квике ConnectionError не вылетает.
А вылетает только на закрытие квика. И смысл ReConnectionManager, если
нужно нужно запускать экспорт дде?
Не понимаю может чего я?
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/21/2010
|
|
|
|
|
Да, знаю о баге. Пофиксил еще к выходу 1.8, но не выложил - не провел
тестирования (как выяснилось - удачно получилось, потому что в
следующем релизе появится Смарт, который уж совсем имеет другую
логику, и пришлось бы переделывать). Фикс будет в следующей релизе,
честное пионерское =)
Насчет ДДЕ. Давайте обсудим. Дело в том, что ДДЕ устроен другим
образом. В связке через trans2quik.dll клиентом является робот. В
случае ДД, клиентом является сервер. Если идти от того, что узнавать о
умерших клиентах серверу, является плохим дизайном, то нужно пойти по
другом подходу. Более того, через QuikTrader.Reconnect идет
переподключение только по апи, а по ДДЕ нет. Как я уже описал здесь -
http://stockmarketdotnet.blogspot.com/2010/04/smartcom.htmlя в новой
версии добавил ITrader.ConnectionTimeOut В случае QuikTrader, если по
ДДЕ не приходит событие, он выбрасывает событие с ошибкой. Я думаю
научить ReConnectionManager ловить это событие. А вот что делать
дальше, пока не знаю. Все равно ReConnectionManager не умеет запускать
ДДЕ.
|
|
|
|
Thanks:
|
|
|
|
|
|
Ilya Usenko
|
Date: 4/22/2010
Доброе утро, Михаил!
Считаю что ReConnectionManager не нужен. Мне например.
Достаточно ловить исключение и выполнять всю последовательность
действий, как при старте робота.
Можно возложить это несложное дело на программиста.
Может двигаться в другом направлении.
Запоминать состояние робота на момент сбоя.
Но здесь тоже все непонятно.
У всех разные данные, стратегии и т.д.
Некоторый набор функций в S# 1.8 уже есть.
Пока не пользовался.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/22/2010
По Вашему описанию уже все сделано (с учетом фикса в новой версии)...
На самом деле, если не учитывать падение Квика (что у меня было разы),
то ReConnectionManager работает нормально. Если Квик не падает, то и
перезапускать ДДЕ не нужно. Даже если инет отключиться, Квик сам
переподключится. А ДДЕ при это не останавливается и просто в первую
секунду нового соединения разом все данные перетекут. Или не так?
|
|
|
|
Thanks:
|
|
|
|
|
|
Ilya Usenko
|
Date: 4/23/2010
Все равно не понял смысла ReConnectionManager.
Если квик падает, то ReConnectionManager просто ничего нее делает,
кроме как Trader.Connect
Если падает связь в работающем квике, то ReConnectionManager вообще
ничего не делает.
Квик сам восстанавливает соединение и льет данные.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 4/27/2010
Как я уже написал - фикс есть.
Сразу хочу уточнить. В ReConnectionManager я вкладывал логику не
столько самовосстанавливающегося помощника к роботу, сколько
уведомителя. Упал Квик или он перестал слать данные по ДДЕ - событие о
тайм ауте. Прервалась связь - событие о разрыве соединения. Все эти
событие более нужны не роботу, а человеку. Чтобы трейдер был оповещен
как можно раньше (вряд ли робот может восстановить потерю интернета,
здесь нужен человек, чтобы позвонить провайдеру). Не следить же 100%
за роботом весь день - есть и другие задачи.
|
|
|
|
Thanks:
|
|
|
|
|
|
Garry
|
Date: 5/2/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;
}
|
|
|
|
Thanks:
|
|
|
|
|