Trading algorítmico para .NET y Python✦86+ conectores · exchanges · brókers · cripto✦S#.Designer · backtest · optimizar · en vivo✦Una comunidad de 31,456+ traders y desarrolladores✦Trading algorítmico para .NET y Python✦86+ conectores · exchanges · brókers · cripto✦S#.Designer · backtest · optimizar · en vivo✦Una comunidad de 31,456+ traders y desarrolladores✦
По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);
Comentarios (10)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
обернул в 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)
Ну и вылетает ошибка та же.
Да, действительно. Наверное, пытался что-то оптимизировать, а получилось как обычно.