начудил :(
Atom
17.03.2010
denis


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

когда стратегия работает, то ошибками сыпет
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