← Zurück

Объединение исторических и текущих свечек

Приветствую!

Долго пытался разобраться самостоятельно, но так и не нашел ответов. Задача состоит в следующем: необходимо получить "ленту" пятимянутных свечек - от текущего момента (после подключения) до, допустим, минус две недели назад. Собственно, вопросы:

  1. Если вызвать RegisterHistoryData и слушать NewHistoryCandle - как узнать, что я получил все свечки в заданном диапазоне?
  2. В документации сказано, что RegisterHistoryData получает свечки за предыдущие торговые сессии. Как тогда получить данные за текущую сессию (предполагаю, что подключился в середине торгового дня и нужно получить свечки более ранние)?
  3. И последнее, но не в последнюю очередь - адаптация решения первых двух вопросов к тестированию на исторических данных - как?

Зараннее спасибо!

War dieses Thema hilfreich?

Thema teilen

Kommentare (4)

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

Mikhail Sukhov
Mikhail Sukhov

morincer: Приветствую!

Долго пытался разобраться самостоятельно, но так и не нашел ответов. Задача состоит в следующем: необходимо получить "ленту" пятимянутных свечек - от текущего момента (после подключения) до, допустим, минус две недели назад. Собственно, вопросы:

  1. Если вызвать RegisterHistoryData и слушать NewHistoryCandle - как узнать, что я получил все свечки в заданном диапазоне?
  2. В документации сказано, что RegisterHistoryData получает свечки за предыдущие торговые сессии. Как тогда получить данные за текущую сессию (предполагаю, что подключился в середине торгового дня и нужно получить свечки более ранние)?
  3. И последнее, но не в последнюю очередь - адаптация решения первых двух вопросов к тестированию на исторических данных - как?

Зараннее спасибо!

  1. Эфристически.🙂
  2. Попробуйте за текущую сессию.
  3. Тестирование идет на основе тиковых данных.
Daenur
Daenur

Возрожу эту тему.

Объединяю историю с реалтаймом.

// Подписка на события
((SmartTrader)this.trader).NewHistoryCandles += (token, candles) => this.historyCandles.SyncDo(col =>
{
	// Сохраняем исторические бары
	this.historyCandles.AddRange(candles);
	// Отрисовываем исторические бары
	chartWindow.DrawCandles(token, candles);
});

candleManager.CandlesStarted += DrawRealTimeCandles;
candleManager.CandlesChanged += DrawRealTimeCandles;
candleManager.CandlesFinished += DrawRealTimeCandles;

// Собственно забираю историю
TimeSpan ts = new TimeSpan(currentTimeFrame.Hours * 100, currentTimeFrame.Minutes * 100, currentTimeFrame.Seconds * 100);
Range<DateTime> range = new Range<DateTime>((DateTime.Now - ts), DateTime.Now);
((SmartTrader)trader).RegisterHistoryCandles(this.SelectedSecurity, this.currentTimeFrame, range);
this.lastHistoryCandle = this.currentTimeFrame.GetCandleBounds(this.trader).Min;

// Дальнейшая отрисовка реал-тайм
public void DrawRealTimeCandles(CandleToken token, IEnumerable<Candle> candles)
{
	this.GuiAsync(() =>
	{
		IEnumerable<Candle> realTimeCandles = candles;

		// Для SmartCOM выводим только те свечки, которые не были отрисованы как исторические
		if (this.rbSmart.IsChecked == true)
			realTimeCandles = candles.Where(c => c.Time > this.lastHistoryCandle);

		chartWindow.DrawCandles(token, realTimeCandles);
	});
}

История забирается нормально, реалтайм тоже без проблем идет. Единственная и довольно неприятная проблема - бар, на котором происходит соединение. Он, вроде как и из истории не берется полноценным, и из реалтайма. В результате бар, на котором произошло подключение, не совпадает с реальностью. Есть какие-нибудь способы получить его правильно, чтобы как в КВИКе было, где все нормально? Кто как решает эту проблему?

ЗЫ. Самое интересное, что похожей проблемой грешат RightEdge и OpenQuant на разных источниках данных. Но тут-то у нас все в руках, вопрос только - как? 😊

Mikhail Sukhov
Mikhail Sukhov

Если последняя версия S#, то там сейчас есть SmartCandleSource для удобной работы с CandleManager. Это во-первых. А во-вторых, история у СмартКом не важнецкая. Лучше искать альтернативные источники.

Daenur
Daenur

Спасибо, буду разбираться.

Со Смартом вообще довольно много проблем, но нужно под него сделать. :(