начудил :(
Atom
3/17/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.Range1.ValidateBounds(T min, T max) at Ecng.ComponentModel.Range1.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(_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); } }); кривой обработчик всех сделок может грузить проц при выключенной стратегии?


Tags:


Thanks:


1 2 3  > >>
Mikhail Sukhov

Avatar
Date: 3/17/2010
Reply


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

denis

Avatar
Date: 3/17/2010
Reply


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

denis

Avatar
Date: 3/17/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/17/2010
Reply


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

Thanks:

denis

Avatar
Date: 3/18/2010
Reply


Да, верно, туплю :( спать надо больше. Откатывался на разные версии своих изменений - бесполезно. Выключал все кроме минутных свечек. 1,6 отличается от 1,7 тем, что нагрузка на первом постоянная, а на втором падает до нуля, а когда проходят сделки в окне "все сделки", то подскакивает до 80% от ядра. В обоих случаях помогает следующая последовательность:

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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/18/2010
Reply


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

Thanks:

denis

Avatar
Date: 3/18/2010
Reply


Ну не нашел, сгенерил исключение, перехватили, отпечатали... если бы все так просто :) я пробовал комментировать этот обработчик и другие, кроме работы со свечками. Нагрузка остается. Сейчас делаю так: 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; }); изменений нет, кроме как отсутствия провалов в нагрузке проца. Комментирую этот обработчик - аналогично. Завтра вырежу все что не требуется дальше обработки кнопки "экспорт ДДЕ" и потестирую на риме, после обеда :) ибо до обеда оно работает. А на луке работает всегда.

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

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

Thanks:

denis

Avatar
Date: 3/18/2010
Reply


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

Thanks:

dart

Avatar
Date: 3/18/2010
Reply


Давай

Thanks:

Mikhail Sukhov

Avatar
Date: 3/18/2010
Reply


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

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

Thanks:
1 2 3  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy