Исключение в примере SampleSMA
Atom Ответить
30.03.2010


В функции DrawSma

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

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

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

Теги:


Спасибо:




10 Ответов
denis

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


обернул в try/catch

Спасибо:

Ilya Usenko

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


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

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

Mikhail Sukhov

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


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

Спасибо:

Ilya Usenko

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


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

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

Mikhail Sukhov

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


Вот такое:

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

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

Спасибо:

Ilya Usenko

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


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

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

Mikhail Sukhov

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


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

По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<DateTime>(_lastCandleTime + _timeFrame, bounds.Min
- endOffset);

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

Спасибо:

Ilya Usenko

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


Все ок!

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

Ilya Usenko

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


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

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

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

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

Mikhail Sukhov

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


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

Спасибо:


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

loading
clippy