Публичный бета тестинг
Atom Ответить
17.05.2011


Выложил PlazaTrader на http://box.net/plaza Исходники самого PlazaTrader, исходники примера, Plaza dll и Plaza + S# dll (последнее не нужно, если уже используется S#).

В следствие бета тестирования буду обновлять только библиотеку Ecng.Trading.Plaza.dll. В релиз войдет все. Налетаем.Smile

upd Теперь PlazaTrader часть дистрибутива S#, поэтому просто качайте последнюю версию http://box.net/stocksharp/ . Сборка называется StockSharp.Plaza.dll

Теги:


Спасибо:




66 Ответов
< 1 2 3 
frontman

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


Я обычно рядом с такими вещами если они в коде пишу "It's magic" :D
Спасибо:

Alexander

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


frontman Перейти
Я обычно рядом с такими вещами если они в коде пишу "It's magic" :D


Как вы определяете тормоза \ задержки? Дайте конкретные цифры и логгирование событий, чтоб понимать о чём речь.
Спасибо:

frontman

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


Александр. Я просто запускаю SampleGUI для версии 4.0 и более позних версий.
И открываю окно заявок.
И вот если в версии 4.0 новые заявки приходят даже раньше чем в квике(в программе) они появляются, то в версиях более поздних они приходям через несколько минут! Что для плазы вообще не приемлемо...
Я и тот и тот проект профайлером просматривал. В версиях позднее 4.0 40% времени тратиться на строчку
сonnection.ProcessMessage(...);
Спасибо:

Alexander

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


frontman Перейти
Александр. Я просто запускаю SampleGUI для версии 4.0 и более позних версий.
И открываю окно заявок.
И вот если в версии 4.0 новые заявки приходят даже раньше чем в квике(в программе) они появляются, то в версиях более поздних они приходям через несколько минут! Что для плазы вообще не приемлемо...
Я и тот и тот проект профайлером просматривал. В версиях позднее 4.0 40% времени тратиться на строчку
сonnection.ProcessMessage(...);


естественно ProcessMessage стал вызываться чаще, т.к. таймаут снизился.
1) добавьте логирование прихода заявок чтоб было понятно. посмотрите сколько времени тратится от подачи заявки до её регистрации.
2) попробуйте StreamTimeout установить не в 100мс, а побольше.
Спасибо:

frontman

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


1) Заявки регистрируются вне программы. Он не то что новые он старые не качает норм.
2) А зачем? Код то не меняется. Я все го лишь заменяю библиотеку. Со старой библиотекой(на самом деле библиотека вроде та же на вид))) и 100 мс все норм работает , а с новой и 10мс не.
Спасибо:

Alexander

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


frontman Перейти
1) Заявки регистрируются вне программы. Он не то что новые он старые не качает норм.
2) А зачем? Код то не меняется. Я все го лишь заменяю библиотеку. Со старой библиотекой(на самом деле библиотека вроде та же на вид))) и 100 мс все норм работает , а с новой и 10мс не.


Interop.P2ClientGateMTA32.dll не менялся ни разу с тех пор как положили в TFS. Посмотрите по хистори.
Без логгирования и реальных результатов - пока лишь разговоры.

Нет тестов и логов - нет проблемы в данном случае :)
Спасибо:

frontman

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


Согласен. И вашу позицию понимаю.
Ну мне достаточно того что я теперь знаю как это испр и я если у кого то еще это будет то я написал как испр)
Спасибо:

frontman

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


Тестировал плазу с утра. И заметил странное явление.
При выполнении следующего кода
Код
 _trader.StreamTimeOut = TimeSpan.FromMilliseconds(50);

            //_trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);

            _trader.NewSecurities +=
                securities => this.GuiAsync(() =>
                _context.Post(obj => _securities.AddRange(obj as IEnumerable<Security>), securities.Where(sec => sec.Code == "...")));

            _trader.NewPortfolios +=
                portfolios => this.GuiAsync(() =>
                     _context.Post(obj => _portfolios.AddRange(obj as IEnumerable<Portfolio>), portfolios.Where(sec => sec.Name == "...")));
            
            _trader.NewOrders += orders => this.GuiSync(() => textBox1.Text = orders.Last().Id.ToString());

            _trader.Connected += () => _trader.StartFutureExport();
           
            _trader.Connect();



Первые минуты 2 где то загрузка на процессор катастрофична. Причем даже после того как все портфели и инструменты загрузились она не начинает падать. Не падает она и после того как прогрузились старые заявки и начали поступать новые...
Потом через какое то время нагрузка падает и такое состояние продолжается далее...
Не могу понять что происходит в эти первые минуту...
Спасибо:

Alexander

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


Происходит подключение и прогрузка всей поступившей информации.

Цитата:
Причем даже после того как все портфели и инструменты загрузились

как отслеживаете?
Спасибо:

frontman

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


Просто смотрю изменяется ли название портфеля в текстовом поле куда я вывожу один из портфелей или инструментов поступивших при вызове события
NewPortfolios или NewSecurities.
И так же вижу что новые заявки начали поступать, а загрузка еще приличная. Потом проходит еще какое то время и нагрузка падает...
Спасибо:

Alexander

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


frontman Перейти
Просто смотрю изменяется ли название портфеля в текстовом поле куда я вывожу один из портфелей или инструментов поступивших при вызове события
NewPortfolios или NewSecurities.
И так же вижу что новые заявки начали поступать, а загрузка еще приличная. Потом проходит еще какое то время и нагрузка падает...


1) строятся свечки может или ещё какая у вас катавасия с поступающими данными - вариантов тысячи
2) NewPortfolios вызывается естественно 1 раз для каждого портфеля - когда он новый, т.е. создаётся.
Спасибо:

frontman

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


Конечно что то я накрутил там явно с обработкой событий)) Но думаю это не является причиной. Сейчас упрощу и проверю еще...
Спасибо:

frontman

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


А насчет свечек... Ну я точно этой инф не пользуюсь. Я показал код который принимает данные.
Или они все равно строятся?)
Спасибо:

Ortn

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


А можно как нибудь подписаться на получение только некоторых потоков? (реплики они называются?) Очень долго подгружаются сделки (которые мне не нужны) хочется иметь только собственные сделки + стакан.
Спасибо:

Ortn

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


Обнаружил баг когда у активной заявки (которая была частично исполнена) статус Done. В PlazaTrader.cs есть такие строчки:

Код

switch (action)
				{
					case 0: // удалена
						order.CancelTime = lastRecord.Get<DateTime>(metadata.Moment);
						order.State = OrderStates.Done;

						// у отмененной заявки оставшийся объем равен 0, а объем операции равен отмененному объему
						// ÷ñÒ2068577990êÖ0õæ÷http://forum.rts.ru/viewtopic.asp?t=21409÷ñÒ2068577990êÖ1õæ÷
						order.Balance = lastRecord.Get<int>(metadata.AmountOperation);
						break;
					case 1: // добавлена
						break;
					case 2: // исполнена
						order.State = OrderStates.Done;
						order.Balance = lastRecord.Get<decimal>(metadata.AmountRest);
						break;
					default:
						throw new InvalidOperationException("Неизвестное действие заявки {0}.".Put(action));
				}


Это вообще правильно? Судя по форуму РТС action == 2 когда по заявке была хотя бы одна сделка. (т.е. она не обязана быть полностью сведенной)

http://forum.rts.ru/viewtopic.asp?t=19140

Цитата:
Интерпретация значения "2" в случае с OrderBook - "по данной заявке была как мин. одна сделка". Т.к. мы показываем некий срез во времени
то больше никакой информации из action=2 не следует.


Вобщем факт, что у активной заявки был статус Done (в SampleGUI и в моем собственном приложении).
Спасибо:

Alexander

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


Ortn Перейти
Обнаружил баг когда у активной заявки (которая была частично исполнена) статус Done. В PlazaTrader.cs есть такие строчки:

Код

switch (action)
				{
					case 0: // удалена
						order.CancelTime = lastRecord.Get<DateTime>(metadata.Moment);
						order.State = OrderStates.Done;

						// у отмененной заявки оставшийся объем равен 0, а объем операции равен отмененному объему
						// ÷ñÒ1717206099êÖ0õæ÷http://forum.rts.ru/viewtopic.asp?t=21409÷ñÒ1717206099êÖ1õæ÷
						order.Balance = lastRecord.Get<int>(metadata.AmountOperation);
						break;
					case 1: // добавлена
						break;
					case 2: // исполнена
						order.State = OrderStates.Done;
						order.Balance = lastRecord.Get<decimal>(metadata.AmountRest);
						break;
					default:
						throw new InvalidOperationException("Неизвестное действие заявки {0}.".Put(action));
				}


Это вообще правильно? Судя по форуму РТС action == 2 когда по заявке была хотя бы одна сделка. (т.е. она не обязана быть полностью сведенной)

https://forum.rts.ru/viewtopic.asp?t=19140

Цитата:
Интерпретация значения "2" в случае с OrderBook - "по данной заявке была как мин. одна сделка". Т.к. мы показываем некий срез во времени
то больше никакой информации из action=2 не следует.


Вобщем факт, что у активной заявки был статус Done (в SampleGUI и в моем собственном приложении).



Это не верно, поэтому я ещё 28 октября поправил
Спасибо:
< 1 2 3 

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

loading
clippy