Получение свечки
Atom
06.07.2012
eddardd


Здравствуйте. Вот я решил получить свечку по номеру средствами GetCandle. И проблема:

при вызове этой функции - ошибка: "Ссылка на объект не указывает на экземпляр объекта" За основу я взял пример SampleCandles. кинул кнопку и вбил код:


var _series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity, TimeSpan.FromMinutes(1));
var cand = _series.GetCandles(1);

SelectedSecurity не null. CandleManager объявлен. Но при вызове функции получения свечки такая беда. подскажите - в чем может быть проблема. ПС: как я понимаю, CandleManager работает на основе таблицы всех сделок? Тогда как можно данные брать из-за другой день


Теги:


Спасибо:


1 2  >
Alexander

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


Стэктрэйс нужен

С финама\ртс можно получать всё. См. на гидру, она это делает.

Спасибо:

eddardd

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


Вот это в exception:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Candles.CandleHelper.GetCandles(CandleSeries series, Int32 candleCount) в SampleCandles.MainWindow.FindPathClick(Object sender, RoutedEventArgs e) в D:\Install\Stock# 4.1.1\Samples\Quik\SampleCandles\MainWindow.xaml.cs:строка 44

Спасибо:

Alexander

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


series чему равно?

Спасибо:

eddardd

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


Извините, не тот стектрейс. Вот этот:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Candles.CandleHelper.GetCandle(CandleSeries series, Int32 candleIndex) в SampleCandles.MainWindow.FindPathClick(Object sender, RoutedEventArgs e) в D:\Install\Stock# 4.1.1\Samples\Quik\SampleCandles\MainWindow.xaml.cs:строка 44

Но ошибка та самая. Исходя из этого тыц нужно использовать эту функцию как GetCandle(CandleSeries series, Int32 candleIndex), но я не могу таким образом вызвать функцию. Получаеться вихвать только

var cand = _series.GetCandles(1);

серию возвращаю вот этим действием:

var _series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity, TimeSpan.FromMinutes(1));

но тут ексепшн вылазит.

_series.GetCandles(1) сделал наподобие Вашего туториала: тиц там внизу

Спасибо:

Alexander

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


Ничего не понял. С самого начала напишите

  1. стэктрейс
  2. чему равны все параметры в вызываемом методе. Лучше просто делать ToString() для параметров, я пойму.
Спасибо:

eddardd

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


Стектрейс:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Candles.CandleHelper.GetCandle(CandleSeries series, Int32 candleIndex) в SampleCandles.MainWindow.FindPathClick(Object sender, RoutedEventArgs e) в D:\Install\Stock# 4.1.1\Samples\Quik\SampleCandles\MainWindow.xaml.cs:строка 44 Параметры:

SelectedSecurity:

RIU2@UX

TimeSpan.FromMinutes(1)

00:01:00

_series

TimeFrameCandle RIU2@UX 00:01:00

Спасибо:

Alexander

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


series.CandleManager чему равен? Если null - то читайте доку как надо работать со свечками, см. примере.

Если нет - будем разбираться дальше.

Спасибо:

eddardd

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


Действительно null. Делал за этим примером ТИЦ и такое получается. Правда я не рисую график. Хотя б без визуализации

Спасибо:

Moadip

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


Написал небольшой пример для проверки.

CS & XAML


using System;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using System.ComponentModel;
using Ecng.Common;
using Ecng.Xaml;
using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.Algo.Candles;
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);

	    private readonly LogManager _logManager; 

		public MainWindow()
		{
			InitializeComponent();
            Path.Text = "e:\\Program Files\\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(-3);

						_isConnected = true;

					    btnExportDde.IsEnabled = true;

						_trader.NewSecurities += securities =>
						{
							if (_instr1 == null)
							{
								_instr1 = securities.FirstOrDefault(sec => sec.Code == _secCode1);
							}

						};

						_candleManager = new CandleManager(_trader);
					}

					_trader.Connect();

					_isConnected = true;
					btnConnect.Content = "Отключиться";
				}
			}
			else
			{
				_trader.Disconnect();

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

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            _series = new CandleSeries(typeof(TimeFrameCandle), _instr1, _timeFrame);

            _candleManager.Start(_series);
            _trader.AddInfoLog("Запуск получения свечек");
        }
     

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

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            _trader.AddInfoLog("Свечка OpenTime = {0}", _series.GetCandle<TimeFrameCandle>(1).OpenTime);
        }
    }
}




<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="282" Width="614" Closing="Window_Closing" Topmost="True" WindowStartupLocation="CenterScreen">
    <Grid>
        <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" />
            <Button Content="Экспорт DDE" Height="23" HorizontalAlignment="Left" Name="btnExportDde" VerticalAlignment="Top" Width="100" Click="btnExportDde_Click" IsEnabled="False" Grid.Column="1" Grid.Row="1" />
            <Button Content="Старт" Height="23" Name="btnStart" VerticalAlignment="Top" Click="btnStart_Click" HorizontalAlignment="Left" Width="100" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="1" />
            <TextBox Height="23" HorizontalAlignment="Left" Name="Path" VerticalAlignment="Top" Width="272" Grid.ColumnSpan="3"/>
            <Button Content="..." Name="FindPath" Click="FindPath_Click" HorizontalAlignment="Left" Width="28" Height="23" VerticalAlignment="Top" Grid.Column="3" />
        </Grid>
        <EcngTradingXaml:LogControl Margin="12,64,10,10" Name="logcontrol" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="318,35,0,0" Name="button1" VerticalAlignment="Top" Width="88" Click="button1_Click" />
    </Grid>
</Window>

По нажатию на кнопку берется время предпоследней свечки _series.GetCandle<TimeFrameCandle>(1).OpenTime Время такое странное потому что после запуска экспорта по dde начал нажимать на кнопку button и тики еще не успели все подгрузиться.

Вы после того как создали серию _series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity, TimeSpan.FromMinutes(1))

Вызываете метод CandleManager.Start() с созданной серией _candleManager.Start(_series)?

Спасибо:

eddardd

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


Спасибо за ответ. Да, вызывал. Но ничего не было. По поводу Вашего примера.. У меня не хочет запускатся, проблема в :

_trader.AddInfoLog("Свечка OpenTime = {0}", _series.GetCandle<TimeFrameCandle>(1).OpenTime);

Ошибка: > вместе с аргументами-типами нельзя использовать не универсальный метод ...CandleHelper.GetCandle(StockSharp.Algo.Candles.CandleSeries,int)

Извините за навязчивость, но в чем может быть проблема?

Спасибо:
1 2  >

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

loading
clippy