склейка данные гидры + реал-тайм
Добрый день, коллеги.
Пытаюсь склеить вчерашние сохранённые Гидрой данные (полный путь - c:\GidraR\RIU2@RTS\2012_07_11\trades.bin). После подключения и запуска DDE создаётся CandleManager и дальше как в документации по склейке свечек. В лог выводит свечи с начала текущего дня, за вчера не выводит. Подскажите пожалуйста, в чём может быть проблема? Прилагаю код.
Code
using System;
using System.Threading;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.ComponentModel;
using System.Configuration;
using Ecng.Common;
using Ecng.Xaml;
using Ecng.ComponentModel;
using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Candles.Compression;
using StockSharp.Algo.Storages;
using StockSharp.Xaml;
using StockSharp.Algo.Logging;
using MessageBox = System.Windows.MessageBox;
namespace Candles
{
public partial class MainWindow
{
QuikTrader _trader;
private Security _instr1;
const string _secCode1 = "RIU2";
private CandleManager _candleManager;
private CandleSeries _series;
readonly TimeSpan _timeFrame = TimeSpan.FromMinutes(1);
readonly DateTime _startTime = new DateTime(2012, 7, 11);
readonly DateTime _endTime = DateTime.MaxValue;
private const string _historyPath = @"c:\GidraR\RIU2@RTS\2012_07_11";
private readonly LogManager _logManager;
public Candle der = null;
public MainWindow()
{
InitializeComponent();
Path.Text = "c:\\Program Files\\QUIK\\QUIK";
_logManager = new LogManager();
_logManager.Listeners.Add(new GuiLogListener(logcontrol));
}
private void FindPath_Click(object sender, RoutedEventArgs e)
{
var dlg = new FolderBrowserDialog();
if (!Path.Text.IsEmpty())
dlg.SelectedPath = Path.Text;
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Path.Text = dlg.SelectedPath;
}
}
bool _isConnected;
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
if (!_isConnected)
{
if (Path.Text.IsEmpty())
MessageBox.Show(this, "Путь к Quik не выбран");
else
{
if (_trader == null)
{
_trader = new QuikTrader(Path.Text);
_logManager.Sources.Add(_trader);
_trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
_trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
_trader.ReConnectionSettings.ConnectionRestored += () => this.GuiAsync(() => MessageBox.Show(this, "Соединение восстановлено"));
_trader.MarketTimeOffset = TimeSpan.FromHours(0);
_isConnected = true;
btnExportDde.IsEnabled = true;
_trader.NewSecurities += securities =>
{
if (_instr1 == null)
{
_instr1 = securities.FirstOrDefault(sec => sec.Code == _secCode1);
}
};
}
_trader.Connect();
_isConnected = true;
btnConnect.Content = "Отключиться";
}
}
else
{
_trader.Disconnect();
_isConnected = false;
btnConnect.Content = "Подключиться";
}
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
_trader.AddInfoLog("Запуск получения свечек");
_candleManager = new CandleManager(_trader);
var storageRegistry = new StorageRegistry();
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = _historyPath;
var cbs = new TradeStorageCandleBuilderSource { StorageRegistry = storageRegistry };
_candleManager.Sources.OfType<TimeFrameCandleBuilder>().Single().Sources.Add(cbs);
_candleManager.Processing += StopVisor;
_series = new CandleSeries(typeof(TimeFrameCandle), _instr1, _timeFrame);
_candleManager.Start(_series, _startTime, _endTime);
}
private void StopVisor(CandleSeries series, Candle candle)
{
if (candle.State == CandleStates.Finished)
{
der = _series.GetCandle<TimeFrameCandle>(0);
_trader.AddInfoLog(string.Format("|{0:T}|{1}|{2}|{3}|{4}|", der.CloseTime, der.OpenPrice, der.HighPrice, der.LowPrice, der.ClosePrice));
}
}
private void Window_Closing(object sender, CancelEventArgs e)
{
if (_trader != null)
{
if (_isDdeStarted) StopDde();
_trader.Dispose();
}
}
private void btnExportDde_Click(object sender, RoutedEventArgs e)
{
if (_isDdeStarted) StopDde();
else StartDde();
}
bool _isDdeStarted;
private void StartDde()
{
_trader.StartExport();
_isDdeStarted = true;
}
private void StopDde()
{
_trader.StopExport();
_isDdeStarted = false;
}
}
}