Исключение в примере SampleSMA

Исключение в примере SampleSMA
Atom
3/30/2010
Ilya Usenko


В функции DrawSma

var endOffset = TimeSpan.FromSeconds(1); bounds = new Range(_lastCandleTime + _timeFrame, bounds.Min

  • endOffset);

"Заданный аргумент находится вне диапазона допустимых значений.\r\nИмя параметра: min"

Как бороться то?


Tags:


Thanks:


denis

Avatar
Date: 3/30/2010
Reply


обернул в try/catch

Thanks:

Ilya Usenko

Avatar
Date: 3/30/2010
Reply


Я думаю это совсем неправильно

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


Конечно неправильно. Ошибка в логике - почему то (_lastCandleTime + _timeFrame) снановится больше чем bounds.Min

  • endOffset. Если отлогируете значения - исправлю в следующей версии пример.
Thanks:

Ilya Usenko

Avatar
Date: 3/30/2010
Reply


А что тут логировать: _lastCandleTime = 13:50:00 _timeFrame = 00:05:00 bounds.Min = 13:55:00 endOffset = 00:00:01

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


Вот такое:

new Range("13:50:00".To() + "00:05:00".To(), "13:55:00".To() + "00:00:01".To())

успешно отработало

Thanks:

Ilya Usenko

Avatar
Date: 3/30/2010
Reply


Во второй переменной конструктора вы поменяли знак с минуса на плюс "13:55:00".To() +

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


Хм, я читер...

Поcмотрел еще раз код. Думаю, по логике, должно быть так:

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

// если появились новые полностью сформированные свечки // допустим, дата послед отсированной свечи 11:25 // ТФ - 5 минут // текущее время 11:35:02 (пришло изменени по текущей свечке за 11:35:00, которая имеет границы с 11:35 до 11:40) // значит настало время нарисовать 11:30:00 // 11:25:00 + 00:05:00 < 11:35:00 if ((_lastCandleTime + _timeFrame) < bounds.Min) { // отстут с конца интервала, чтобы не захватить текущую свечку. var endOffset = TimeSpan.FromSeconds(1);

bounds = new Range(_lastCandleTime + _timeFrame, bounds.Min

  • endOffset);

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

Thanks:

Ilya Usenko

Avatar
Date: 3/31/2010
Reply


Все ок!

Thanks:

Ilya Usenko

Avatar
Date: 4/23/2010
Reply


Подниму тему. Вы писали, что для исправления ошибки нужно if ((_lastCandleTime + _timeFrame) < bounds.Min) Этот вариант работает.

В реальности в ваших примере, версия 1.8, условие заменено на <= вместо < if ((_lastCandleTime + _timeFrame) <= bounds.Min)

Ну и вылетает ошибка та же.

Thanks:

Mikhail Sukhov

Avatar
Date: 4/27/2010
Reply


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

Thanks:


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

loading
clippy