склейка данные гидры + реал-тайм
Atom
12.07.2012


Добрый день, коллеги.
Пытаюсь склеить вчерашние сохранённые Гидрой данные (полный путь - c:\GidraR\RIU2@RTS\2012_07_11\trades.bin). После подключения и запуска DDE создаётся CandleManager и дальше как в документации по склейке свечек. В лог выводит свечи с начала текущего дня, за вчера не выводит. Подскажите пожалуйста, в чём может быть проблема? Прилагаю код.

Код
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;
        }
    }
}



Теги:


Спасибо:


< 1 2 
Gii

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


alexry Перейти
Подключал сегодня (17.07) робота, берёт данные из хранилища за понедельник, DDE за вторник, всё нормально работает.

Добрый день! Столкнулся с такой же проблемой по склеиванию исторических и реальных данных.
Нашел ваш пост с примером. Запустил на выходе получил только реал данные.
Проблемы с указанием правильного пути изначально не было
Код


 private const string HistoryPath = @"D:\Data\"; // Путь к данным D:\Data\LKOH@EQBR\...



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

Код


_trader.AddInfoLog(string.Format("||{0:T} | {1} ||", _der.OpenTime,....);



который выводит только время без даты. Выводили ли вы свечки с датой?
Если да (выводили с датой), то в чем магия?

С уважением GII.
Спасибо:

Gii

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


Mikhail Sukhov Перейти


Я так и не понял, какой баг.


Добрый день!

Баг ли, не могу утверждать но проблема есть.
Тестирую робота на "Quik-Junior", StockSharp v4.1.2. В результате долгих и мучительных опытов выяснилось что, на рабочем "Quik" данные склеиваются, а при работе с "Quik-Junior" нет. Возможно это связанно с разными Id Ц.Б. Так для "Quik" Id="SBER@EQBR" (в соответствии со спецификацией контракта), а для "Quik-Junior" Id="SBER@QJSIM".

С уважением Gii
Спасибо:
< 1 2 

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

loading
clippy