начудил :(
Atom Ответить
16.03.2010


теперь при запуске экспорта по ДДЕ одно ядро проца грузится по полной.
где можно было так ошибиться? стратегия еще не запущена.

когда стратегия работает, то ошибками сыпет
2010-03-16T20:51:09.8750000+03:00 [0] None => Strategy runned
ошибка ренжа: System.ArgumentOutOfRangeException: Specified argument
was out of the range of valid values.
Parameter name: min
at Ecng.ComponentModel.Range`1.ValidateBounds(T min, T max)
at Ecng.ComponentModel.Range`1.Init(T min, T max)
at Ecng.ComponentModel.Range`1..ctor(T min, T max)
at SampleSMA.MainWindow.DrawSma() in D:\trade\bot\code\stockSharp
\SampleSMA\MainWindow.xaml.cs:line 267
Первый этап обработки исключения типа
"System.ArgumentOutOfRangeException" в приложении
Ecng.ComponentModel.dll
2010-03-16T20:53:35.7187500+03:00 [0] None => Strategy stopping
2010-03-16T20:53:35.8281250+03:00 [0] None => Strategy stopped

код
private void DrawSma()
{
// нас не интересует текущая свечка, так как она еще не
сформировалась
// и из нее нельзя брать цену закрытия

// вычисляем временные отрезки текущей свечки
var bounds = _timeFrame.GetCandleBounds(_trader);

// если появились новые полностью сформированные свечки
if (_lastCandleTime < bounds.Min)
{
try
{
// отстут с конца интервала, чтобы не захватить
текущую свечку.
var endOffset = TimeSpan.FromSeconds(1);
bounds = new Range<DateTime>(_lastCandleTime +
_timeFrame, bounds.Min - endOffset); // line 267

// получаем эти свечки
var candles =
_candleManager.GetTimeFrameCandles(_strategy.Security, _timeFrame,
bounds);

но перед этим еще вилы были с вот этим
this._trader.NewTrades += (_all_trades) =>
this.Sync(() =>
{
try
{
var _lt = _all_trades.Last(tmp =>
tmp.Security.Code.Equals(mysec)); // trap
papir.price = _lt.Price;
}
catch (InvalidOperationException ex)
{
Console.WriteLine("ошибка определения
последней сделки: {0}", ex);
}
});
кривой обработчик всех сделок может грузить проц при выключенной
стратегии?

Теги:


Спасибо:




34 Ответов
< 1 2 
Mikhail Sukhov

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


Сколько сделок на луке и на риме?

Спасибо:

denis

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


в окне "все сделки" 250 тыс строк, сейчас отфильтрую по каждому
инструменту
LKM0 = 12800
LKOH = 32500
RIM0 = 204700
хм :/

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

Mikhail Sukhov

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


Написал нагрузочный тест -

http://stocksharp.googlegroups.com/web/Program.cs?gda=zvVZazwAAAD7ujiFr5Ha_HYNmvj19Tvy_GKAELyqx4z3GZqV5NKOAvOTqSfJAS8Ae9iSzNYZ2LPJFhoxmpKOtqIfKEM19Vl5&gsc=UoP_5QsAAABbesp6p5Fpqgb_84TDDYjR

.

1m сделок. ТФ - 10 сек. Нагрузки на проц никакой. Опять же, спрашивал
у других, кто пользуется роботами. Выставляли ТФ - 2 сек. Тоже нет
нагрузки... Прогони этот тест. Какие у тебя будут показатели?

Спасибо:

denis

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


Спасибо за тест. Погонял, нагрузка около 2-4% вместе с другими
приложениями.
Изменил
// спим секунду, эмулируя задержку Квика
Thread.Sleep(TimeSpan.FromSeconds(0.01));
т.е. теперь ждет на порядок меньше, нагрузка стала от 5 до 10% только
на это приложение.

От симплСМА оторвал стратегию, нагрузка осталась, сейчас почитаю
инструкцию к профилировщику, если он может измерять время выполнения
функций и методов, то узнаю где собака порылась.

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

Mikhail Sukhov

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


Я думаю она в обработчиках... Еще полезно смотреть на DdeError. Если
там что-то плохое пишется часто, то оно сильно снижает нагрузку. Вот
заметка на эту темуhttp://dotnetperls.com/exception-performance-test

Результаты в самом начале. Падение производительности аж в 6 раз.

Спасибо:

denis

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


С профилировщиком пока не разобрался :(
Но воспроизвел тупняк на Sample и не смог воспроизвести на
SampleConsole. Сейчас еще немного поковыряю и добавлю стратегию. О
резалтах отпишусь.

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

denis

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


Сделал пока вывод пять сек свечи на риме - летает! :) Супер! респекты
и уважуха!
Пошел приделывать остальные куски.
ссылка на код

https://docs.google.com/leaf?id=0Bw2gQDvf41vtNTVkOWEwNTgtMmU1ZS00MjRmLTg1NDEtNGM2NGU4NjliNmFh&sort=name&layout=list&num=50


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

Mikhail Sukhov

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


Я что-то упустил. Проблема идентифицировалась?

Спасибо:

denis

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


Летает в SampleConsole, а в Sample и SampleSMA - тормозит. Куда думать
- не знаю, но может из-за GUI-морды и синхронизаций с ней.
Кусок из SampleConsole:

const string secCode = "RIM0";
Security lkoh = null;
CandleManager _candleManager;
TimeSpan _timeFrame = TimeSpan.FromSeconds(5);
StrategyManager _manager = new StrategyManager();

const string quikPath = @"C:\Program Files\info\";

// создаем соединение с Quik-ом
using (var trader = new QuikTrader(quikPath))
{
_candleManager = new CandleManager(trader);
// подписываемся на событие появление инструментов
trader.NewSecurities += securities =>
{
if (lkoh == null)
{
// находим Лукойл и присваиваем ее переменной lkoh
lkoh = securities.FirstOrDefault(sec => sec.Code == secCode);

if (lkoh != null)
{
Console.WriteLine("Инструмент Лукойл появился");

//new TestCandleManager(trader, lkoh).NewCandles += (t, c) =>
Console.WriteLine(c.Count());
//waitHandle.Set();

_candleManager.RegisterTimeFrameCandles(lkoh, _timeFrame);
_candleManager.NewCandles += (token,
candles) =>
{
//DrawCandles(candles);
var _lc =
candles.LastOrDefault(tmp => tmp.Security.Code.Equals("RIM0"));
if (_lc != null)
Console.WriteLine("o = " +
_lc.OpenPrice + " h = " + _lc.HighPrice + " l = " + _lc.LowPrice + " c
= " + _lc.ClosePrice);

};
}
}
};
//

// запускаем экспорт по DDE
//trader.StartDde(new[] { trader.SecuritiesTable });
trader.StartDde();

если и есть нагрузка, то она пренебрежительно мала и не поддается
обнаружению "на глаз"

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

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

loading
clippy