← Zurück

Свечи с таймфреймом менее секунды

Использую версию 3.2.11 Пробую сохранить сформированные свечи в тхт формат из Гидры. Таймфрейм для свечей менее секунды. Все, кроме отсутствия в дате долей секунд, формируется, похоже, правильно. В тхт экспортируются с точностью до секунды. Поменял txt_export_candles.st на:

$candles:{\(it.Time; format="dd.MM.yyyy"\), \(it.Time; format="HH:mm:ss.FFFFFFF"\), \(it.OpenPrice\), \(it.HighPrice\), \(it.LowPrice\), \(it.ClosePrice\), \(it.TotalVolume\) }$

Все равно точность только до секунд. Похоже, что метод candleManager.GetCandles(token) в CandlesWindow формирует свечи со свойством Time с точностью до секунд. Можно повысить точность свойства Time?

War dieses Thema hilfreich?

Thema teilen

Kommentare (9)

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

Alexander
Alexander

а можно провести распечатку получившихся свечей по GetCandle? с указанием как раз Time.

Есть подозрение что как раз тут всё нормально.

vk37
vk37 Autor

Доверяй, но проверяй :)

Распечатка во вложении. Построены свечи по RIZ1@RTS от 24.10.2011 с 10:00 до 10:02, таймфрейм - 0.01 сек.

private void Build_Click(object sender, RoutedEventArgs e)
{
	var candleManager = new CandleManager(Trades) { IsSyncRegister = true };

	CandleToken token = null;

	switch (CandleType.SelectedIndex)
	{
		case 0:
			token = candleManager.RegisterTimeFrameCandles(Security, ((DateTime)TimeFrame.DateTime).TimeOfDay);
			break;
		case 1:
			token = candleManager.RegisterTickCandles(Security, TickCount.Text.To<int>());
			break;
		case 2:
			token = candleManager.RegisterVolumeCandles(Security, Volume.Text.To<int>());
			break;
		case 3:
			token = candleManager.RegisterRangeCandles(Security, Range.Text.ToUnit(Security));
			break;
	}

	if (token == null)
		return;

    var candles = candleManager.GetCandles(token);

    foreach (var c in candles)
    {
        System.Diagnostics.Debug.WriteLine(c.Time.ToString("dd.MM.yyyy HH:mm:ss.FFFFFFF"));
    }

    BuildedCandles.ItemsSource = candles;
	ExportBtn.IsEnabled = ShowChart.IsEnabled = true;
}
Alexander
Alexander

Ок, посмотрим.

vk37
vk37 Autor

Из MSDN:

"FFFFFFF" Если ненулевое значение, то десятимиллионные доли секунды в значении даты и времени. Настраиваемый описатель формата "FFFFFFF" представляет семь наиболее значимых цифр секунд, то есть десятимиллионные доли секунды в значении даты и времени. При этом нули в конце или семь нулей не отображаются. 6/15/2009 13:45:30.6175425 -> 6175425 6/15/2009 13:45:30.0001150 -> 000115

Если бы доли секунды были, они бы отобразились :)

Mikhail Sukhov
Mikhail Sukhov

Пофиксили. Появиться на КодеПлекс в ближайшее время.

vk37
vk37 Autor

Спасибо.

vk37
vk37 Autor

Сделал робота на основе SampleSmartConsole. Столкнулся с тем, что отсутствуют доли секунд - теперь в сделках и в тиковых свечах:

CandleManager.NewCandles += (token, candles) =>
{
    StringBuilder b = new StringBuilder();

    foreach (var candle in candles)
        if (candle.Security.Id == Security.Id && candle is TickCandle)
            b.Append("{0:dd.MM.yyyy}, {0:HH:mm:ss.FFFFFFF}, {1}, {2}, {3}, {4}, {5}{6}"
                .Put(candle.Time,
                candle.OpenPrice,
                candle.HighPrice,
                candle.LowPrice,
                candle.ClosePrice,
                candle.TotalVolume,
                Environment.NewLine));

    using (StreamWriter file = new StreamWriter(@"Tick", true))
        file.Write(b.ToString());

};

Trader.NewTrades += trades =>
{
    StringBuilder b = new StringBuilder();

    foreach (var trade in trades)
        b.Append("{0:dd.MM.yyyy}, {0:HH:mm:ss.FFFFFFF}, {1}, {1}, {1}, {1}, {2}{3}"
            .Put(trade.Time, trade.Price, trade.Volume, Environment.NewLine));

    using (StreamWriter file = new StreamWriter(@"Tick", true))
        file.Write(b.ToString());
};

Я правильно понимаю, что ваш фикс пофиксит эту ситуацию тоже? Или мне просто нужно попробовать более новую версию? Или доли секунд Смарт не предоставляет? :)

Mikhail Sukhov
Mikhail Sukhov

vk37: Или доли секунд Смарт не предоставляет? :)

Конечно, нет.

vk37
vk37 Autor

Mikhail Sukhov:

vk37: Или доли секунд Смарт не предоставляет? :)

Конечно, нет.

Что-то они пожадничали :) На Плазе то же самое?