начудил :(
Atom
17.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);
}
});
кривой обработчик всех сделок может грузить проц при выключенной
стратегии?

Теги:


Спасибо:


1 2 3  > >>
Mikhail Sukhov

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


1. ArgumentOutOfRangeException выбрасывается по всей видимости от
того, что _lastCandleTime + _timeFrame оказался больше чем bounds.Min
- endOffset
2. Насчет обработчика всех сделок. Его деятельность не зависит от
того, работают стратегии или нет. Но я не вижу особых тормозов в его
коде.

Спасибо:

denis

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


1. Да, вываливается на первой свечке. Только сегодня заметил.
2. С утра попробовал на 1,6 - летает, потом на 1,7 - аналогично...
подожду вечера, может выловлю чего
Хорошо что SVN поставил, спасает. А то бы ща уже с бубнами плясал :)

Спасибо:

denis

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


На риме опять заргуз до включения стратегии, возможно, я не так
обрабатываю "все сделки".
Сейчас откачусь на 1.6, может что нового узнаю.

Спасибо:

Mikhail Sukhov

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


Загрузка - это случайно не та, которая при первом экспорте всех
сделок? Так может подождать?
Попробуйте отписаться от события? Что-нибудь изменится? Какие свечки
созданы? CandleManager тоже зависит от всех сделок. Вообщем,
локализация ошибки.

Спасибо:

denis

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


Да, верно, туплю :( спать надо больше.
Откатывался на разные версии своих изменений - бесполезно. Выключал
все кроме минутных свечек.
1,6 отличается от 1,7 тем, что нагрузка на первом постоянная, а на
втором падает до нуля, а когда проходят сделки в окне "все сделки", то
подскакивает до 80% от ядра.
В обоих случаях помогает следующая последовательность:
1) выбрать Лукойл, чтобы в окне "все сделки" был только лук, 2)
запустить экспорт, 3) игнорировать следуещее:
ошибка определения последней сделки: System.InvalidOperationException:
Sequence contains no matching element
at System.Linq.Enumerable.Last[TSource](IEnumerable`1 source,
Func`2 predicate)
at SampleSMA.MainWindow.<>c__DisplayClass21.<Connect_Click>b__c()
in D:\trade\bot\code\stockSharp\SampleSMA\MainWindow.xaml.cs:line 201
4) переключится на риму, 5) через 5-15 сек наслаждаться нагрузкой от 0
до 10% ядра.
Если не плясать с бубнами, то до 80% ядра будет поедаться.

Учел что конфиги для квика отличаются у 1,6 и 1,7. То же про длл.
На лукойле воспроизвести такое поведение не удалось.
Какую очевидную вещь я упустил из виду? Может при переходе с 1,6 на
1,7 нужно не только перекинуть библиотеки и поправить код, но и еще
что-то где-то нажать/прописать?

Спасибо:

Mikhail Sukhov

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


Подождите, так Ваш же код код ошибки кидает =) Вот это
"System.InvalidOperationException: Sequence contains no matching
element" говорит о том, что выражение _all_trades.Last(tmp =>
tmp.Security.Code.Equals(mysec)); не находит необходимой сделки. Вам
нужно вызывать LastOrDefault, тогда в случае ненахождения он возвратит
null. А так действительно, у Вас каждый тик (хотел сказать чих) по
ошибке.
Вот и получается, что как только вы сменили фильтр, ошибки
прекратились. Потому как приходят только те сделки, которые
соответветствуют Вашему инструменту. Не нужно забывать,
ITrader.NewTrades возвращает сделки для ВСЕХ инструментов.

Спасибо:

denis

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


Ну не нашел, сгенерил исключение, перехватили, отпечатали... если бы
все так просто :) я пробовал комментировать этот обработчик и другие,
кроме работы со свечками. Нагрузка остается. Сейчас делаю так:
this._trader.NewTrades += (_all_trades) =>
this.Sync(() =>
{
var _lt = _all_trades.LastOrDefault(tmp =>
tmp.Security.Code.Equals(mysec));
if (_lt != null)
papir.price = _lt.Price;
});
изменений нет, кроме как отсутствия провалов в нагрузке проца.
Комментирую этот обработчик - аналогично. Завтра вырежу все что не
требуется дальше обработки кнопки "экспорт ДДЕ" и потестирую на риме,
после обеда :) ибо до обеда оно работает. А на луке работает всегда.

После смены фильтра не только ошибки пропадают, но и нагрузка падает в
раз в пять. А если начинать экспорт сразу на риме, то ошибок нет, но
нагрузка поедает все ядро. Вот и вся разница.
Включаю риму "через лук" - все летает, если сразу риму - жрет ядро.

У других-то работает :( чего же я не так сделал?

Спасибо:

denis

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


ехо! :) нарыл! смысл такой: у симплСМА оторвать рисовалку, чтобы
эксперимент был точнее. Потом поставить таймфрейм 30 сек и заменить
LKOH на RIM0. Запустить, подключится, начать экспорт.
Могу выложить свою версию покоцанного симплСМА.

Спасибо:

dart

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


Давай

Спасибо:

Mikhail Sukhov

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


LKOH - это та, которая акция?

Конечно, присылай. Только я позднее посмотрю. А в чем причина?

Спасибо:
1 2 3  > >>

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

loading
clippy