← 返回

CandleBuilder.CandleStarted вызывается несколько раз для одной свечки

Для построения графиков по сделкам использую следующий код:


var trades = Core.Storage.GetTradeStorage(Security).Load(Core.Yesterday, Core.Yesterday + TimeSpan.FromTicks(TimeSpan.TicksPerDay - 1));
var bld = new CandleBuilder(new RawConvertableCandleBuilderSource<Trade>(trades)) { IsSyncRegister = true };
bld.CandlesStarted += (t, c) =>
{
	var candles = c.Cast<TimeFrameCandle>();
	Storage.Save(candles);

	Core.LogMessage(candles.Count() + " свечек построено для " + this);

	bld.Dispose();
};
bld.RegisterTimeFrameCandles(Security, TimeFrame);

Через событие CandlesStarted отдается массив сразу всех свечек за день. Всегда работал хорошо, но сегодня обнаружил что для RIH2 за 24.02.12 с минутным таймфреймом почему-то косячит - свечки 12:32 и 12:33 в возвращаемом CandlesStarted массиве присутствуют много раз:


...
candleStarted candle time: 24.02.2012 12:30:00
candleStarted candle time: 24.02.2012 12:31:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:32:00
candleStarted candle time: 24.02.2012 12:33:00
candleStarted candle time: 24.02.2012 12:34:00

Обновился до 4.0.20v2, качал сделки заново, строил заново - ничего не помогает. Сделки качаю с финама, в получаемом текстовом файле смотрел - сделки по вермени расположены без нарушений, вроде все в порядке...

本主题对您有帮助吗?

分享主题

评论 (19)

登录创建账户, 登录或注册以发表评论

Supervisor
Supervisor 作者

Попробовал гидрой - точно так же неправильно строит. Плюс обнаружил аналогичные ошибки в 10:04 и 10:45.

Alexander
Alexander

Посмотрим как будет время.

Alexander
Alexander

На SampleEmulationTesting воспроизводится? Добавил подписку на событие сразу после инициализации builder - ни разу не пришли повторные свечки.

Запускал 3 раза для верности.

			builder.CandlesStarted += builder_CandlesStarted;


		private SynchronizedList<Candle> finishedCandles = new SynchronizedList<Candle>();

		void builder_CandlesStarted(CandleToken arg1, IEnumerable<Candle> arg2)
		{
			foreach (var candle in arg2)
			{
				if (!finishedCandles.Contains(candle))
					finishedCandles.Add(candle);
				else
				{
					MessageBox.Show("found!");
				}
			}
		}

Ни окошка, ни брэйкпоинт не сработали - всё ок, добавляются все неповторные.

Supervisor
Supervisor 作者

Хочу уточнить - а нужно проверять на SampleEmulationTesting если у меня на гидре воспроизводится? При чем только в этом дне - 24.02 наблюдается проблема, если пробовать на других то все нормально.

Alexander
Alexander

Сделал всё тоже самое, не воспроизвелось:

гидра

Для исправления конечно надо такое, что и я смогу воспроизвести. А то исправлять непонятно что и непонятно где.

Supervisor
Supervisor 作者

Возможно у Вас сделки скачаны не с Финама, а с другого источника. Сейчас попробовал в гидре удалить сделки финамовские, скачать с ртс и построить по ним - все построило правильно. А по финамовским - опять то же самое.

Alexander
Alexander

Для SampleEmulationTesting воспроизводится?

Supervisor
Supervisor 作者

Прогнал пару раз - не воспроизводится

Supervisor
Supervisor 作者

То есть, я так понимаю, выход один - не использовать финам, использовать ртс

Alexander
Alexander

Supervisor: То есть, я так понимаю, выход один - не использовать финам, использовать ртс

Либо ждать фикса

Mikhail Sukhov
Mikhail Sukhov

Supervisor: То есть, я так понимаю, выход один - не использовать финам, использовать ртс

А вы нашли разницу в данных?

Supervisor
Supervisor 作者

Mikhail Sukhov:

Supervisor: То есть, я так понимаю, выход один - не использовать финам, использовать ртс

А вы нашли разницу в данных? В получающихся свечках - нашел. Я так понимаю нужно сравнить получающиеся сделки по двум источникам. Будет время - займусь..

Mikhail Sukhov
Mikhail Sukhov

Supervisor: В получающихся свечках - нашел. Я так понимаю нужно сравнить получающиеся сделки по двум источникам. Будет время - займусь..

Да правильно. Потому что без этой информации не понятно, у нас ли бага, или так отдает Финам.

Alexander
Alexander

Удалось сравнить?

Supervisor
Supervisor 作者

Посмотрел... Во-первых, тот день - не единственный, на прошлой неделе снова аналогичное наблюдал. Но вернемся к 24 февраля. И с финама и с РТС качал гидрой. Получилось с РТС - 566831 сделок, с финама - 567661. Начал сравнивать, вот что обнаружил в финаме (файл 2012-02-24.txt):

... 20120224;100046;165815.00000;5;509791824 <mark>20120224;100046;165805.00000;3;509791825</mark> 20120224;100046;165810.00000;1;509791826 <mark>20120224;100047;165805.00000;3;509791825</mark> 20120224;100047;165810.00000;1;509791826 ... 20120224;100226;165770.00000;2;509798933 20120224;100226;165775.00000;2;509798934 <mark>20120224;100226;165750.00000;2;509798939</mark> <mark>20120224;100227;165750.00000;2;509798939</mark> 20120224;100227;165770.00000;2;509798942 20120224;100227;165770.00000;1;509798944 ...

Проскакивают сделки с одинаковым id и разным временем, чего нет в сделках от РТС. Я так понимаю косяк финама?) Если надо, приложил все файлики.

Alexander
Alexander

Да, косяк финама. Я потому последний месяц стал скачивать сделки с ртс - тоже заметил расхождения финама с терминалом.

Supervisor
Supervisor 作者

А в РТС можно организовать утром скачивание сделок за вчерашний день целиком? Насколько помню там же сессии с 19 до 19...

Alexander
Alexander

нельзя, да напишите в финам, скажите что у них такой косяк с данными. может оперативно поправят

сообщите о результатах письма, тоже интересно :)

Supervisor
Supervisor 作者

Спустя 3 часа написали что ошибка исправлена, и действительно за этот день и за другой проблемный день история теперь похоже сходится :)

Alexander