склейка данные гидры + реал-тайм
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;
        }
    }
}



Теги:


Спасибо:




12 Ответов
alexry

Фотография
Курсы
Дата: 12.07.2012
Ответить


Код XAML.

Код
<Window x:Class="Candles.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:EcngTradingXaml="clr-namespace:StockSharp.Xaml;assembly=StockSharp.Xaml"
        Title="" Height="673" Width="835" Closing="Window_Closing" Topmost="True" WindowStartupLocation="CenterScreen" Opacity="50">
    <Grid Background="#FF9999C7" HorizontalAlignment="Stretch" Width="Auto" VerticalAlignment="Stretch" Height="Auto">
        <Grid  HorizontalAlignment="Left" Name="grid1" VerticalAlignment="Top" Margin="12,12,0,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="72" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Button Content="Подключиться" Height="23" HorizontalAlignment="Left" Name="btnConnect" VerticalAlignment="Top" Width="100" Click="btnConnect_Click" Grid.Row="1" Margin="-2,7,0,0" BorderBrush="#FF791900" />
            <Button Content="Экспорт DDE" Height="23" HorizontalAlignment="Left" Name="btnExportDde" VerticalAlignment="Top" Width="100" Click="btnExportDde_Click" IsEnabled="False" Grid.Column="1" Grid.Row="1" Margin="0,7,0,0" BorderBrush="#FF791950" />
            <Button Content="Старт" Height="23" Name="btnStart" VerticalAlignment="Top" Click="btnStart_Click" HorizontalAlignment="Left" Width="100" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="1" Margin="0,7,0,0" BorderBrush="#FF791919" />
            <TextBox Height="23" HorizontalAlignment="Left" Name="Path" VerticalAlignment="Top" Width="272" Grid.ColumnSpan="3" Background="#FF40A8C7" BorderBrush="#FF79190C" />
            <Button Content="..." Name="FindPath" Click="FindPath_Click" HorizontalAlignment="Left" Width="22" Height="23" VerticalAlignment="Top" Grid.Column="3" DataContext="{Binding}" Visibility="Visible" Background="#FF3BA1B7" BorderBrush="#FF791952" Margin="2,0,0,0" />
        </Grid>
        <EcngTradingXaml:LogControl Margin="12,128,10,12" Name="logcontrol" Visibility="Visible" Foreground="#FF404080" Background="#FF09090D" BorderBrush="#FF791927" DataContext="{Binding}" />
    </Grid>
</Window>

Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 12.07.2012
Ответить


Путь к тикам неверный, не должно там быть RIU2@RTS\2012_07_11
Спасибо: alexry

Moadip

Фотография
Автор статей Программист
Дата: 12.07.2012
Ответить


Еще один нюанс. Добавление источников должно проходить ДО запуска экспорта, иначе будут пропуски тиков.

У вас добавление источника Trader, при создании экземпляра класса CandleManager. И добавление в качестве источника файлов гидры
Код

_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);


Происходит в обработчике нажатия на кнопку "Старт", которая я так понимаю нажимается после того как нажата кнопка "Экспорт DDE"
Спасибо:

Moadip

Фотография
Автор статей Программист
Дата: 12.07.2012
Ответить


Добавление источников надо перенести в обработчик нажатия кнопки "Подключиться". Допустим так:
Спасибо: alexry

alexry

Фотография
Курсы
Дата: 12.07.2012
Ответить


Esper, так и есть. Поставил путь с:\GidraR\ и всё заработало. Понятно теперь, что storageRegistry видит пути, созданные Гидрой (я пытался указать явно). Благодарю.
Автор топика
Спасибо:

alexry

Фотография
Курсы
Дата: 12.07.2012
Ответить


Moadip, спасибо за замечание. Изначально там и был код, но в процессе проб, перенёс. Сейчас вернул обратно.
Кстати давно хотел сказать Вам спасибо за скелет робота. Ваши посты содержательны.
Автор топика
Спасибо:

alexry

Фотография
Курсы
Дата: 16.07.2012
Ответить


Добрый день, коллеги.
Хочу ещё раз обратиться к Вам в этой теме.
Добавил к вышенаписанному коду небольшой фрагмент рассчитывающий простую скользящую среднюю.
Запускал в пятницу - подкачивает данные за четверг из хранилища, строит среднюю, далее
за пятницу по DDE, строит среднюю. Вообщем всё нормально.
Включаю сегодня - за пятницу подгружает, строит, доходит до понедельника - выдаёт ошибку.
Причём первую свечу понедельника выдаёт, остальные нет.
Если запускать без кода DrawMA(), то считывает свечи за пятницу - понедельник без ошибок.
Думаю, что связанно с методом GetCandle(), именно при считывании данных из хранилища за пятницу, и дальнейшем
получении данных по DDE в понедельник, т. к. на неделе таких проблем не было.
Подскажите, пожалуйста, как это обойти?
Заранее благодарен.


Запись в логе (читать снизу вверх):

QuikTrader | 16.07.2012 17:13:00.222 | Ошибка | System.InvalidOperationException: Невозможно изменить сформированную свечку.
в StockSharp.Algo.Candles.Candle.ThrowIfFinished()
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.UpdateCandle(CandleSeries series, TCandle candle, ICandleBuilderSourceValue value)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.ProcessValue(CandleSeries series, Candle currentCandle, ICandleBuilderSourceValue value)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.OnNewValues(CandleSeries series, IEnumerable`1 values)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.#=qqLF1yNlv8Y1iCs8201gCqwEWTHqUPr6NOKAboLZN3gc=.#=qZIvlEwumCnLOHChv0nHsiIC6spSmAHgVPmGRzuP_IIc=.#=qBVkmf24yUdAZHbJqngg1CQ==(IEnumerable`1 #=q$BtNO0P60jQ3eV3pl_YPCg==)
в #=q3vR2Bk8Bc6GNOs_cwI75FftaJTW2Uwcp0EOp9C1J4kU29dUY7RAcSR22BtL12y0Nc0DdM0dVIBhEF3E8OckZaw==.#=qpGEJppfTuh976_eXaWWyCQ==(CandleSeries #=qMUF6L0p0ecEtl0dZ4hBlLA==, #=qMKTRehQ7dpA7THrX$XNB8Q== #=qapfwAKc25gG2P8E_kCD3Fw==)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
в StockSharp.Algo.Candles.Compression.BaseCandleBuilderSource.RaiseProcessing(CandleSeries series, IEnumerable`1 values)
в StockSharp.Algo.Candles.Compression.RealTimeCandleBuilderSource`1.AddNewValues(IEnumerable`1 values)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)



QuikTrader | 16.07.2012 17:12:57.569 | Ошибка | System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в Candles.MainWindow.DrawMA() в C:\Users\Пользователь\Documents\Visual Studio 2010\Projects\WpfApplication2\WpfApplication2\MainWindow.xaml.cs:строка 159
в Candles.MainWindow.StopVisor(CandleSeries series, Candle candle) в C:\Users\Пользователь\Documents\Visual Studio 2010\Projects\WpfApplication2\WpfApplication2\MainWindow.xaml.cs:строка 149
в System.Action`2.Invoke(T1 arg1, T2 arg2)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
в StockSharp.Algo.Candles.CandleManager.#=qJpMNGLwhBTGBC$zwZBAVKCh1tijPGRG_4RZ133Gut8I=.#=qGRBYJzrsOyd6PdZzWo7fFA==(Candle #=qEZYmvgjYlc$afCY9fBg04w==)
в #=q3vR2Bk8Bc6GNOs_cwI75FftaJTW2Uwcp0EOp9C1J4kU29dUY7RAcSR22BtL12y0Nc0DdM0dVIBhEF3E8OckZaw==.#=qpGEJppfTuh976_eXaWWyCQ==(CandleSeries #=qMUF6L0p0ecEtl0dZ4hBlLA==, #=qMKTRehQ7dpA7THrX$XNB8Q== #=qapfwAKc25gG2P8E_kCD3Fw==)
в System.Action`2.Invoke(T1 arg1, T2 arg2)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.RaiseProcessing(CandleSeries series, Candle candle)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.OnNewValues(CandleSeries series, IEnumerable`1 values)
в StockSharp.Algo.Candles.Compression.CandleBuilder`1.#=qqLF1yNlv8Y1iCs8201gCqwEWTHqUPr6NOKAboLZN3gc=.#=qZIvlEwumCnLOHChv0nHsiIC6spSmAHgVPmGRzuP_IIc=.#=qBVkmf24yUdAZHbJqngg1CQ==(IEnumerable`1 #=q$BtNO0P60jQ3eV3pl_YPCg==)
в #=q3vR2Bk8Bc6GNOs_cwI75FftaJTW2Uwcp0EOp9C1J4kU29dUY7RAcSR22BtL12y0Nc0DdM0dVIBhEF3E8OckZaw==.#=qpGEJppfTuh976_eXaWWyCQ==(CandleSeries #=qMUF6L0p0ecEtl0dZ4hBlLA==, #=qMKTRehQ7dpA7THrX$XNB8Q== #=qapfwAKc25gG2P8E_kCD3Fw==)
в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action`2 handler, T1 arg1, T2 arg2)
в StockSharp.Algo.Candles.Compression.BaseCandleBuilderSource.RaiseProcessing(CandleSeries series, IEnumerable`1 values)
в StockSharp.Algo.Candles.Compression.RealTimeCandleBuilderSource`1.AddNewValues(IEnumerable`1 values)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)


QuikTrader | 16.07.2012 17:12:57.560 | | |10:01:00|136460|136460|135915|136135|
QuikTrader | 16.07.2012 17:12:57.461 | | --------------------[23:50:00]--------------------------------Машка простая------------------[136431,19]-----------------------
QuikTrader | 16.07.2012 17:12:57.461 | | |23:50:00|136495,00000|136525,00000|136435,00000|136475,00000|
QuikTrader | 16.07.2012 17:12:55.023 | | --------------------[23:49:00]--------------------------------Машка простая------------------[136430,24]-----------------------
QuikTrader | 16.07.2012 17:12:55.023 | | |23:49:00|136525,00000|136530,00000|136470,00000|136500,00000|
QuikTrader | 16.07.2012 17:12:55.011 | | --------------------[23:48:00]--------------------------------Машка простая------------------[136427,62]-----------------------
QuikTrader | 16.07.2012 17:12:55.011 | | |23:48:00|136440,00000|136530,00000|136430,00000|136530,00000|
QuikTrader | 16.07.2012 17:12:54.990 | | --------------------[23:47:00]--------------------------------Машка простая------------------[136422,62]-----------------------
QuikTrader | 16.07.2012 17:12:54.990 | | |23:47:00|136500,00000|136510,00000|136440,00000|136445,00000|
QuikTrader | 16.07.2012 17:12:54.984 | | --------------------[23:46:00]--------------------------------Машка простая------------------[136425,00]-----------------------
QuikTrader | 16.07.2012 17:12:54.984 | | |23:46:00|136535,00000|136540,00000|136450,00000|136510,00000|
QuikTrader | 16.07.2012 17:12:54.963 | | --------------------[23:45:00]--------------------------------Машка простая------------------[136423,57]-----------------------
QuikTrader | 16.07.2012 17:12:54.963 | | |23:45:00|136520,00000|136550,00000|136500,00000|136535,00000|
QuikTrader | 16.07.2012 17:12:54.951 | | --------------------[23:44:00]--------------------------------Машка простая------------------[136419,52]-----------------------
QuikTrader | 16.07.2012 17:12:54.951 | | |23:44:00|136490,00000|136540,00000|136485,00000|136525,00000|
QuikTrader | 16.07.2012 17:12:54.938 | | --------------------[23:43:00]--------------------------------Машка простая------------------[136415,71]-----------------------
QuikTrader | 16.07.2012 17:12:54.938 | | |23:43:00|136465,00000|136515,00000|136460,00000|136490,00000|
QuikTrader | 16.07.2012 17:12:54.919 | | --------------------[23:42:00]--------------------------------Машка простая------------------[136413,33]-----------------------
QuikTrader | 16.07.2012 17:12:54.919 | | |23:42:00|136410,00000|136490,00000|136400,00000|136480,00000|
QuikTrader | 16.07.2012 17:12:54.911 | | --------------------[23:41:00]--------------------------------Машка простая------------------[136411,90]-----------------------
QuikTrader | 16.07.2012 17:12:54.911 | | |23:41:00|136430,00000|136445,00000|136405,00000|136410,00000|
QuikTrader | 16.07.2012 17:12:54.906 | | --------------------[23:40:00]--------------------------------Машка простая------------------[136412,86]-----------------------
QuikTrader | 16.07.2012 17:12:54.906 | | |23:40:00|136400,00000|136460,00000|136400,00000|136430,00000|


Автор топика
Спасибо:

alexry

Фотография
Курсы
Дата: 16.07.2012
Ответить


Код с скользящей средней.
Код

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, 13);
        readonly DateTime _endTime = DateTime.MaxValue;

        private const string _historyPath = @"c:\GidraR\";

        private readonly LogManager _logManager;

        public int i = 0;
        public int k;

        public decimal MA;
        public int perMA = 21;
        public int smeMA = 0;
        public decimal sumMA = 0;

        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);
                            }
                        };

                        _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;
                    }

                    _trader.Connect();

                    _isConnected = true;
                    btnConnect.Content = "Отключиться";
                }
            }

            else
            {
                _trader.Disconnect();

                _isConnected = false;
                btnConnect.Content = "Подключиться";
            }
        }

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            _trader.AddInfoLog("Запуск получения свечек");

            _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));
                DrawMA();
                i++;
            }
        }

        private void DrawMA()
        {
            if (i >= perMA + smeMA)
            {
                if (sumMA > 0)
                    sumMA = sumMA - _series.GetCandle<TimeFrameCandle>(perMA + smeMA).ClosePrice + _series.GetCandle<TimeFrameCandle>(smeMA).ClosePrice;
                else
                {
                    for (k = 0; k < perMA; k++)
                        sumMA = sumMA + _series.GetCandle<TimeFrameCandle>(k + smeMA).ClosePrice;
                }

                MA = sumMA / perMA;

                _trader.AddInfoLog("--------------------[{0:T}]--------------------------------Машка простая------------------[{1:F}]-----------------------", _series.GetCandle<TimeFrameCandle>(0).CloseTime, MA);
            }
        }

        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;
        }
    }
}
Автор топика
Спасибо:

alexry

Фотография
Курсы
Дата: 17.07.2012
Ответить


Подключал сегодня (17.07) робота, берёт данные из хранилища за понедельник, DDE за вторник, всё нормально работает.
Если закачивать данные (из хранилища) с пятницы, то при переходе на данные (из хранилища) за понедельник
программа стопорится, и выдаёт исключения подобные вышенаписанным. Некритично, но наверное баг.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 17.07.2012
Ответить


alexry Перейти
Некритично, но наверное баг.


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

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
Спасибо:


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

loading
clippy