Неправильное формирование свечек, несколько ТФ, много стратегий

Неправильное формирование свечек, несколько ТФ, много стратегий
Atom
24.08.2010
Alexander


Запущено 10 стратегий, для CandleManager регистрируются 2 ТФ: 1-
минутки и 5-минутки.
Пытаюсь получать свечки внутри стратегии, вот их распечатка:

localCandle: time(10:45:00), open(139880), close(139800),
high(139945), low(139775); TimeFrame: 00:05:00
localCandle: time(10:40:00), open(139965), close(139910),
high(140145), low(139875); TimeFrame: 00:05:00
localCandle: time(10:35:00), open(140335), close(139985),
high(140335), low(139950); TimeFrame: 00:05:00
localCandle: time(10:30:00), open(140250), close(140355),
high(140395), low(140110); TimeFrame: 00:05:00
localCandle: time(10:25:00), open(140330), close(140250),
high(140335), low(140235); TimeFrame: 00:05:00
localCandle: time(10:20:00), open(140240), close(140325),
high(140340), low(140195); TimeFrame: 00:05:00
localCandle: time(10:15:00), open(140250), close(140185),
high(140325), low(140110); TimeFrame: 00:05:00
localCandle: time(10:10:00), open(140150), close(140225),
high(140385), low(140125); TimeFrame: 00:05:00
localCandle: time(10:05:00), open(140375), close(140150),
high(140375), low(140140); TimeFrame: 00:05:00
localCandle: time(10:00:00), open(140770), close(140370),
high(140770), low(140255); TimeFrame: 00:05:00

Стратегия запущена была в 10:18, до этого времени свечки как раз
верные, после - совсем не то.
Это фьючерс на индекс РТС - как видно свечки кривые как раз после
запуска.
Объём свечек тоже неверный, объём свечки в 10:45 - 474, в 10:40 -
217...

Свечки получаю через:
var oldCandles = _candleManager.GetTimeFrameCandles(Security,
TimeFrame, new Range<DateTime>(firstTime, marketTime)); //firstTime -
10.00, marketTime - текущее время, TimeFrame - 5 минут

Самое интересное - на локальном компьютере, где запущены всего 3
стратегии и 1 квик - всё нормально.

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


1. На счет объема не понял - он в лог не выводится... А в чем кривость
свечек то?
2. А в чем разница между локальным компьютером и том, на котором лог
писался?

Спасибо:

Alexander

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


1) свечка в 10:45 должна быть:
открытие 139920
макс 139965
мин 139870
закрытие 139800
объём 6957 (никак не 474 по логу (объём дописал потом))

т.е. совсем другие данные

2) Никакой разницы нет,время синхронизировано с сервером и стоит одна
и таже зона - Москва.

Спасибо:

Mikhail Sukhov

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


Если запрашивать через диапазон new Range<DateTime>(firstTime,
marketTime), то можно захватить еще не сформированную текущую свечку.
Случаем, не это ли случилось?

Спасибо:

Alexander

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


Нет, не это. Все остальные свечки после включения роботов (в 10:18)
тоже кривые, всё они неверные - неправильно всё, от минимума и
максимума до закрытия\открытия и объёма.

Спасибо:

Mikhail Sukhov

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


Так Вы же пишите, что включения робота свечки верные. Первые потому,
что они полностью сформированы, и трюк к запросом всех свечек по
текущее время прокатит. А у Вас наверное запрос свечек идет в
OnProcess. И на каждой итерации будет захватываться еще не
сформированная свечка... Откуда у Вас вызывается получение свечек?

Спасибо:

Alexander

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


Да, свечки получаются через
var oldCandles = _candleManager.GetTimeFrameCandles(Security,
TimeFrame, new Range<DateTime>(firstTime, Trader.MarketTime));

Но дальше я ведь пробегаю по всем этим свечкам в цикле и печатаю.
Печатаются из цикла неверные значения для всех (!) свечек, не только
для последней (последнюю я как раз и не смотрю) - для всех от 10:20 до
10:45.
Печать, которую дал в первом посте была сделана в 10:50:01, просто
убрал это из сообщения.

Если убрать всё ненужное, то вот печать:

var oldCandCount = oldCandles.Count();
while (it <= oldCandCount)
{
localCandle =
oldCandles.ElementAt(oldCandCount - it);
if (localCandle != null)
{
AddLog(StrategyErrorStates.None,
"localCandle: time({0}), open({1}), close({2}), high({3}), low({4}); "
+

"TimeFrame: {5}, TotalVolume({6}), TotalPrice({7})",
new object[]
{
localCandle.Time.TimeOfDay,
localCandle.OpenPrice,
localCandle.ClosePrice, localCandle.HighPrice,
localCandle.LowPrice,
localCandle.TimeFrame,
localCandle.TotalVolume,
localCandle.TotalPrice
});
}
it++;
}

Спасибо:

Mikhail Sukhov

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


Ок... Еще по логу можете посмотреть, менялись ли старые свечки? Или на
всех итерациях неправильное значение?

Просто поправка по коду. Как то сложно пишите. Может вот так?

foreach (var localCandle in oldCandles.OrderByDescending(c => c.Time))

Спасибо:

Alexander

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


Ух, так и правда проще, спасибо.
Нет, не менялись - начиная с первой новой свечки (которая формируется
по ходу стратегии, а не до запуска) - неправильные значения.
На локальном компьютере с 1м квиком - всё нормально

Спасибо:

Mikhail Sukhov

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


Так, разница между тачками все-таки есть - 1 квик и несколько?

Спасибо:

Alexander

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


У меня просто там много дополнительных условий в цикле, наверное на
foreach не получится так просто заменить. Попробую в любом случае =)

Спасибо:
1 2  >

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

loading
clippy