Не приходят данные в CandleManager
Доброго дня!
Пытаюсь получить Real Time данные через SmartCom. S# версия 4.0.22
Однако не происходят события на получение/изменение свечей.
Подскажи, где у меня ошибка ?
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using Ecng.Collections;
using Ecng.Common;
using Ecng.ComponentModel;
using Ecng.Xaml;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Logging;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Smart;
using StockSharp.Xaml;
namespace SimpleRobot
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private string _login = "";
private string _password = "";
private string _account = "";
private string _ipAddress = "95.131.26.246";
private string secCode = "RIM2";
private readonly TimeSpan _timeFrame = (TimeSpan)SmartTimeFrames.Minute15; //Таймфрейм
private static Portfolio _portfolio; //Портфель
private Security _sec; //Эмитент - Акция/Фьючерс/Опцион
private SmartTrader _trader; //Шлюз для SmartCOM
private Logger _logger; //Логгер событий
private CandleManager _candleManager; //Менеджер свечей
private bool _isConnected = false; //Подключены ли
private bool _isStartRecivePorfolio = false; //Начилась ли загрузка портфелей
private bool _isStartReciveSecurity = false; //Начилась ли загрузка эмитентов
private CandleToken token;
public MainWindow()
{
InitializeComponent();
}
//Инициализация робота
private void button1_Click(object sender, RoutedEventArgs e)
{
//Логгер
_logger = new Logger(textBox1);
//Ip address
System.Net.IPAddress addr = System.Net.IPAddress.Parse(_ipAddress);
System.Net.IPEndPoint server = new System.Net.IPEndPoint(addr, 8090);
//Create Smart Trade шлюз
_trader = new SmartTrader(_login, _password, server);
//Подписываемся на все необходимые события
_trader.Connected += Trader_Connected;
_trader.Disconnected += Trader_Disconnected;
_trader.NewHistoryCandles += Trader_GetHistoryCandles;
_trader.ReConnectionSettings.ConnectionRestored += Trader_ConnectionRestored;
_trader.ConnectionError += Trader_ConnectionError;
_trader.NewPortfolios += Trader_NewPortfolios;
_trader.NewSecurities += Trader_NewSecurities;
// инициализируем механизм переподключения (будет автоматически соединяться
// каждые 10 секунд, если шлюз потеряется связь с сервером)
_trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
_trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
_logger.Write("Инициализия программы");
}
//Соединение и передача данных
private void button2_Click(object sender, RoutedEventArgs e)
{
//Устанавливаем соединение
_trader.Connect();
}
//Запуск робота
private void button3_Click(object sender, RoutedEventArgs e)
{
//Создаем менеджер свечей и подписываемся на события
_candleManager = new CandleManager(_trader);
_candleManager.CandlesStarted += CandleManager_GetCandles;
_candleManager.CandlesChanged += CandleManager_GetCandles;
_candleManager.CandlesFinished += CandleManager_GetCandles;
//Устанавливаени таймфрейм для менеджер свечей
TimeSpan currentTimeFrame = TimeSpan.FromSeconds(60);
token = _candleManager.RegisterTimeFrameCandles(_sec, currentTimeFrame);
//token = _candleManager.RegisterTimeFrameCandles(_sec, 1000);
/*
var candles = _candleManager.GetTimeFrameCandles(_sec, _timeFrame);
foreach (Candle candle in candles)
{
//Выводим свечи в формате OHLC
_logger.Write(candle.Time.ToString() + " " + candle.OpenPrice + " " + candle.HighPrice + " " + candle.LowPrice + " " + candle.ClosePrice + " " + candle.CloseVolume);
}
*/
}
private void Trader_Connected()
{
this.GuiAsync(() =>
{
_isConnected = true;
_logger.Write("Успешно подключены");
//Начинаем Экспорт данных
_trader.StartExport();
});
}
private void Trader_Disconnected()
{
this.GuiAsync(() =>
{
if (_isConnected)
{
_isConnected = false;
_trader.Disconnect();
_logger.Write("Отключены");
}
});
}
private void Trader_GetHistoryCandles(CandleToken token, IEnumerable<TimeFrameCandle> candles)
{
this.GuiAsync(() =>
{
_logger.Write("Принимаю исторические данные");
//_candlesStarted.SafeInvoke(token, candles);
//_candlesFinished.SafeInvoke(token, candles);
});
}
private void Trader_ConnectionRestored()
{
this.GuiAsync(() =>
{
_logger.Write("Соединение восстановлено");
});
}
private void Trader_ConnectionError(Exception e)
{
this.GuiAsync(() =>
{
_logger.Write("ОШИБКА: Ошибка соединения" + e.Message + " [" + e.ToString() + "]");
});
}
private void Trader_NewPortfolios(IEnumerable<Portfolio> portfolios)
{
this.GuiAsync(() =>
{
if (_isConnected)
{
if (!_isStartRecivePorfolio)
{
_logger.Write("Получение портфелей...");
_isStartRecivePorfolio = true;
}
// необходимое условие работы в SmartCOM
int pCount = 0;
foreach (Portfolio p in portfolios)
{
pCount++;
_trader.RegisterPortfolio(p);
_logger.Write("Инициализация портфеля " + p.ToString());
}
if (pCount == 0)
{
_logger.Write("Портфели не найдены");
}
else
{
// находим нужный портфель и присваиваем его переменной _portfolio
_portfolio = portfolios.FirstOrDefault(p => p.Name == _account);
if (_portfolio != null)
{
_logger.Write("Портфель " + _account + " появился");
}
}
}
});
}
private void Trader_NewSecurities(IEnumerable<Security> securities)
{
this.GuiAsync(() =>
{
if (_isConnected)
{
if (!_isStartReciveSecurity)
{
_logger.Write("Получение инструментов...");
_isStartReciveSecurity = true;
}
if (_isConnected)
{
var sec = securities.FirstOrDefault(s => s.Code == secCode && s.Type == SecurityTypes.Future);
if (sec != null)
{
_logger.Write("Инструмент " + secCode + " успешно найден");
_sec = sec;
}
}
}
});
}
private void CandleManager_GetCandles(CandleToken token, IEnumerable<Candle> candles)
{
this.GuiAsync(() =>
{
foreach (Candle candle in candles)
{
//Выводим свечи в формате OHLC
_logger.Write(candle.Time.ToString() + " " + candle.OpenPrice + " " + candle.HighPrice + " " + candle.LowPrice + " " + candle.ClosePrice + " " + candle.CloseVolume);
}
});
}
}
}