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

склейка данные гидры + реал-тайм
Atom
7/12/2012
alexry


Добрый день, коллеги. Пытаюсь склеить вчерашние сохранённые Гидрой данные (полный путь - 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;
        }
    }
}




Tags:


Thanks:


1 2  >
alexry

Avatar
Date: 7/12/2012
Reply


Код 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>
Thanks:

esper

Avatar
Date: 7/12/2012
Reply


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

Thanks: alexry

Moadip

Avatar
Date: 7/12/2012
Reply


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

У вас добавление источника 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"

Thanks:

Moadip

Avatar
Date: 7/12/2012
Reply


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


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 и добавление источников
                        _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);
                    }

                    _trader.Connect();

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

            else
            {
                _trader.Disconnect();

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

Thanks: alexry

alexry

Avatar
Date: 7/12/2012
Reply


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

Thanks:

alexry

Avatar
Date: 7/12/2012
Reply


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

Thanks:

alexry

Avatar
Date: 7/16/2012
Reply


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

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

QuikTrader | 16.07.2012 17:13:00.222 | Ошибка | System.InvalidOperationException: Невозможно изменить сформированную свечку. в StockSharp.Algo.Candles.Candle.ThrowIfFinished() в StockSharp.Algo.Candles.Compression.CandleBuilder1.UpdateCandle(CandleSeries series, TCandle candle, ICandleBuilderSourceValue value) в StockSharp.Algo.Candles.Compression.CandleBuilder1.ProcessValue(CandleSeries series, Candle currentCandle, ICandleBuilderSourceValue value) в StockSharp.Algo.Candles.Compression.CandleBuilder1.OnNewValues(CandleSeries series, IEnumerable1 values) в StockSharp.Algo.Candles.Compression.CandleBuilder1.#=qqLF1yNlv8Y1iCs8201gCqwEWTHqUPr6NOKAboLZN3gc=.#=qZIvlEwumCnLOHChv0nHsiIC6spSmAHgVPmGRzuP_IIc=.#=qBVkmf24yUdAZHbJqngg1CQ==(IEnumerable1 #=q$BtNO0P60jQ3eV3pl_YPCg==) в #=q3vR2Bk8Bc6GNOs_cwI75FftaJTW2Uwcp0EOp9C1J4kU29dUY7RAcSR22BtL12y0Nc0DdM0dVIBhEF3E8OckZaw==.#=qpGEJppfTuh976_eXaWWyCQ==(CandleSeries #=qMUF6L0p0ecEtl0dZ4hBlLA==, #=qMKTRehQ7dpA7THrX$XNB8Q== #=qapfwAKc25gG2P8E_kCD3Fw==) в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action2 handler, T1 arg1, T2 arg2) в StockSharp.Algo.Candles.Compression.BaseCandleBuilderSource.RaiseProcessing(CandleSeries series, IEnumerable1 values) в StockSharp.Algo.Candles.Compression.RealTimeCandleBuilderSource1.AddNewValues(IEnumerable1 values) в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в Ecng.ComponentModel.EventsContainer1.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.Action2.Invoke(T1 arg1, T2 arg2) в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action2 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.Action2.Invoke(T1 arg1, T2 arg2) в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action2 handler, T1 arg1, T2 arg2) в StockSharp.Algo.Candles.Compression.CandleBuilder1.RaiseProcessing(CandleSeries series, Candle candle) в StockSharp.Algo.Candles.Compression.CandleBuilder1.OnNewValues(CandleSeries series, IEnumerable1 values) в StockSharp.Algo.Candles.Compression.CandleBuilder1.#=qqLF1yNlv8Y1iCs8201gCqwEWTHqUPr6NOKAboLZN3gc=.#=qZIvlEwumCnLOHChv0nHsiIC6spSmAHgVPmGRzuP_IIc=.#=qBVkmf24yUdAZHbJqngg1CQ==(IEnumerable1 #=q$BtNO0P60jQ3eV3pl_YPCg==) в #=q3vR2Bk8Bc6GNOs_cwI75FftaJTW2Uwcp0EOp9C1J4kU29dUY7RAcSR22BtL12y0Nc0DdM0dVIBhEF3E8OckZaw==.#=qpGEJppfTuh976_eXaWWyCQ==(CandleSeries #=qMUF6L0p0ecEtl0dZ4hBlLA==, #=qMKTRehQ7dpA7THrX$XNB8Q== #=qapfwAKc25gG2P8E_kCD3Fw==) в Ecng.Common.DelegateHelper.SafeInvoke[T1,T2](Action2 handler, T1 arg1, T2 arg2) в StockSharp.Algo.Candles.Compression.BaseCandleBuilderSource.RaiseProcessing(CandleSeries series, IEnumerable1 values) в StockSharp.Algo.Candles.Compression.RealTimeCandleBuilderSource1.AddNewValues(IEnumerable1 values) в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в Ecng.ComponentModel.EventsContainer1.Raise(IEnumerable1 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|

Thanks:

alexry

Avatar
Date: 7/16/2012
Reply


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


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;
        }
    }
}
Thanks:

alexry

Avatar
Date: 7/18/2012
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 7/18/2012
Reply


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

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

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy