← Zurück

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

В функции DrawSma

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

  • endOffset);

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (10)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

denis
denis

обернул в try/catch

Ilya Usenko
Ilya Usenko Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

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

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

Mikhail Sukhov
Mikhail Sukhov

Вот такое:

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

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

Ilya Usenko
Ilya Usenko Autor

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

Mikhail Sukhov
Mikhail Sukhov

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

По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);

Ilya Usenko
Ilya Usenko Autor

Все ок!

Ilya Usenko
Ilya Usenko Autor

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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