Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,451+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,451+ Tradern und Entwicklern✦
По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);
Да, действительно. Наверное, пытался что-то оптимизировать, а
получилось как обычно.
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (10)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
обернул в try/catch
Я думаю это совсем неправильно
Конечно неправильно. Ошибка в логике - почему то (_lastCandleTime + _timeFrame) снановится больше чем bounds.Min
А что тут логировать: _lastCandleTime = 13:50:00 _timeFrame = 00:05:00 bounds.Min = 13:55:00 endOffset = 00:00:01
Вот такое:
new Range("13:50:00".To() +
"00:05:00".To(), "13:55:00".To() +
"00:00:01".To())
успешно отработало
Во второй переменной конструктора вы поменяли знак с минуса на плюс "13:55:00".To<DateTime>() +
Хм, я читер...
По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
// получаем эти свечки var candles = _candleManager.GetTimeFrameCandles(_strategy.Security, _timeFrame, bounds);
Все ок!
Подниму тему. Вы писали, что для исправления ошибки нужно if ((_lastCandleTime + _timeFrame) < bounds.Min) Этот вариант работает.
В реальности в ваших примере, версия 1.8, условие заменено на <= вместо < if ((_lastCandleTime + _timeFrame) <= bounds.Min)
Ну и вылетает ошибка та же.
Да, действительно. Наверное, пытался что-то оптимизировать, а получилось как обычно.