← Назад

Фичи/Баги/Пожелания для AlfaConnector

Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Комментарии (145)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Sergey Masyura
Sergey Masyura Автор

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Doctor
Doctor

sergey.masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый День Сергей,

А открытый интерес поддеживается альфа-коннектором? Или эти идеи пока для будущих фич?

Спасибо,

Mikhail Sukhov
Mikhail Sukhov

Doctor: А открытый интерес поддеживается альфа-коннектором? Или эти идеи пока для будущих фич?

Исходники все на http://stocksharp.codeplex.com/ Открытый интерес ждет вас.😂

Sergey Masyura
Sergey Masyura Автор

Doctor:

sergey.masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый День Сергей,

А открытый интерес поддеживается альфа-коннектором? Или эти идеи пока для будущих фич?

Спасибо,

ОИ добавить делов на 10 минут. Последнее время в основном занимаюсь разработкой роботов на заказ. Как будет время обязательно добавлю.

Doctor
Doctor

sergey.masyura:

Doctor:

sergey.masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый День Сергей,

А открытый интерес поддеживается альфа-коннектором? Или эти идеи пока для будущих фич?

Спасибо,

ОИ добавить делов на 10 минут. Последнее время в основном занимаюсь разработкой роботов на заказ. Как будет время обязательно добавлю.

Да, глянул код, похоже надо open_pos_qty добавить в фильтр и сохранить его в свойствах security во время OnProcessSecurities. Попробую.

Sergey Masyura
Sergey Masyura Автор

Doctor:

sergey.masyura:

Doctor:

sergey.masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый День Сергей,

А открытый интерес поддеживается альфа-коннектором? Или эти идеи пока для будущих фич?

Спасибо,

ОИ добавить делов на 10 минут. Последнее время в основном занимаюсь разработкой роботов на заказ. Как будет время обязательно добавлю.

Да, глянул код, похоже надо open_pos_qty добавить в фильтр и сохранить его в свойствах security во время OnProcessSecurities. Попробую.

Добавил открытый интерес для инструментов.

Андрей К.
Андрей К.

Sergey Masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый день, Сергей!

На мой взгляд, добавление заявок типа следящий стоп наиболее ожидаемо из вышеперечисленных доработок. В последней версии такие заявки так и не появились. Может я просмотрел? Тогда прошу прощения...

Sergey Masyura
Sergey Masyura Автор

Andrey270770:

Sergey Masyura:

sergey.masyura: Основная функциональность в альфа-коннекторе завершена.

Код свободно доступен на http://stocksharpconnectors.codeplex.com/SourceControl/list/changesets

Из основных явных недоделок можно выделить:

  • отсутствие поддержки опционов
  • отсутствие поддержки стоп-ордеров.

В связи с этим, если есть активные пользователи данного коннектора, буду рад услышать замечаниях о багах, фичах и пожеланиях.

Несколько идей для доработки:

  • Добавить заявки типа следящий стоп (trailing stop)
  • Добавить открытый интерес
  • Добавить поддержку загрузки исторических данных.

У кого еще какие будут варианты?

Добрый день, Сергей!

На мой взгляд, добавление заявок типа следящий стоп наиболее ожидаемо из вышеперечисленных доработок. В последней версии такие заявки так и не появились. Может я просмотрел? Тогда прошу прощения...

Добрый день. Конечно, никто тогда ничего не отписал - соотвественно я сделал вывод, что людям это не нужно. Буду иметь в виду, при возможности добавлю.

watashi
watashi

Уважаемые коллеги, доброго времени суток!

У меня Alfa/SampleGUI не отображает сделки и мои сделки на демо-версии альфадиректа? Какие таблицы в альфе должны быть для этого открыты? Таблица "мои сделки" открыта.

В AlfaConnector работает candleManager? Пробую создавать candleManager - свечи не приходят.

Спасибо.

Sergey Masyura
Sergey Masyura Автор

watashi: Уважаемые коллеги, доброго времени суток!

У меня Alfa/SampleGUI не отображает сделки и мои сделки на демо-версии альфадиректа? Какие таблицы в альфе должны быть для этого открыты? Таблица "мои сделки" открыта.

В AlfaConnector работает candleManager? Пробую создавать candleManager - свечи не приходят.

Спасибо.

Привет.

Настройка терминала описана на http://stocksharp.com/doc/ в Альфа-Директ -> Настройка терминала.

Если проблемы с примером, надо смотреть логи. Как подключить логи - http://stocksharp.com/doc/ в Альфа-Директ -> Отладка.

По поводу свечек - выложите сюда исходник и логи.

watashi
watashi

sergey.masyura: Настройка терминала описана на http://stocksharp.com/doc/ в Альфа-Директ -> Настройка терминала.

Если проблемы с примером, надо смотреть логи. Как подключить логи - http://stocksharp.com/doc/ в Альфа-Директ -> Отладка.

Вот логи:

Жму "Подключиться":


16:29:26 | Debug | AlfaTrader      | OnConnect()
16:29:26 | Info  | AlfaTrader      | AlfaDirect v.3.5.2.7
16:29:26 | Debug | AlfaTrader      | StartExport()
16:29:26 | Debug | AlfaWrapper     | ReadPortfolios()
16:29:26 | Debug | AlfaTrader      | OnProcessPortfolios()
16:29:26 | Debug | AlfaTrader      | 148397|1000000,28|1000000,28|
16:29:27 | Debug | AlfaWrapper     | ReadSecurities()
16:29:27 | Debug | AlfaTrader      | OnProcessSecurities
16:29:27 | Debug | AlfaTrader      | 291|Лукойл а.о.|04.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
2734|Сургутнефтегаз а.о.|04.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
5859|Газпром а.о.|04.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
9838|ГМК НорНикель а.о.|04.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12910|Сбербанк а.о. 3 в.|04.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|

16:29:27 | Debug | AlfaTrader      | Security create : 291|Лукойл а.о.|04.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:29:27 | Debug | AlfaTrader      | Security create : 1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
16:29:27 | Debug | AlfaTrader      | Security create : 2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
16:29:27 | Debug | AlfaTrader      | Security create : 2734|Сургутнефтегаз а.о.|04.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
16:29:27 | Debug | AlfaTrader      | Security create : 2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:29:27 | Debug | AlfaTrader      | Security create : 5859|Газпром а.о.|04.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
16:29:27 | Debug | AlfaTrader      | Security create : 9838|ГМК НорНикель а.о.|04.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:29:27 | Debug | AlfaTrader      | Security create : 12910|Сбербанк а.о. 3 в.|04.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:29:27 | Debug | AlfaWrapper     | ReadOrders()
16:29:27 | Debug | AlfaTrader      | OnProcessOrders()
16:29:27 | Debug |                 | 73810718|148397-000|291|M|B|1865,1|1|1|29.07.2011 10:33:50||
73812220|148397-000|291|M|S|1839|1|1|29.07.2011 10:41:43|38476122|

16:29:27 | Debug | AlfaTrader      | create order: id = 73810718
16:29:29 | Debug | AlfaTrader      | update order: id = 73810718
16:29:30 | Debug | AlfaTrader      | create order: id = 73812220
16:29:30 | Debug | AlfaTrader      | update order: id = 73812220
16:29:30 | Debug | AlfaWrapper     | ReadMyTrades()
16:29:30 | Debug | AlfaTrader      | OnProcessMyTrades()
16:29:30 | Debug |                 | 110812747|73810718|148397|291|1846,5|1|B|29.07.2011 10:33:50|
110813833|73812220|148397|291|1849|1|S|29.07.2011 10:41:43|

16:29:30 | Debug | AlfaTrader      | OnProcessPositions()
16:29:30 | Debug |                 | 148397|291|0|LKOH|
148397|331|1000000,28|money|

Жму "Сделки": В лог ничего не выводится. Окно "Сделки" пустое.

sergey.masyura: По поводу свечек - выложите сюда исходник и логи.

Выкладываю. Лог:


16:56:42 | Debug | AlfaTrader      | OnConnect()
16:56:43 | Info  | AlfaTrader      | AlfaDirect v.3.5.2.7
16:56:43 | Debug | AlfaTrader      | StartExport()
16:56:43 | Debug | AlfaWrapper     | ReadPortfolios()
16:56:43 | Debug | AlfaTrader      | OnProcessPortfolios()
16:56:43 | Debug | AlfaTrader      | 148397|1000000,28|1000000,28|

16:56:43 | Debug | AlfaWrapper     | ReadSecurities()
16:56:43 | Debug | AlfaTrader      | OnProcessSecurities
16:56:43 | Debug | AlfaTrader      | 291|Лукойл а.о.|04.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
2734|Сургутнефтегаз а.о.|04.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
5859|Газпром а.о.|04.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
9838|ГМК НорНикель а.о.|04.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12910|Сбербанк а.о. 3 в.|04.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|

16:56:43 | Debug | AlfaTrader      | Security create : 291|Лукойл а.о.|04.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:56:43 | Debug | AlfaTrader      | Security create : 1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
16:56:43 | Debug | AlfaTrader      | Security create : 2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
16:56:43 | Debug | AlfaTrader      | Security create : 2734|Сургутнефтегаз а.о.|04.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
16:56:43 | Debug | AlfaTrader      | Security create : 2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:56:44 | Debug | AlfaTrader      | Security create : 5859|Газпром а.о.|04.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
16:56:44 | Debug | AlfaTrader      | Security create : 9838|ГМК НорНикель а.о.|04.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:56:44 | Debug | AlfaTrader      | Security create : 12910|Сбербанк а.о. 3 в.|04.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
16:56:44 | Debug | AlfaWrapper     | ReadOrders()
16:56:44 | Debug | AlfaTrader      | OnProcessOrders()
16:56:44 | Debug |                 | 73810718|148397-000|291|M|B|1865,1|1|1|29.07.2011 10:33:50||
73812220|148397-000|291|M|S|1839|1|1|29.07.2011 10:41:43|38476122|

16:56:44 | Debug | AlfaTrader      | create order: id = 73810718
16:56:46 | Debug | AlfaTrader      | update order: id = 73810718
16:56:46 | Debug | AlfaTrader      | create order: id = 73812220
16:56:46 | Debug | AlfaTrader      | update order: id = 73812220
16:56:46 | Debug | AlfaWrapper     | ReadMyTrades()
16:56:46 | Debug | AlfaTrader      | OnProcessMyTrades()
16:56:46 | Debug |                 | 110812747|73810718|148397|291|1846,5|1|B|29.07.2011 10:33:50|
110813833|73812220|148397|291|1849|1|S|29.07.2011 10:41:43|

16:56:46 | Debug | AlfaTrader      | OnProcessPositions()
16:56:46 | Debug |                 | 148397|291|0|LKOH|
148397|331|1000000,28|money|

Исходник:


namespace SampleGUI
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Diagnostics;
	using System.Windows;
	using System.Windows.Media;

	using MessageBox = System.Windows.MessageBox;

	using Ecng.Collections;
	using Ecng.Xaml;

	using StockSharp.BusinessEntities;
	using StockSharp.AlfaDirect;
    using StockSharp.Algo.Candles;

	public partial class MainWindow
	{
		private bool _isConnected;

		public AlfaTrader Trader;

		private readonly SecuritiesWindow _securitiesWindow = new SecuritiesWindow();
		private readonly TradesWindow _tradesWindow = new TradesWindow();
		private readonly MyTradesWindow _myTradesWindow = new MyTradesWindow();
		private readonly OrdersWindow _ordersWindow = new OrdersWindow();
		private readonly PortfoliosWindow _portfoliosWindow = new PortfoliosWindow();
		private readonly PositionsWindow _positionsWindow = new PositionsWindow();

        private CandleManager _candleManager;
        private readonly TimeSpan _timeFrame = TimeSpan.FromMinutes(1);
        private Security _lkoh;

        public MainWindow()
		{
			InitializeComponent();
			MainWindow.Instance = this;

			Logger.Instance().Updated += UpdateLog;
		}

		private static void UpdateLog()
		{
			var entries = Logger.Instance().NewEntries;

			if (entries.Count == 0)
				return;

			foreach (var entry in entries)
			{
				var text = String.Format("{0:HH:mm:ss} | {1,-5} | {2,-15} | {3}",
					DateTime.Now, entry.Level, entry.Source, entry.Message);

                Trace.WriteLine(text);
                Trace.Flush();
            }
		}

		protected override void OnClosing(CancelEventArgs e)
		{
			_ordersWindow.RealClose = _myTradesWindow.RealClose =
			_tradesWindow.RealClose = _securitiesWindow.RealClose =
			_portfoliosWindow.RealClose = _positionsWindow.RealClose = true;
			
			_securitiesWindow.Close();
			_tradesWindow.Close();
			_myTradesWindow.Close();
			_ordersWindow.Close();
			_portfoliosWindow.Close();
			_positionsWindow.Close();

			if (this.Trader != null)
				this.Trader.Dispose();

			base.OnClosing(e);
		}

		public static MainWindow Instance { get; private set; }

		private void Connect_Click(object sender, RoutedEventArgs e)
		{
			try
			{
				if (!_isConnected)
				{
					if (this.Trader == null)
					{
						// создаем шлюз
						this.Trader = new AlfaTrader();

						// инициализируем механизм переподключения (будет автоматически соединяться
						// каждые 10 секунд, если шлюз потеряется связь с сервером)
						this.Trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
						//this.Trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
						this.Trader.ReConnectionSettings.ConnectionRestored += () => this.GuiAsync(() =>
						{
							// разблокируем кнопку Экспорт (соединение было восстановлено)
							ChangeConnectStatus(true);
							MessageBox.Show(this, "Соединение восстановлено.");
						});

						// подписываемся на событие успешного соединения
						this.Trader.Connected += () =>
						{
							// возводим флаг, что соединение установлено
							_isConnected = true;

							// разблокируем кнопку Экспорт
							this.GuiAsync(() => ChangeConnectStatus(true));
						};

						// подписываемся на событие разрыва соединения
						this.Trader.ConnectionError += error => this.GuiAsync(() =>
						{
							// заблокируем кнопку Экспорт (так как соединение было потеряно)
							ChangeConnectStatus(false);

							MessageBox.Show(this, error.ToString(), "Ошибка соединения");
						});

						this.Trader.ProcessDataError += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));

						this.Trader.NewSecurities += securities => 
                            {
                                this.GuiAsync(() => _securitiesWindow.AddSecurities(securities));
                                foreach (Security security in securities)
                                    {
                                        if (security.Code == "LKOH") {_lkoh = security; break; };
                                    };
                                if (_lkoh != null)
                                {
                                    this.GuiAsync(() => logTextBox.AppendText("Инструмент " + _lkoh.Code + " найден." + System.Environment.NewLine));
                                }
                            };
						this.Trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));
                        this.Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));
						this.Trader.NewOrders += orders => this.GuiAsync(() => _ordersWindow.Orders.AddRange(orders));
						this.Trader.NewPortfolios += portfolios => _portfoliosWindow.Portfolios.AddRange(portfolios);
						this.Trader.NewPositions += positions => this.GuiAsync(() => _positionsWindow.Positions.AddRange(positions));

						// подписываемся на событие о неудачной регистрации заявок
						this.Trader.OrdersFailed += OrdersFailed;

						// подписываемся на событие о неудачной регистрации стоп-заявок
						this.Trader.StopOrdersFailed += OrdersFailed;

						this.ShowSecurities.IsEnabled = this.ShowTrades.IsEnabled =
						this.ShowMyTrades.IsEnabled = this.ShowOrders.IsEnabled =
						this.ShowPortfolios.IsEnabled = this.ShowPositions.IsEnabled = true;

						this.Trader.Connected += this.Trader.StartExport;

                        _candleManager = new CandleManager(Trader);
                        
                        _candleManager.CandlesFinished += (token, candles) =>
                        {
                            foreach (Candle candle in candles)
                            {
                                this.GuiAsync(() => logTextBox.AppendText(DateTime.Now.ToString("HH:mm:ss fff") + " candle finished "
                                    + candle.Time + " " + candle.OpenPrice + " " + candle.HighPrice + " " + candle.LowPrice + " "
                                    + candle.ClosePrice + System.Environment.NewLine));
                            }
                        };

                        _candleManager.CandlesChanged += (token, candles) =>
                        {
                            foreach (Candle candle in candles)
                            {
                                    this.GuiAsync(() => logTextBox.AppendText(DateTime.Now.ToString("HH:mm:ss fff") + " candle changed "
                                        + candle.Time + " " + candle.OpenPrice + " " + candle.HighPrice + " " + candle.LowPrice + " "
                                        + candle.ClosePrice + System.Environment.NewLine));
                            }

                        };

					}

					this.Trader.Connect();

                    _candleManager.RegisterTimeFrameCandles(_lkoh, _timeFrame);

				}
				else
				{
					this.Trader.Disconnect();
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show(this, ex.Message, "Ошибка");
			}
		}

		private void OrdersFailed(IEnumerable<OrderFail> fails)
		{
			this.GuiAsync(() =>
			{
				foreach (var fail in fails)
					MessageBox.Show(this, fail.Error.ToString(), "Ошибка регистрации заявки");
			});
		}

		private void ChangeConnectStatus(bool isConnected)
		{
			_isConnected = isConnected;
			this.ConnectBtn.Content = isConnected ? "Отключиться" : "Подключиться";
			this.connectionStatus.Content = isConnected ? "Подключен" : "Не подключен";
			connectionStatus.Background = new SolidColorBrush(isConnected ? Colors.LightGreen : Colors.LightPink);
		}

		private void ShowSecurities_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_securitiesWindow);
		}

		private void ShowTrades_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_tradesWindow);
		}

		private void ShowMyTrades_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_myTradesWindow);
		}

		private void ShowOrders_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_ordersWindow);
		}

		private void ShowPortfolios_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_portfoliosWindow);
		}

		private void ShowPositions_Click(object sender, RoutedEventArgs e)
		{
			ShowOrHide(_positionsWindow);
		}

		private static void ShowOrHide(Window window)
		{
			if (window == null)
				throw new ArgumentNullException("window");

			if (window.Visibility == Visibility.Visible)
				window.Hide();
			else
				window.Show();
		}

        private void logTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
        {
            logTextBox.ScrollToEnd();
        }
	}
}

Спасибо!

Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura: Настройка терминала описана на http://stocksharp.com/doc/ в Альфа-Директ -> Настройка терминала.

Если проблемы с примером, надо смотреть логи. Как подключить логи - http://stocksharp.com/doc/ в Альфа-Директ -> Отладка.

Вот логи:

...

Спасибо!

Спасибо за описание. Проблема воспроизводится.

http://stocksharp.codeplex.com/workitem/483

Как будет время поправлю.

Sergey Masyura
Sergey Masyura Автор

sergey.masyura:

watashi:

sergey.masyura: Настройка терминала описана на http://stocksharp.com/doc/ в Альфа-Директ -> Настройка терминала.

Если проблемы с примером, надо смотреть логи. Как подключить логи - http://stocksharp.com/doc/ в Альфа-Директ -> Отладка.

Вот логи:

...

Спасибо!

Спасибо за описание. Проблема воспроизводится.

http://stocksharp.codeplex.com/workitem/483

Как будет время поправлю.

Исправлено. Проверьте, пожалуйста.

watashi
watashi

sergey.masyura: Исправлено. Проверьте, пожалуйста.

Проверил. По-прежнему не работает (в окне Сделки сделок нет).

watashi
watashi

Еще, когда нажимаю "Отключиться" такая ошибка возникает:


---------------------------
Ошибка соединения
---------------------------
System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени.
---------------------------
ОК   
---------------------------

Вот логи:


12:13:03 | Debug | AlfaTrader      | OnConnect()
12:13:03 | Info  | AlfaTrader      | AlfaDirect v.3.5.2.7
12:13:03 | Debug | AlfaTrader      | StartExport()
12:13:03 | Debug | AlfaWrapper     | ReadPortfolios()
12:13:03 | Debug | AlfaTrader      | OnProcessPortfolios()
12:13:03 | Debug | AlfaTrader      | 148397|1000000,28|1000000,28|

12:13:04 | Debug | AlfaWrapper     | ReadSecurities()
12:13:04 | Debug | AlfaTrader      | OnProcessSecurities
12:13:04 | Debug | AlfaTrader      | 291|Лукойл а.о.|05.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
2734|Сургутнефтегаз а.о.|05.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
5859|Газпром а.о.|05.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
9838|ГМК НорНикель а.о.|05.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12910|Сбербанк а.о. 3 в.|05.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|

12:13:04 | Debug | AlfaTrader      | Security create : 291|Лукойл а.о.|05.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
12:13:04 | Debug | AlfaTrader      | Security create : 2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
12:13:04 | Debug | AlfaTrader      | Security create : 2734|Сургутнефтегаз а.о.|05.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
12:13:04 | Debug | AlfaTrader      | Security create : 2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 5859|Газпром а.о.|05.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
12:13:04 | Debug | AlfaTrader      | Security create : 9838|ГМК НорНикель а.о.|05.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 12910|Сбербанк а.о. 3 в.|05.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaWrapper     | ReadOrders()
12:13:04 | Debug | AlfaWrapper     | ReadMyTrades()
12:13:04 | Debug | AlfaTrader      | OnProcessPositions()
12:13:04 | Debug |                 | 148397|331|1000000,28|money|

12:13:38 | Debug | AlfaTrader      | OnDisconnect()

Sergey Masyura
Sergey Masyura Автор

watashi: Еще, когда нажимаю "Отключиться" такая ошибка возникает:


Ошибка соединения

System.TimeoutException: Соединение не было разорвано в отведенный отрезок времени.

ОК

> 
> Вот логи:
> 
> ```plain

12:13:03 | Debug | AlfaTrader      | OnConnect()
12:13:03 | Info  | AlfaTrader      | AlfaDirect v.3.5.2.7
12:13:03 | Debug | AlfaTrader      | StartExport()
12:13:03 | Debug | AlfaWrapper     | ReadPortfolios()
12:13:03 | Debug | AlfaTrader      | OnProcessPortfolios()
12:13:03 | Debug | AlfaTrader      | 148397|1000000,28|1000000,28|

12:13:04 | Debug | AlfaWrapper     | ReadSecurities()
12:13:04 | Debug | AlfaTrader      | OnProcessSecurities
12:13:04 | Debug | AlfaTrader      | 291|Лукойл а.о.|05.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
2734|Сургутнефтегаз а.о.|05.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
5859|Газпром а.о.|05.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
9838|ГМК НорНикель а.о.|05.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12910|Сбербанк а.о. 3 в.|05.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|

12:13:04 | Debug | AlfaTrader      | Security create : 291|Лукойл а.о.|05.08.2011|6|LKOH|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 1119|ММВБ Индекс акций|31.12.9999|6|MICEXINDEXCF|INDEX|RUR|0|0|INDEX|
12:13:04 | Debug | AlfaTrader      | Security create : 2317|РТС Индекс|31.12.9999|6|RTSI|INDEX|RUR|0|0|INDEX|
12:13:04 | Debug | AlfaTrader      | Security create : 2734|Сургутнефтегаз а.о.|05.08.2011|6|SNGS|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
12:13:04 | Debug | AlfaTrader      | Security create : 2862|Ростелеком а.о.|31.12.9999|6|RTKM|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 5859|Газпром а.о.|05.08.2011|6|GAZP|MICEX_SHR|RUR|0|0|MCX_SHR_NLST|
12:13:04 | Debug | AlfaTrader      | Security create : 9838|ГМК НорНикель а.о.|05.08.2011|6|GMKN|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaTrader      | Security create : 12910|Сбербанк а.о. 3 в.|05.08.2011|6|SBER3|MICEX_SHR|RUR|0|0|MCX_SHR_LST|
12:13:04 | Debug | AlfaWrapper     | ReadOrders()
12:13:04 | Debug | AlfaWrapper     | ReadMyTrades()
12:13:04 | Debug | AlfaTrader      | OnProcessPositions()
12:13:04 | Debug |                 | 148397|331|1000000,28|money|

12:13:38 | Debug | AlfaTrader      | OnDisconnect()

Судя по логам у Вас и в самом терминале на сегодня не было сделок.

  1. Проверьте что в терминале в окне сделок они есть.
  2. Провертье что обновили библиотеку Stocksharp.Alfadirect.dll
watashi
watashi

sergey.masyura:

  1. Проверьте что в терминале в окне сделок они есть.

В таблице сделок есть сделки по Лукойлу.

Uploaded with ImageShack.us

sergey.masyura: 2. Провертье что обновили библиотеку Stocksharp.Alfadirect.dll

Скачал эту версию "7954 by masyura Jul 30 at 12:29 AM - [Альфа] Исправлено получение Моих Сделок" на http://stocksharp.codeplex.com/ Открыл stocksharp-7954\Connectors\Alfa\Alfa.sln. Скомпилировал. Заменил файл в своем проекте. Удалил и заново добавил в References.

Не работает.

Sergey Masyura
Sergey Masyura Автор

watashi: Скачал эту версию "7954 by masyura Jul 30 at 12:29 AM - [Альфа] Исправлено получение Моих Сделок" на http://stocksharp.codeplex.com/ Открыл stocksharp-7954\Connectors\Alfa\Alfa.sln. Скомпилировал. Заменил файл в своем проекте. Удалил и заново добавил в References.

Не работает.

Это демо-счет в Альфе?

watashi
watashi

sergey.masyura: Это демо-счет в Альфе?

Ну да, демо-счет. Я об этом в первом же посте написал.

Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura: Это демо-счет в Альфе?

Ну да, демо-счет. Я об этом в первом же посте написал.

На демо и счете и ММВБ пока нет возможности проверить, но на рабочем логине и фортс "мои сделки" стали отображаться.

Кто-нибудь еще может проверить на последней версии?

watashi
watashi

sergey.masyura: На демо и счете и ММВБ пока нет возможности проверить, но на рабочем логине и фортс "мои сделки" стали отображаться.

Кто-нибудь еще может проверить на последней версии?

Хочу уточнить как должен работать пример Samples\AlfaDirect\SampleGUI:

  1. В альфе должна быть открыта непустая таблица Сделки.
  2. Альфа должна быть настроена в соответствии с документацией S#.
  3. Запускаем SampleGUI. Жмем "Подключиться".
  4. Жмем "Сделки...". В открывшемся окне должны отображаться сделки из таблицы Сделки в Альфе.

Правильно?

PS: Я правильно понимаю, что свечи в candleManager'е формируются на основе этих данных о сделках?

watashi
watashi

sergey.masyura:

watashi:

sergey.masyura: Это демо-счет в Альфе?

Ну да, демо-счет. Я об этом в первом же посте написал.

На демо и счете и ММВБ пока нет возможности проверить, но на рабочем логине и фортс "мои сделки" стали отображаться.

Кто-нибудь еще может проверить на последней версии?

"Мои сделки" на реале работает. Таблица "Сделки" на реале по-прежнему пустая.

Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura: На демо и счете и ММВБ пока нет возможности проверить, но на рабочем логине и фортс "мои сделки" стали отображаться.

Кто-нибудь еще может проверить на последней версии?

Хочу уточнить как должен работать пример Samples\AlfaDirect\SampleGUI:

  1. В альфе должна быть открыта непустая таблица Сделки.
  2. Альфа должна быть настроена в соответствии с документацией S#.
  3. Запускаем SampleGUI. Жмем "Подключиться".
  4. Жмем "Сделки...". В открывшемся окне должны отображаться сделки из таблицы Сделки в Альфе.

Правильно?

PS: Я правильно понимаю, что свечи в candleManager'е формируются на основе этих данных о сделках?

Спасибо за прояснения. Фикс был сделан именно для Моих Сделок.

Окно сделки - пустое. Это недоработка в примере. Потому что нигде не подписываются на получения сделок об инструментах. Следует доработать пример, спасибо за замечание.

CandleManager строит свечки по сделкам, все верно.

Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura:

watashi:

sergey.masyura: Это демо-счет в Альфе?

Ну да, демо-счет. Я об этом в первом же посте написал.

На демо и счете и ММВБ пока нет возможности проверить, но на рабочем логине и фортс "мои сделки" стали отображаться.

Кто-нибудь еще может проверить на последней версии?

"Мои сделки" на реале работает. Таблица "Сделки" на реале по-прежнему пустая.

Недоработка примера - http://stocksharp.codeplex.com/workitem/490

watashi
watashi

sergey.masyura: Спасибо за прояснения. Фикс был сделан именно для Моих Сделок.

Окно сделки - пустое. Это недоработка в примере. Потому что нигде не подписываются на получения сделок об инструментах. Следует доработать пример, спасибо за замечание.

Пример уже исправлен? Где можно исправленный посмотреть?

Разве вот эта строчка не подписывает на получение сделок?

this.Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));
Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura: Спасибо за прояснения. Фикс был сделан именно для Моих Сделок.

Окно сделки - пустое. Это недоработка в примере. Потому что нигде не подписываются на получения сделок об инструментах. Следует доработать пример, спасибо за замечание.

Пример уже исправлен? Где можно исправленный посмотреть?

Разве вот эта строчка не подписывает на получение сделок?

this.Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));


Нет, не подписывает. Это всего лишь добавление своего обработчика на событие. Запуск экспорта сделок происходит после вызова RegisterTrades.

Пример исправлю как дойдет до него очередь в моих планах.
watashi
watashi

sergey.masyura: Пример исправлю как дойдет до него очередь в моих планах.

А можно в двух словах, что там нужно добавить? Очень срочно надо. )))

Sergey Masyura
Sergey Masyura Автор

watashi:

sergey.masyura: Пример исправлю как дойдет до него очередь в моих планах.

А можно в двух словах, что там нужно добавить? Очень срочно надо. )))

Сделал. В двух словах явно бы не получилось описать. Из окна Инструменты сделки открываются также как и стаканы.

watashi
watashi

sergey.masyura: Сделал. В двух словах явно бы не получилось описать. Из окна Инструменты сделки открываются также как и стаканы.

Спасибо. Все работает. 👍

freewayrider
freewayrider

иногда появляется блуждающая ошибка

Sergey Masyura
Sergey Masyura Автор

freewayrider: иногда появляется блуждающая ошибка

У Вас старый код. В последней версии строчки закомментированы.


                        if (details[9].Length > 0)
                        {
                            // Read transaction id from the comments
                            // TODO: Fix how to update orders from the terminal and preserve same tr. id.
                            //order.TransactionId = details[9].To<long>();
                        }

Для багов есть открытый Issue Tracker - http://stocksharp.codeplex.com/workitem/list/advanced . Так что просьба репортить туда.

Doctor
Doctor

Прикрепил исправленные файлы на основе 9308. Может пригодится кому. Поправил AlfaTrader.cs, AlfaWrapper.cs и SecuritiesWindow.xaml (из примера SampleGUI). Вроде ОИ получается при создании списка. Что не совсем понятно:

  1. Где его нужно правильно сохранить? В Smarte есть поле ExtensionInfo["SecurityOpenedPositionsPrice"], а список полей для Альфы не нашел. Накопал это поле на форуме.
  2. SampleGUI похоже не подписывается на обновление Securities, еще нужно проверить ветку кода с обновлением ОИ - пока разбираюсь с примером.
Mikhail Sukhov
Mikhail Sukhov

Doctor: Прикрепил исправленные файлы на основе 9308. Может пригодится кому. Поправил AlfaTrader.cs, AlfaWrapper.cs и SecuritiesWindow.xaml (из примера SampleGUI). Вроде ОИ получается при создании списка. Что не совсем понятно:

  1. Где его нужно правильно сохранить? В Smarte есть поле ExtensionInfo["SecurityOpenedPositionsPrice"], а список полей для Альфы не нашел. Накопал это поле на форуме.
  2. SampleGUI похоже не подписывается на обновление Securities, еще нужно проверить ветку кода с обновлением ОИ - пока разбираюсь с примером.

Создайте логин на коде плексе и я дам доступ на запись. Зачем сюда аттачи складывать, когда можно сразу в репозитарий залить. Там мы сможет наглядно увидеть изменения.

  1. см. AlfaExtensions
  2. Гуд.
bonzero
bonzero

Вчера слил с codeplex репозитарий. Открыл в Connectors/Alfa.sln и собрал AlfaDirect. Все собралось. Затем AlfaTest не собрался:

------ Build started: Project: AlfaDirect, Configuration: Release Any CPU ------ AlfaDirect -> C:\Temp\Connectors\Alfa\Connector\bin\Release\StockSharp.AlfaDirect.dll ------ Build started: Project: AlfaTest, Configuration: Release x86 ------ C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0535: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Id' C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location) C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0738: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Parent'. 'System.Windows.Forms.Control.Parent' cannot implement 'StockSharp.Algo.Logging.ILogSource.Parent' because it does not have the matching return type of 'StockSharp.Algo.Logging.ILogSource'. C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location) C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0535: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Childs' C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location)

Compile complete -- 3 errors, 0 warnings ========== Build: 1 succeeded or up-to-date, 1 failed, 0 skipped ==========

Может я что-то не так делаю? Как правильно собрать?

Alexander
Alexander

Вчера слил с codeplex репозитарий. Открыл в Connectors/Alfa.sln и собрал AlfaDirect. Все собралось. Затем AlfaTest не собрался:

------ Build started: Project: AlfaDirect, Configuration: Release Any CPU ------ AlfaDirect -> C:\Temp\Connectors\Alfa\Connector\bin\Release\StockSharp.AlfaDirect.dll ------ Build started: Project: AlfaTest, Configuration: Release x86 ------ C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0535: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Id' C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location) C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0738: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Parent'. 'System.Windows.Forms.Control.Parent' cannot implement 'StockSharp.Algo.Logging.ILogSource.Parent' because it does not have the matching return type of 'StockSharp.Algo.Logging.ILogSource'. C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location) C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.cs(16,23): error CS0535: 'StockSharp.Connectors.Alfa.Forms.TestForm' does not implement interface member 'StockSharp.Algo.Logging.ILogSource.Childs' C:\Temp\Connectors\Alfa\Samples\AlfaTest\Forms\TestForm.Designer.cs(3,16): (Related location)

Compile complete -- 3 errors, 0 warnings ========== Build: 1 succeeded or up-to-date, 1 failed, 0 skipped ==========

Может я что-то не так делаю? Как правильно собрать?

Пофиксил

bonzero
bonzero

В SampleGUI для AlfaDirect:

  • "Отключиться" кнопка не работает
  • В "Инструменты" одни NULL в полях Bid, Ask, последняя цена и т.д.
Sergey Masyura
Sergey Masyura Автор

bonzero: В SampleGUI для AlfaDirect:

  • "Отключиться" кнопка не работает
  • В "Инструменты" одни NULL в полях Bid, Ask, последняя цена и т.д.

Окей. Спасибо.

http://stocksharp.codeplex.com/workitem/585

Alexander
Alexander

bonzero:

  • В "Инструменты" одни NULL в полях Bid, Ask, последняя цена и т.д.

Произошло это из-за моего изменения. Теперь по умолчанию лучший бид, аск и последняя цена = NULL.

Соответственно в логгер сделал вывод "NULL". Если есть идея как вывести покрасивше - поправлю :)

Sergey Masyura
Sergey Masyura Автор

sergey.masyura:

bonzero: В SampleGUI для AlfaDirect:

  • "Отключиться" кнопка не работает
  • В "Инструменты" одни NULL в полях Bid, Ask, последняя цена и т.д.

Окей. Спасибо.

http://stocksharp.codeplex.com/workitem/585

Resolved with changeset 10068.

Исправлено на codeplex (пример и коннектор).

Подключаться можно как с уже запущенным терминалом, так и без терминала, указав у трейдера свойства Login и Password - терминал запустится и подключится автоматически.

bonzero
bonzero

В AlfaTest.exe ввожу логин и пароль и всегда получаю ошибку:

"Ошибка авторизации! Вероятно, Вы ошиблись при вводе имени пользователя или пароля. Повторите попытку максимально внимательно..."

Ввожу в терминале - все проходит.

Update: Также пропало окошко с выводом информации.

Sergey Masyura
Sergey Masyura Автор

bonzero: В AlfaTest.exe ввожу логин и пароль и всегда получаю ошибку:

"Ошибка авторизации! Вероятно, Вы ошиблись при вводе имени пользователя или пароля. Повторите попытку максимально внимательно..."

Ввожу в терминале - все проходит.

Update: Также пропало окошко с выводом информации.

Ошибку авторизации поправил - http://stocksharp.codeplex.com/SourceControl/changeset/changes/10352

Окно пропало по задумке - на нем недобно что-либо читать, скролировать. Логи идут в окно Output у Visual Studio.

bonzero
bonzero

Ошибку авторизации поправил - http://stocksharp.codeplex.com/SourceControl/changeset/changes/10352

Обновился. Логин и пароль как раз ввожу. Но всегда ошибка авторизации. Через терминал все проходит. А через AlfaTest - нет. Через Alpha SampleGUI все тоже проходит.

Sergey Masyura
Sergey Masyura Автор

Ошибку авторизации поправил - http://stocksharp.codeplex.com/SourceControl/changeset/changes/10352

Обновился. Логин и пароль как раз ввожу. Но всегда ошибка авторизации. Через терминал все проходит. А через AlfaTest - нет. Через Alpha SampleGUI все тоже проходит.

В AlfaTest для автоматической авторизации надо еще чекбокс включить. А вобще самое простое подключаться в уже запущенному терминалу.

bonzero
bonzero

Спасибо.

Запустил AlfaTest.ext через Debug. Соединился, нажал "Start Export". Через 3 секунды получил:

AlfaTest.vshost.exe Information: 0 : TestForm OnNewSecurities()
A first chance exception of type 'System.NullReferenceException' occurred in AlfaTest.exe
AlfaTest.exe!StockSharp.Connectors.Alfa.PrintUtils.Log(StockSharp.BusinessEntities.Security sec = {StockSharp.BusinessEntities.Security}) Line 19 + 0x2c bytes	C#
AlfaTest.exe!StockSharp.Connectors.Alfa.Forms.TestForm.OnNewSecurities(System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.Security> securities = {StockSharp.BusinessEntities.Security[3]}) Line 513 + 0x8 bytes	C#

Sergey Masyura
Sergey Masyura Автор

bonzero: Спасибо.

Запустил AlfaTest.ext через Debug. Соединился, нажал "Start Export". Через 3 секунды получил:

AlfaTest.vshost.exe Information: 0 : TestForm OnNewSecurities() A first chance exception of type 'System.NullReferenceException' occurred in AlfaTest.exe

> 
> ```plain
AlfaTest.exe!StockSharp.Connectors.Alfa.PrintUtils.Log(StockSharp.BusinessEntities.Security sec = {StockSharp.BusinessEntities.Security}) Line 19 + 0x2c bytes	C#
AlfaTest.exe!StockSharp.Connectors.Alfa.Forms.TestForm.OnNewSecurities(System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.Security> securities = {StockSharp.BusinessEntities.Security[3]}) Line 513 + 0x8 bytes	C#

Начиная с последних версий Stock# некоторые поля в инструментах теперь null, если не инициализированы. Это ошибка примера, если есть желание - можете исправить.

bonzero
bonzero

Если бы я знал еще как исправить...🤨

Еще один баг. Или может только у меня так. AlfaDirect SampleGUI. Запускаю, подключаюсь, жму "Портфели". И в "Портфели" "Текущий размер" всегда одна и таже цифра. Причем в терминале Альфа-Директ перестает обновляться информация по портфелю. ;(

Update: Перезапустил AlfaDirect, теперь в терминале стало все обновляться, странно.

А "Текущий размер" в "Портфели" так и должен быть статичным? Не должен меняться? Ткните пожалуйста где почитать как получать "текущий размер портфеля".

Sergey Masyura
Sergey Masyura Автор

bonzero: Если бы я знал еще как исправить...🤨

Еще один баг. Или может только у меня так. AlfaDirect SampleGUI. Запускаю, подключаюсь, жму "Портфели". И в "Портфели" "Текущий размер" всегда одна и таже цифра. Причем в терминале Альфа-Директ перестает обновляться информация по портфелю. ;(

Update: Перезапустил AlfaDirect, теперь в терминале стало все обновляться, странно.

А "Текущий размер" в "Портфели" так и должен быть статичным? Не должен меняться? Ткните пожалуйста где почитать как получать "текущий размер портфеля".

Чтобы информация по портфелю обновлялась, необходимо вызвать метод RegisterPortfolio. Возможно, в примере этого не делается. Это всего лишь пример и в нем нет задачи использовать все, что только можно. Только основные базовые вещи. Как будет время, посмотрю.

bonzero
bonzero

А ГО по портфелю как получить? Leverage показывает 0, а портфеле фьючерсы и опционы. Leverage не то конечно как я понимаю, но что отвечает за ГО по портфелю?

А Security.LastTrade.Price я так понимаю не для получения последней цены? Потому что у меня Security.LastTrade всегда null. RegisterQuotes и RegisterSecuritiesChanged делаю.

Sergey Masyura
Sergey Masyura Автор

bonzero: А ГО по портфелю как получить? Leverage показывает 0, а портфеле фьючерсы и опционы. Leverage не то конечно как я понимаю, но что отвечает за ГО по портфелю?

А Security.LastTrade.Price я так понимаю не для получения последней цены? Потому что у меня Security.LastTrade всегда null. RegisterQuotes и RegisterSecuritiesChanged делаю.

Открываем stocksharpconnectors\Connectors\Alfa\Connector\AlfaWrapper.cs, смотрим какая таблица и поля используются

	private const string _portfolioTable = "acc_bal"; // БАЛАНС ПОЗИЦИЙ ПО СЧЕТАМ
	private const string _portfolioFields = "treaty, forward_bal, money";

Далее открываем доку из sdk альфы

ТАБЛИЦА «ACC_BAL» - АГРЕГИРОВАННЫЙ БАЛАНС ПОЗИЦИЙ ПО СЧЕТАМ Ключевое поле: treaty Поле Тип Описание treaty Integer Счет. acc_code String Портфель. forward_bal Float Баланс. money Float Деньги. deposit Float Гарантийное обеспечение срочного рынка. var_margin Float Вариационная маржа дня. long_bal Float Баланс длинных позиций на споте. short_bal Float Баланс коротких позиций на споте. call Float Требование. margin Float Маржа ФСФР. option_pl Float Финансовый результат опционов. profit_bal Float Нереализованный прибыль/убыток. daily_pl Float Прибыль/убыток дня. rel_pl Float %Прибыль/убыток дня.

Требуется вот это поле добавить? deposit Float Гарантийное обеспечение срочного рынка.

Если требуется, давай добавлю. Делов немного.

Sergey Masyura
Sergey Masyura Автор

bonzero: А ГО по портфелю как получить? Leverage показывает 0, а портфеле фьючерсы и опционы. Leverage не то конечно как я понимаю, но что отвечает за ГО по портфелю?

А Security.LastTrade.Price я так понимаю не для получения последней цены? Потому что у меня Security.LastTrade всегда null. RegisterQuotes и RegisterSecuritiesChanged делаю.

Верно, LastTrade не заполняется в Альфа-коннекторе. Надо доделать.

http://stocksharp.codeplex.com/workitem/630

Sergey Masyura
Sergey Masyura Автор

sergey.masyura:

bonzero: А ГО по портфелю как получить? Leverage показывает 0, а портфеле фьючерсы и опционы. Leverage не то конечно как я понимаю, но что отвечает за ГО по портфелю?

А Security.LastTrade.Price я так понимаю не для получения последней цены? Потому что у меня Security.LastTrade всегда null. RegisterQuotes и RegisterSecuritiesChanged делаю.

Верно, LastTrade не заполняется в Альфа-коннекторе. Надо доделать.

http://stocksharp.codeplex.com/workitem/630

Исправлено на Codeplex.

http://stocksharp.codeplex.com/SourceControl/changeset/changes/11339

bonzero
bonzero

Сергей, спасибо за детальное объяснение. Да, хорошо бы deposit добавить. Так как ГО по портфелю отслеживать требуется.

Спасибо за будущий фикс с LastTrade.

Кстати, а есть в планах создать коннектор на основе серверного API от Альфа-Директ, вместо интерфейса через COM? Например терминал Euphoria для альфы использует такое API (http://ni-soft.ru) . Но тогда если надо будет запустить одновременно и робота и терминал, то потребуется дополнительный логин получить.

Правда я списывался со службой поддержки, мне сказали, что они документацию по этому API не предоставляют сейчас. Потому что грядет его смена (уже как 2 года грядет) и будет также выпущена новая версия терминала Альфа-Директ.

Да и я так понимаю Альфа не так популярна как Quick, чтобы много сил тратить на этот коннектор.

Sergey Masyura
Sergey Masyura Автор

bonzero: Сергей, спасибо за детальное объяснение. Да, хорошо бы deposit добавить. Так как ГО по портфелю отслеживать требуется.

Спасибо за будущий фикс с LastTrade.

Кстати, а есть в планах создать коннектор на основе серверного API от Альфа-Директ, вместо интерфейса через COM? Например терминал Euphoria для альфы использует такое API (http://ni-soft.ru) . Но тогда если надо будет запустить одновременно и робота и терминал, то потребуется дополнительный логин получить.

Правда я списывался со службой поддержки, мне сказали, что они документацию по этому API не предоставляют сейчас. Потому что грядет его смена (уже как 2 года грядет) и будет также выпущена новая версия терминала Альфа-Директ.

Да и я так понимаю Альфа не так популярна как Quick, чтобы много сил тратить на этот коннектор.

По поводу ГО создал баг http://stocksharp.codeplex.com/workitem/632

По поводу серверного API, желания с ним связываться мало, к тому же публично он закрыт.

Альфа мне нравится намного больше, чем квик. Так что на любителя. По поводу коннектора, если будет фидбэк от пользователей по поводу багов/фичей, будут и фиксы (по мере наличия времени).

Alexander
Alexander

Альфа коннектор, в отличие от Квика, открыт. И доступен всем желающим для исправлений и дополнений 😎

Teddy
Teddy

В S#4.04 при запуске SampleAlfaCandles вылетает следующее: ![](http://savepic.net/2098034m.jpg

Sergey Masyura
Sergey Masyura Автор

Teddy: В S#4.04 при запуске SampleAlfaCandles вылетает следующее: ![](http://savepic.net/2098034m.jpg

Спасибо, проверю.

Sergey Masyura
Sergey Masyura Автор

sergey.masyura:

Teddy: В S#4.04 при запуске SampleAlfaCandles вылетает следующее: ![](http://savepic.net/2098034m.jpg

Спасибо, проверю.

В 4.0.5 исправлено и работает.

Teddy
Teddy

ничего не изменилось(( и ещё не работает выбор времени начала и конца построения свечек на форме.

Sergey Masyura
Sergey Masyura Автор

Teddy: ничего не изменилось(( и ещё не работает выбор времени начала и конца построения свечек на форме.

Не работает каким образом?

PS: проверил на двух ноутах - работают и свечки и выбор даты. Есть сдвиг с москвой по времени?

Teddy
Teddy

нет сдвига

Teddy
Teddy

терминал запускается ,выбираю инструмент и таймфрейм. нажимаю график и всё.вылетает этот эксепшен и причём подвисает терминал . в логе кстати свечки записываються

Sergey Masyura
Sergey Masyura Автор

Teddy: терминал запускается ,выбираю инструмент и таймфрейм. нажимаю график и всё.вылетает этот эксепшен и причём подвисает терминал . в логе кстати свечки записываються

Возможности воспроизвести у меня нет. Так что можете провести debug самостоятельно. К тому же, если работает получение свечек - зачем смотреть пример?

Teddy
Teddy

всё таки удалось запустить пример со свечками,удалив из файла chartwindow.xaml из строчки Title="ChartWindow" Height="480" Width="640" Icon="/SampleAlfaCandles;component/stocksharp.ico" Topmost="False" WindowStartupLocation="CenterScreen"> вот эту запись --Icon="/SampleAlfaCandles;component/stocksharp.ico" Но по прежнему не работает выбор начала и конца построения свечек.причём выбор даты работает. Выявилась ещё одна проблема. свечки строятся не по таймфрейму который выбирается,а в зависимости от выбранного интервала истории. Так например выбираю минутки ,интервал оставляю по дефолту,а строятся почему то часовики. наименьший таймфрейм который выводится 15мин ,в независимости от того что выбраны минутки.

Sergey Masyura
Sergey Masyura
Sergey Masyura Автор

Teddy: всё таки удалось запустить пример со свечками,удалив из файла chartwindow.xaml из строчки Title="ChartWindow" Height="480" Width="640" Icon="/SampleAlfaCandles;component/stocksharp.ico" Topmost="False" WindowStartupLocation="CenterScreen"> вот эту запись --Icon="/SampleAlfaCandles;component/stocksharp.ico" Но по прежнему не работает выбор начала и конца построения свечек.причём выбор даты работает. Выявилась ещё одна проблема. свечки строятся не по таймфрейму который выбирается,а в зависимости от выбранного интервала истории. Так например выбираю минутки ,интервал оставляю по дефолту,а строятся почему то часовики. наименьший таймфрейм который выводится 15мин ,в независимости от того что выбраны минутки.

Спасибо по поводу иконки. Как оказалось, это работает не на всех машинах.

По поводу свечек - возможно am chart их так группирует, посмотрю в чем причина.

Для референса - http://stocksharp.codeplex.com/workitem/692

Самунджян Артем
Самунджян Артем

Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Sergey Masyura
Sergey Masyura Автор

samujan: Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Проверил маркет и лимитные заявки - работают обе.

В терминале в таблице с заявками она вобще не появляется? Или может Вы отправляли по цене вне лимита и она при этом не выставится в стакан?

Как будет время еще посмотрю.

Самунджян Артем
Самунджян Артем

sergey.masyura:

samujan: Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Проверил маркет и лимитные заявки - работают обе.

В терминале в таблице с заявками она вобще не появляется? Или может Вы отправляли по цене вне лимита и она при этом не выставится в стакан?

Как будет время еще посмотрю.

В таблице не появляеться ,потому что и не выставляеться.Точно проверил несколько раз,не вне лимита и потом я точно такую же отправял вручную и она ставилась нормально. Версия альфы 3.5.2(сборка 7) Спасибо за быстрый ответ!

Sergey Masyura
Sergey Masyura Автор

samujan:

sergey.masyura:

samujan: Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Проверил маркет и лимитные заявки - работают обе.

В терминале в таблице с заявками она вобще не появляется? Или может Вы отправляли по цене вне лимита и она при этом не выставится в стакан?

Как будет время еще посмотрю.

В таблице не появляеться ,потому что и не выставляеться.Точно проверил несколько раз,не вне лимита и потом я точно такую же отправял вручную и она ставилась нормально. Версия альфы 3.5.2(сборка 7) Спасибо за быстрый ответ!

Так. C codeplex можете собрать Connectors\Alfa\Samples\AlfaTest\ и выставить заявку через него? Заодно в output окно Visual Studio идут подробные логи от коннектора.

Самунджян Артем
Самунджян Артем

sergey.masyura:

samujan:

sergey.masyura:

samujan: Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Проверил маркет и лимитные заявки - работают обе.

В терминале в таблице с заявками она вобще не появляется? Или может Вы отправляли по цене вне лимита и она при этом не выставится в стакан?

Как будет время еще посмотрю.

В таблице не появляеться ,потому что и не выставляеться.Точно проверил несколько раз,не вне лимита и потом я точно такую же отправял вручную и она ставилась нормально. Версия альфы 3.5.2(сборка 7) Спасибо за быстрый ответ!

Так. C codeplex можете собрать Connectors\Alfa\Samples\AlfaTest\ и выставить заявку через него? Заодно в output окно Visual Studio идут подробные логи от коннектора.

Запустил коннектор альфа директ ,вручную только прописал именно свой счёт потому ,что у меня их 2. И он всё равно не выставляет заявки Может быть проблема в двух счетах,при том что один на фортсе ,а другой на споте?

Логи: AlfaTest.vshost.exe Information: 0 : TestForm AlfaTrader successfuly created <-------------------------------->

[Удалено в целях безопасности / Сергей]

AlfaTest.vshost.exe Information: 0 : TestForm Buy Limit AlfaTest.vshost.exe Information: 0 : AlfaTrader RegisterOrder: TransactionId=2956805003, Id=0, Price=7900, Balance=1, Security=SBER-12.11@FORTS, State=None

Sergey Masyura
Sergey Masyura Автор

samujan:

sergey.masyura:

samujan:

sergey.masyura:

samujan: Не получаеться выставить заявку в примере SampleGui Нормально подключаюсь получаю все инструменты и так далее. Но пример не отправялет завку в альфу,пробовал то же самое вручную в своём терминале ,всё нормально. Чем это может быть вызвано? При этом никакой ошибки проект не отлавливает....

Проверил маркет и лимитные заявки - работают обе.

В терминале в таблице с заявками она вобще не появляется? Или может Вы отправляли по цене вне лимита и она при этом не выставится в стакан?

Как будет время еще посмотрю.

В таблице не появляеться ,потому что и не выставляеться.Точно проверил несколько раз,не вне лимита и потом я точно такую же отправял вручную и она ставилась нормально. Версия альфы 3.5.2(сборка 7) Спасибо за быстрый ответ!

Так. C codeplex можете собрать Connectors\Alfa\Samples\AlfaTest\ и выставить заявку через него? Заодно в output окно Visual Studio идут подробные логи от коннектора.

Запустил коннектор альфа директ ,вручную только прописал именно свой счёт потому ,что у меня их 2. И он всё равно не выставляет заявки Может быть проблема в двух счетах,при том что один на фортсе ,а другой на споте?

Логи: AlfaTest.vshost.exe Information: 0 : TestForm AlfaTrader successfuly created [Удалено в целях безопасности/Сергей] <-------------------------------->

AlfaTest.vshost.exe Information: 0 : TestForm Buy Limit AlfaTest.vshost.exe Information: 0 : AlfaTrader RegisterOrder: TransactionId=2956805003, Id=0, Price=7900, Balance=1, Security=SBER-12.11@FORTS, State=None

Молодец, двигаешься в верном направлении. В Альфа-коннекторе не поддерживается несколько счетов.

В AlfaWrapper.cs есть такой код.


		public void RegisterOrder(Order order)
		{
			//Logger.Debug("RegisterOrder", _logTag);

			if (order == null)
				throw new ArgumentNullException("order");

			var account = order.Portfolio.Name + "-000"; // Портфель. // TODO: use AD portfolio instead of the AD account, "-000" is hardcoded

Чтобы сделать поддержку нескольких счетов, это надо еще 150р заплатить за подключение клиринговой пары =)

Самунджян Артем
Самунджян Артем

Огромное спасибо ,никогда бы не догадался ,поменял вместо "-000" на "-001" и всё стало выставляться!

Самунджян Артем
Самунджян Артем

Вот ещё одну вещь заметил ,когда запрашиваю свечки через getCandleBounds допустим часовики,то последняя готовая свечка приходит с неправильным закрытием p.s Говоря про последнюю свечку я говорю именно про ту которая уже закрылась и поменяться она уже не может.

Sergey Masyura
Sergey Masyura Автор

samujan: Вот ещё одну вещь заметил ,когда запрашиваю свечки через getCandleBounds допустим часовики,то последняя готовая свечка приходит с неправильным закрытием p.s Говоря про последнюю свечку я говорю именно про ту которая уже закрылась и поменяться она уже не может.

Т.е. open/high/low правильные, а close - нет? И так только для последней закрытой свечки?

Самунджян Артем
Самунджян Артем

Sergey Masyura:

samujan: Вот ещё одну вещь заметил ,когда запрашиваю свечки через getCandleBounds допустим часовики,то последняя готовая свечка приходит с неправильным закрытием p.s Говоря про последнюю свечку я говорю именно про ту которая уже закрылась и поменяться она уже не может.

Т.е. open/high/low правильные, а close - нет? И так только для последней закрытой свечки?

Проверю open,high,low ,но Close точно с потолка берёться

OvcharenkoVI
OvcharenkoVI

Появился вопрос такого рода: работаю над арбитражным роботом, который берет данные из стакана в стиле security.bestbid.price, используя один интерфейс Trader для связи с терминалом, но в таком случае метод Trader.RegisterSecurity, quotes, trades и так далее обрабатывает только один инструмент. Для решения этого вопроса я создал еще один AlfaTrader Trader1, все работает, но программа работает с такой скоростью, что отвечает только окно с логами, а все остальное наглым образом виснет. Ноутбук у меня вроде хороший, процессор i5, 8 gb ram.

Вот код:

public void Calculate()
        {
            this.ind = new Ind();
            this.ind2 = new Ind2();

            Trader.RegisterSecurity(base.Security);
            Trader1.RegisterSecurity(security_2);

            Trader.RegisterTrades(Security);
            Trader1.RegisterTrades(security_2);

            Trader.RegisterQuotes(Security);
            Trader1.RegisterQuotes(security_2);

            this.ind.Process((DecimalIndicatorValue)Security.BestAsk.Price);
            this.ind2.Process((DecimalIndicatorValue)security_2.BestBid.Price);


            if (InTrade == false)
            {
                if (isSmaller())
                    GoLong();
            }

            if (InTrade == true)
            {
                if (isBigger())
                    GoShort();
            }
        }

Как это возможно оптимизировать?

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Появился вопрос такого рода: работаю над арбитражным роботом, который берет данные из стакана в стиле security.bestbid.price, используя один интерфейс Trader для связи с терминалом, но в таком случае метод Trader.RegisterSecurity, quotes, trades и так далее обрабатывает только один инструмент. Для решения этого вопроса я создал еще один AlfaTrader Trader1, все работает, но программа работает с такой скоростью, что отвечает только окно с логами, а все остальное наглым образом виснет. Ноутбук у меня вроде хороший, процессор i5, 8 gb ram.

Вот код:

public void Calculate() { this.ind = new Ind(); this.ind2 = new Ind2();

        Trader.RegisterSecurity(base.Security);
        Trader1.RegisterSecurity(security_2);

        Trader.RegisterTrades(Security);
        Trader1.RegisterTrades(security_2);

        Trader.RegisterQuotes(Security);
        Trader1.RegisterQuotes(security_2);

        this.ind.Process((DecimalIndicatorValue)Security.BestAsk.Price);
        this.ind2.Process((DecimalIndicatorValue)security_2.BestBid.Price);


        if (InTrade == false)
        {
            if (isSmaller())
                GoLong();
        }

        if (InTrade == true)
        {
            if (isBigger())
                GoShort();
        }
    }
> 
> Как это возможно оптимизировать?

AlfaTrader один должен быть. RegisterSecurity можно на несколько инструментов у одного трейдера делать.
OvcharenkoVI
OvcharenkoVI

Это я знаю, просто до этого с одним трейдером второй инструмент молчал

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Это я знаю, просто до этого с одним трейдером второй инструмент молчал

Оба инструмента должны быть в списке позиций/балансов. Тогда должно нормально работать. В доке про это есть упоминание.

OvcharenkoVI
OvcharenkoVI

Как возможно получить Security.OpenPrice?

Инструмент регистрируется, но значение всегда null... в коннекторе не нашел

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Как возможно получить Security.OpenPrice?

Инструмент регистрируется, но значение всегда null... в коннекторе не нашел

Добавил в коннектор.

http://stocksharp.codeplex.com/SourceControl/changeset/changes/12431

OvcharenkoVI
OvcharenkoVI

Спасибо, Сергей

OvcharenkoVI
OvcharenkoVI

Возникла такая трабла - утром все нормально работало, спустя пару часов запустил заново робота и начал выскакивать эксэпшн stcClientError. Просто при попытке создания шлюза к серверу. Пробовал на всех своих заготовках, там везде разные сборки StockSharp.AlfaDirect.dll

Никто не знает, может у альфы какие то проблемы там?((

Вот так вот

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Возникла такая трабла - утром все нормально работало, спустя пару часов запустил заново робота и начал выскакивать эксэпшн stcClientError. Просто при попытке создания шлюза к серверу. Пробовал на всех своих заготовках, там везде разные сборки StockSharp.AlfaDirect.dll

Никто не знает, может у альфы какие то проблемы там?((

Вот так вот

Распечатайте текст ошибки сообщения message и код ошибки. Все станет понятно. А так, для информации, иногда надо терминал перезапускать.

seashaman
seashaman

OvcharenkoVI: Возникла такая трабла - утром все нормально работало, спустя пару часов запустил заново робота и начал выскакивать эксэпшн stcClientError. Просто при попытке создания шлюза к серверу. Пробовал на всех своих заготовках, там везде разные сборки StockSharp.AlfaDirect.dll

Никто не знает, может у альфы какие то проблемы там?((

Вот так вот

У меня тоже самое возникает в не рабочее время. Вообще в нерабочее время и по выходным с Альфы добиться какого либо вменяемого результата практически не возможно бывает. Выкачать данных и то дилемма. И кэш чистю, и перегружаю. Боле менее стабильная работа тока в рабочие часы.

Осваиваю Stock#, очень нравится. Планирую глобальный переезд. Немножко пока плыву в многочисленных методах. Не хватает рабочего примера работы с альфой через ту же SmaStrategy. В частности несовпадение методов Trader для Смарта и альфы немножко сбивает. А так продолжаю разбираться, работа конечно огромная сделана, большое человеческое спасибо создателям.

OvcharenkoVI
OvcharenkoVI

кстати на примерах вылетает то же самое

OvcharenkoVI
OvcharenkoVI

Кстати, было бы хорошо добавить еще Security.ClosePrice. Добавил бы сам, но еще не регистрировался на codeplex

Alexander
Alexander

OvcharenkoVI: Добавил бы сам, но еще не регистрировался на codeplex

Кто мешает? Регистрация занимает 1 минуту :)

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Кстати, было бы хорошо добавить еще Security.ClosePrice. Добавил бы сам, но еще не регистрировался на codeplex

На будущее стоит заводить баг через Issue Tracker на код плекс.

http://stocksharp.codeplex.com/workitem/list/advanced

ClosePrice - это цена закрытия сессии или последняя цена? Зачем она нужна в нерабочее время? Если после вечернего клиринга, то OpenPrice как раз содержит цену открытия вечерней сессии. Какой use-case для цены открытия и что под этим имеету в виду?

OvcharenkoVI
OvcharenkoVI

Цена закрытия предыдущей сессии. Нужна для расчета изменения стоимости актива(очень важно для стратегий парного трейдинга например). Я у себя в коннекторе добавил уже:

В AlfaTrader

		private void OnProcessSecurities(string data, bool create = false)
		{
			this.AddInfoLog("OnProcessSecurities {0}", data);

            if (data.IsNull())
            {
                return;
            }

			var secutities = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

			ProcessEvents(() =>
			{
				foreach (var s in secutities)
				{
					var securityInfo = s;

					var details = securityInfo.Split('|');

					if(details[1].IsEmpty())
					{
						continue;
					}

					if (create)
					{
						GetSecurity(details[0], name =>
						{
							this.AddInfoLog("Security create : {0}", securityInfo);

							var security = EntityFactory.CreateSecurity(details[4] + "@" + details[5]);
							security.ExtensionInfo = new Dictionary<object, object>();

							security.Name = details[1];
							security.ShortName = details[1];
							security.ExpiryDate = DateTime.Parse(details[2]);
							security.Code = details[4];
							security.State = AlfaUtils.SecurityStateFromAlfa(details[3]);
							var exCode = Wrapper.GetExchangeCode(details[5]);
							security.Exchange = AlfaUtils.ExchangeCodeToExchange(exCode);
							security.MarginBuy = details[7].To<decimal>();
							security.MarginSell = details[8].To<decimal>();

							security.SetPaperNo(details[0]);
							security.SetCurrency(details[6]);
							security.SetPlaceCode(details[5]);

							decimal priceStep, priceStepCost;
							Wrapper.GetPriceStepInfo(security, out priceStep, out priceStepCost);
							security.MinStepSize = priceStep;

							if (priceStepCost == 0)
							{
								this.AddWarningLog("Стоимость шага цены равна нулю для {0}.", security.Name);
							}
							else
							{
								security.MinStepPrice = priceStepCost;	
							}

							security.Type = AlfaUtils.BoardCodeToSecurityType(details[9]);
							security.SetOpenInteres(details[10].To<long>());

							security.OpenPrice = details[11].To<decimal>();

                            security.ClosePrice = details[12].To<decimal>();

							return security;
						}, null);
					}
					else
					{
						GetSecurity(details[0], security =>
						{
							this.AddInfoLog("Security update {0}.", security.Id);

							security.BestAsk = new Quote
							{
								Price = details[1].To<decimal>(),
								Volume = details[2].To<int>(),
								Security = security,
								OrderDirection = OrderDirections.Sell
							};

							security.BestBid = new Quote
							{
								Price = details[3].To<decimal>(),
								Volume = details[4].To<int>(),
								Security = security,
								OrderDirection = OrderDirections.Buy
							};

							security.LowPrice = details[5].To<decimal>();
							security.HighPrice = details[6].To<decimal>();
							security.SetOpenInteres(details[7].To<long>());

							security.OpenPrice = details[8].To<decimal>();

                            security.ClosePrice = details[9].To<decimal>();

							// TODO: Update security state
							// TODO: Add missing fields

							security.RaisePropertyChanged();
							RaiseSecuritiesChanged(new[] { security });
						});
					}
				}
			});

И в AlfaWrapper

const string _securityFieldsCreate = "paper_no, ANSI_name, mat_date, status, p_code, place_code, curr_code, go_buy, go_sell, board_code, open_pos_qty, open_price, close_price";
		const string _securityFieldsUpdate = "paper_no, sell, sell_qty, buy, buy_qty, min_deal, max_deal, open_pos_qty, open_price, close_price";

К сожалению, не умею пока пользоваться codeplex, чтобы добавить, в ближайшее время постараюсь освоить...

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Цена закрытия предыдущей сессии. Нужна для расчета изменения стоимости актива(очень важно для стратегий парного трейдинга например). Я у себя в коннекторе добавил уже:

В AlfaTrader

И в AlfaWrapper

const string _securityFieldsCreate = "paper_no, ANSI_name, mat_date, status, p_code, place_code, curr_code, go_buy, go_sell, board_code, open_pos_qty, open_price, close_price"; const string _securityFieldsUpdate = "paper_no, sell, sell_qty, buy, buy_qty, min_deal, max_deal, open_pos_qty, open_price, close_price";

> 
> К сожалению, не умею пока пользоваться codeplex, чтобы добавить, в ближайшее время постараюсь освоить...

У "себя в коннекторе" можно пропустить важные фиксы, которые делаются в репо. Например, до недавнего времени ордера совсем неправильно матчились.

Правильный путь
1. Создать баг/пожелание на http://stocksharp.codeplex.com/workitem/list/basic
2. Завести обсуждение на форуме, чтобы услышать комментарии пользователей/авторов библиотеки.
3. Если можете исправить самостоятельно - пофиксить и создать patch/diff ( http://stackoverflow.com/questions/1648595/how-to-create-a-patch-file-on-windows ) и приатачить его к багу
4. Выслушать благодарности от пользователей и прочей публики
Sergey Masyura
Sergey Masyura Автор

Sergey Masyura:

OvcharenkoVI: Цена закрытия предыдущей сессии. Нужна для расчета изменения стоимости актива(очень важно для стратегий парного трейдинга например). Я у себя в коннекторе добавил уже:

В AlfaTrader

И в AlfaWrapper

const string _securityFieldsCreate = "paper_no, ANSI_name, mat_date, status, p_code, place_code, curr_code, go_buy, go_sell, board_code, open_pos_qty, open_price, close_price"; const string _securityFieldsUpdate = "paper_no, sell, sell_qty, buy, buy_qty, min_deal, max_deal, open_pos_qty, open_price, close_price";

> >
> > К сожалению, не умею пока пользоваться codeplex, чтобы добавить, в ближайшее время постараюсь освоить...
> 
> У "себя в коннекторе" можно пропустить важные фиксы, которые делаются в репо. Например, до недавнего времени ордера совсем неправильно матчились.
> 
> Правильный путь
> 1. Создать баг/пожелание на http://stocksharp.codeplex.com/workitem/list/basic
> 2. Завести обсуждение на форуме, чтобы услышать комментарии пользователей/авторов библиотеки.
> 3. Если можете исправить самостоятельно - пофиксить и создать patch/diff ( http://stackoverflow.com/questions/1648595/how-to-create-a-patch-file-on-windows ) и приатачить его к багу
> 4. Выслушать благодарности от пользователей и прочей публики


Добавил цену закрытия в коннектор.

http://stocksharp.codeplex.com/SourceControl/changeset/changes/12592

OvcharenkoVI
OvcharenkoVI

Товарищи, есть такая трабла, может кто знает как ее решить?

Терминал дает не правильную цену открытия в таблице котировок, при этом на графике на свечке все правильно...

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Товарищи, есть такая трабла, может кто знает как ее решить?

Терминал дает не правильную цену открытия в таблице котировок, при этом на графике на свечке все правильно...

Цена открытия - это цена открытия вечерней сессии.

OvcharenkoVI
OvcharenkoVI

А реально получить цену открытия текущей сессии?

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: А реально получить цену открытия текущей сессии?

Да. Как вариант можно с сервера запросить минутную свечку 10:00 - 10:01 и посмотреть у нее цену открытия.

OvcharenkoVI
OvcharenkoVI

Но спасибо за разъяснение

OvcharenkoVI
OvcharenkoVI

Этот способ я пытался провернуть, но у меня почему то виснет GeHistoryData)

Сейчас решил провернуть стратегию без фьючей, так что надеюсь отложить этот вопрос в ящик)

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Этот способ я пытался провернуть, но у меня почему то виснет GeHistoryData)

Сейчас решил провернуть стратегию без фьючей, так что надеюсь отложить этот вопрос в ящик)

Берите эту свечку не с сервера, а локально из базы терминалы. Тогда ничего виснуть не будет.

seashaman
seashaman

Подскажите пожалуйста, это только у меня, или вообще с CandleManager проблемма под Alfa? Я никак не могу добиться от него любого не null значения. Перебрал уже все примеры, добавил по нему все что можно. Все подсоединяется, квоты бегут в логах, GetMarketPrice выдает нормальные цифры, а candleManager молчит как партизан. Сборка 12564.

Sergey Masyura
Sergey Masyura Автор

seashaman: Подскажите пожалуйста, это только у меня, или вообще с CandleManager проблемма под Alfa? Я никак не могу добиться от него любого не null значения. Перебрал уже все примеры, добавил по нему все что можно. Все подсоединяется, квоты бегут в логах, GetMarketPrice выдает нормальные цифры, а candleManager молчит как партизан. Сборка 12564.

Не знаю, не пробовал. Можно будет посмотреть. У меня своя реализация получения исторических/реал-тайм свечек из терминала. Возможно к Новому Году добавлю ее в публичный коннектор в том числе.

seashaman
seashaman

Sergey Masyura:

seashaman: Подскажите пожалуйста, это только у меня, или вообще с CandleManager проблемма под Alfa? Я никак не могу добиться от него любого не null значения. Перебрал уже все примеры, добавил по нему все что можно. Все подсоединяется, квоты бегут в логах, GetMarketPrice выдает нормальные цифры, а candleManager молчит как партизан. Сборка 12564.

Не знаю, не пробовал. Можно будет посмотреть. У меня своя реализация получения исторических/реал-тайм свечек из терминала. Возможно к Новому Году добавлю ее в публичный коннектор в том числе. Был бы очень признателен, если бы Вы нашли время заглянуть хоть одним глазком. Поставить диагноз,куда копать. Просто невозможность собрать рабочий тривиальный пример, при ознакомлении, выбивает из тапок(. А начинать знакомство с Stock# с написания коннектора сильно круто для меня )

UP. Заработало. Обновил, все перекомпилил, открыл в Альфе все возможные таблицы.

Sergey Masyura
Sergey Masyura Автор

seashaman:

Sergey Masyura:

seashaman: Подскажите пожалуйста, это только у меня, или вообще с CandleManager проблемма под Alfa? Я никак не могу добиться от него любого не null значения. Перебрал уже все примеры, добавил по нему все что можно. Все подсоединяется, квоты бегут в логах, GetMarketPrice выдает нормальные цифры, а candleManager молчит как партизан. Сборка 12564.

Не знаю, не пробовал. Можно будет посмотреть. У меня своя реализация получения исторических/реал-тайм свечек из терминала. Возможно к Новому Году добавлю ее в публичный коннектор в том числе. Был бы очень признателен, если бы Вы нашли время заглянуть хоть одним глазком. Поставить диагноз,куда копать. Просто невозможность собрать рабочий тривиальный пример, при ознакомлении, выбивает из тапок(. А начинать знакомство с Stock# с написания коннектора сильно круто для меня )

Хорошо, посмотрю.

У альфа-конектора мало пользователей, про ошибки тоже практически никто не пишет. Если возьмете Квик, то там точно все что есть в сток-шарпе работает.

OvcharenkoVI
OvcharenkoVI

У меня почему - то две заявки не регистрируются подряд...

Вторая всегда обрабатывает и исполняется, а первая даже не появляется в таблице в Альфе.

От инструмента не зависит

            var order = new Order
            {
                Type = OrderTypes.Market,
                Volume = 10,
                Portfolio = base.Portfolio,
                Security = base.Security,
                Direction = OrderDirections.Sell,
            };

            Trader.RegisterOrder(order);

            var order1 = new Order
            {
                Type = OrderTypes.Market,
                Volume = 10,
                Portfolio = base.Portfolio,
                Security = security_2,
                Direction = OrderDirections.Buy,
            };

            Trader.RegisterOrder(order1);

            this.AddInfoLog("Вошли в позицию");

            InTrade = true;
Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: У меня почему - то две заявки не регистрируются подряд...

Вторая всегда обрабатывает и исполняется, а первая даже не появляется в таблице в Альфе.

От инструмента не зависит

        var order = new Order
        {
            Type = OrderTypes.Market,
            Volume = 10,
            Portfolio = base.Portfolio,
            Security = base.Security,
            Direction = OrderDirections.Sell,
        };

        Trader.RegisterOrder(order);

        var order1 = new Order
        {
            Type = OrderTypes.Market,
            Volume = 10,
            Portfolio = base.Portfolio,
            Security = security_2,
            Direction = OrderDirections.Buy,
        };

        Trader.RegisterOrder(order1);

        this.AddInfoLog("Вошли в позицию");

        InTrade = true;

Посмотрите чему равна base.Security 
OvcharenkoVI
OvcharenkoVI

ну она равна выбранному инструменту, с этим все ок, то есть, когда в других местах я задаю получение стакана или чего то еще по этому инструменту, то все работает нормально.

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: ну она равна выбранному инструменту, с этим все ок, то есть, когда в других местах я задаю получение стакана или чего то еще по этому инструменту, то все работает нормально.

Разница только в инструментах. Для отладки можете в первом ордере поменять инстурмент на security_2 и запустить. Если исполнится - значит проблема в инструменте.

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: ну она равна выбранному инструменту, с этим все ок, то есть, когда в других местах я задаю получение стакана или чего то еще по этому инструменту, то все работает нормально.

Разница только в инструментах. Для отладки можете в первом ордере поменять инстурмент на security_2 и запустить. Если исполнится - значит проблема в инструменте.

попробовал, вообщем получается так, что исполняется всегда только вторая заявка

                Trader.RegisterOrder(order1);
                Trader.RegisterOrder(order);

если поменять местами, то наоборот order1 выполнится, а order нет

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: ну она равна выбранному инструменту, с этим все ок, то есть, когда в других местах я задаю получение стакана или чего то еще по этому инструменту, то все работает нормально.

Разница только в инструментах. Для отладки можете в первом ордере поменять инстурмент на security_2 и запустить. Если исполнится - значит проблема в инструменте.

попробовал, вообщем получается так, что исполняется всегда только вторая заявка

            Trader.RegisterOrder(order1);
            Trader.RegisterOrder(order);
> 
> если поменять местами, то наоборот order1 выполнится, а order нет

Понял в чем причина. В Альфа-Директ есть ограничение на частоту отправки заявок - порядка одного ордера в секунду. Поэтому второй ордер терминал просто даже не принмает. Едиственным вариантом решения проблемы - добавить задержку перед отправкой втрого ордера порядка секунды (опытным путем найти минимальный интервал и отписать сюда )).
OvcharenkoVI
OvcharenkoVI

Попробую, спасибо. Кстати вы писали, что существует какой то другой метод получения свечек от альфы, было бы очень приятно увидеть это в доступе) готов тоже скинуться на колбасу:)

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Попробую, спасибо. Кстати вы писали, что существует какой то другой метод получения свечек от альфы, было бы очень приятно увидеть это в доступе) готов тоже скинуться на колбасу:)

Окей. Выложу ближе к выходным.

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: Попробую, спасибо. Кстати вы писали, что существует какой то другой метод получения свечек от альфы, было бы очень приятно увидеть это в доступе) готов тоже скинуться на колбасу:)

Окей. Выложу ближе к выходным.

Жаль, что спасибо можно говорить только один раз=)

Ссори за офф. Сырокопченую?

OvcharenkoVI
OvcharenkoVI

Попробую найти, а так да, есть такой косяк у них((

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Попробую найти, а так да, есть такой косяк у них((

Как выяснилась такая же ерунда, если, например, отменить ордер и тут же отправить заявку на регистрацию.

У себя в роботе после первой операции запускаю таймер и жду пока та первая заявка отменится / в Вашем случае исполнится


					var timer = new Timer(300);
					timer.Elapsed += (sender, args) =>
					{
						if(_orderClose.State != OrderStates.Done)
						{
							this.AddInfoLog("Пред. заявка {0}, tr.id {1} еще не отменена", _orderClose.Id, _orderClose.TransactionId);
						}
						else
						{
							this.AddInfoLog("Заявка {0}, tr.id {1} отменена, открытие позиции", _orderClose.Id, _orderClose.TransactionId);

							timer.Stop();

							_orderClose = null;
							PlaceOpenOrder(state > 0 ? OrderDirections.Buy : OrderDirections.Sell, _lastPrice, volumeToClear);
						}
					};
					timer.Start();


vedroid
vedroid

На самом деле нет такого таймаута фиксированного. Я пытался где-то пол-года тому назад подобрать, но всегда получалось по разному. Бывало что лимитка + стоп проскакивали менее чем за секунду, а бывало и за 3 не получалось. Мои выводы:

  1. У альфы есть фиксированный временной мараторий между заявками
  2. Время меняется в зависимости от загрузки их сервера
  3. Альфа-Директ - фуфло! Ждем в 2012 новый убер-терминал от альфы. Обещают космолет.
Sergey Masyura
Sergey Masyura Автор

vedroid: На самом деле нет такого таймаута фиксированного. Я пытался где-то пол-года тому назад подобрать, но всегда получалось по разному. Бывало что лимитка + стоп проскакивали менее чем за секунду, а бывало и за 3 не получалось. Мои выводы:

  1. У альфы есть фиксированный временной мараторий между заявками
  2. Время меняется в зависимости от загрузки их сервера
  3. Альфа-Директ - фуфло! Ждем в 2012 новый убер-терминал от альфы. Обещают космолет.

да, посмотрим чего сделают. обещать я тоже умею 😎

OvcharenkoVI
OvcharenkoVI

Все ждут в принципе)

OvcharenkoVI
OvcharenkoVI

Кстати, Сергей, вы говорили, что изложите какие то другие методы получения свечек от альфы)

жду не дождусь)

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Кстати, Сергей, вы говорили, что изложите какие то другие методы получения свечек от альфы)

жду не дождусь)

Залил реализацию получения реал-тайм свечек на CodePlex.



trader.CandlesFinished += OnCandlesFinished;
trader.CandlesStarted += OnCandlesStarted;
trader.CandlesChanged += OnCandlesChanged;

trader.RegisterCandles(_security, AlfaTimeFrames.Minute5, trader.MarketTime - TimeSpan.FromHours(3));

Свечки берутся локально из терминала - должен быть открыт график с этими свечками для данного инструмента и именно этого же тайм-фрейма.

Если будут вопросы или сложности - пишите. Как будет время добавлю это в пример и обновлю документацию.

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: Кстати, Сергей, вы говорили, что изложите какие то другие методы получения свечек от альфы)

жду не дождусь)

Залил реализацию получения реал-тайм свечек на CodePlex.

trader.CandlesFinished += OnCandlesFinished; trader.CandlesStarted += OnCandlesStarted; trader.CandlesChanged += OnCandlesChanged;

trader.RegisterCandles(_security, AlfaTimeFrames.Minute5, trader.MarketTime - TimeSpan.FromHours(3));

> 
> Свечки берутся локально из терминала - должен быть открыт график с этими свечками для данного инструмента и именно этого же тайм-фрейма.
> 
> Если будут вопросы или сложности - пишите. Как будет время добавлю это в пример и обновлю документацию.

Тьфу тьфу все получилось=) спасибо)

Потестил все с индикаторами, все работает)
Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Тьфу тьфу все получилось=) спасибо)

Потестил все с индикаторами, все работает)

Порядок =)

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: Кстати, Сергей, вы говорили, что изложите какие то другие методы получения свечек от альфы)

жду не дождусь)

Залил реализацию получения реал-тайм свечек на CodePlex.

trader.CandlesFinished += OnCandlesFinished; trader.CandlesStarted += OnCandlesStarted; trader.CandlesChanged += OnCandlesChanged;

trader.RegisterCandles(_security, AlfaTimeFrames.Minute5, trader.MarketTime - TimeSpan.FromHours(3));

> 
> Свечки берутся локально из терминала - должен быть открыт график с этими свечками для данного инструмента и именно этого же тайм-фрейма.
> 
> Если будут вопросы или сложности - пишите. Как будет время добавлю это в пример и обновлю документацию.

Было бы интересно как тут работать с двумя инструментами. Я даже создал еще одного трейдера, пытался работать с этими свечками, но, в итоге они смешиваются и на графике получается полная чушь)
Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: Кстати, Сергей, вы говорили, что изложите какие то другие методы получения свечек от альфы)

жду не дождусь)

Залил реализацию получения реал-тайм свечек на CodePlex.

trader.CandlesFinished += OnCandlesFinished; trader.CandlesStarted += OnCandlesStarted; trader.CandlesChanged += OnCandlesChanged;

trader.RegisterCandles(_security, AlfaTimeFrames.Minute5, trader.MarketTime - TimeSpan.FromHours(3));

> >
> > Свечки берутся локально из терминала - должен быть открыт график с этими свечками для данного инструмента и именно этого же тайм-фрейма.
> >
> > Если будут вопросы или сложности - пишите. Как будет время добавлю это в пример и обновлю документацию.
> 
> Было бы интересно как тут работать с двумя инструментами. Я даже создал еще одного трейдера, пытался работать с этими свечками, но, в итоге они смешиваются и на графике получается полная чушь)

Да, для двух инструментов получать свечки у меня не было необходимости =) Два трейдера создавать тоже не вариант, надо доделывать текущие реализацию тогда, но в ближайших планах этого пока нет.
OvcharenkoVI
OvcharenkoVI

Сергей, огромное спасибо, будем пробовать!

Sergey Masyura
OvcharenkoVI
OvcharenkoVI

Сергей, все копался копался - не знаю что куда воткнуть.

Можно ли в AlfaTrader добавить GlobalFilter? Чтобы не было обязательным держать открытым таблицы заявок, сделок и так далее, было бы очень удобно.

Выдержка из документации Альфы:

Установка и получение глобальных фильтров. СИНТАКСИС [VB] ADObj.GlobalFilter(Name)

[C++] HRESULT get_GlobalFilter(BSTR Name, BSTR *Value); HRESULT put_GlobalFilter(BSTR Name, BSTR Value); ПРИМЕЧАНИЕ Терминал устанавливает на сервере «Альфа-Директ» так называемые глобальные фильтры, которые указывают какую именно информацию необходимо присылать клиенту. Выбор этих фильтров определяется открытой конфигурацией в терминале. Данное свойство позволяет установить дополнительные фильтры к уже существующим. При чтении этого свойства будут доступны лишь те фильтры, которые были установлены с помощью открытого интерфейса. Параметр Name определяет с каким именно фильтром будет работа: • «FI» – котировки; • «AT» – все сделки; • «Q» – очереди заявок. Значение фильтра задается как набор цифровых кодов инструментов (paper_no) соединенных знаком «|». ЗНАЧЕНИЯ ЦИФРОВЫХ КОДОВ ИНСТРУМЕНТОВ МОЖНО УЗНАТЬ ИЗ ТАБЛИЦЫ ЛОКАЛЬНОЙ БАЗЫ ДАННЫХ.

OvcharenkoVI
OvcharenkoVI

В принципе я сам уже добавил... Завтра как рынок откроется - посмотрю, будет ли работать

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: В принципе я сам уже добавил... Завтра как рынок откроется - посмотрю, будет ли работать

Полезности вобщем-то мало. Если стакан, например, перестанет обновлятся, а такое бывает периодески c альфой - в роботе вы этого даже увидите. Если думаете, что будет выше скорость получения рыночных данных - возможно, но на малозначимую величину. Чем проще код - тем он надежнее.

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: В принципе я сам уже добавил... Завтра как рынок откроется - посмотрю, будет ли работать

Полезности вобщем-то мало. Если стакан, например, перестанет обновлятся, а такое бывает периодески c альфой - в роботе вы этого даже увидите. Если думаете, что будет выше скорость получения рыночных данных - возможно, но на малозначимую величину. Чем проще код - тем он надежнее.

Тут конечно согласен

OvcharenkoVI
OvcharenkoVI

Печально, а то с парный трейдингом беда теперь из за этого)

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: Печально, а то с парный трейдингом беда теперь из за этого)

Вы посмотрели в чем именно проблема - в получении свечек или в том, как Вы их на графике отрисовываете?

OvcharenkoVI
OvcharenkoVI

свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Sergey Masyura
Sergey Masyura Автор

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

OvcharenkoVI
OvcharenkoVI

Sergey Masyura:

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

в принципе решил я вопрос, но как то все очень страшно выглядит(

seashaman
seashaman

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

в принципе решил я вопрос, но как то все очень страшно выглядит( OvcharenkoVI, а как, в двух словах, был решен вопрос,? У меня при регистрации в одном коннекторе двух инструментов, несколько минут идут свечки успешно для обоих. Но потом, первый зарегистрированный в коннекторе, отваливается, свечки продолжают поступать только для одного. Почему отваливается, не понимаю, в логах ошибок не заметил.

OvcharenkoVI
OvcharenkoVI

seashaman:

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

в принципе решил я вопрос, но как то все очень страшно выглядит( OvcharenkoVI, а как, в двух словах, был решен вопрос,? У меня при регистрации в одном коннекторе двух инструментов, несколько минут идут свечки успешно для обоих. Но потом, первый зарегистрированный в коннекторе, отваливается, свечки продолжают поступать только для одного. Почему отваливается, не понимаю, в логах ошибок не заметил.

Создал два AlfaTrader. Для каждого свой Trader.Connect() и Trader.CandlesStarted/Changed/Finished создавались, ну вот так он в принципе стабильно получает свечки, но все же колхозно все выглядит, думаю может объявится потом много багов в этом способе решения( так что буду ждать новый релиз от S#, может когда нибудь появится возможность такая

Sergey Masyura
Sergey Masyura Автор

seashaman:

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

в принципе решил я вопрос, но как то все очень страшно выглядит( OvcharenkoVI, а как, в двух словах, был решен вопрос,? У меня при регистрации в одном коннекторе двух инструментов, несколько минут идут свечки успешно для обоих. Но потом, первый зарегистрированный в коннекторе, отваливается, свечки продолжают поступать только для одного. Почему отваливается, не понимаю, в логах ошибок не заметил.

На каких вкладках были открыти графики? На разных? Есть мысль, что если график открыт на неактивной вкладке после определенного интревала альфа-директ перестает его обновлять в целях оптимизации. Как только перейти на ту владку - он подгрузит то, что простил. Пробовали на одной вкладке оба графике держать? Идея с двумя коннекторами однозначно плохое решение.

seashaman
seashaman

Sergey Masyura:

seashaman:

OvcharenkoVI:

Sergey Masyura:

OvcharenkoVI: свечки получаю и те и другие, на графике получается каша, потому что по мере поступления свеч от разных инструментов они как один инструмент рисуются, чем то пульс напоминает))) И индикатор такую же ересь выдает

Если нормально приходят свечки для обоих инструментов - тогда в коннекторе проблем никаких нет. К какому инструменту какая свечка относится можно определить по токену. Как отрисовывать информацию на графике - личное дело каждого )

в принципе решил я вопрос, но как то все очень страшно выглядит( OvcharenkoVI, а как, в двух словах, был решен вопрос,? У меня при регистрации в одном коннекторе двух инструментов, несколько минут идут свечки успешно для обоих. Но потом, первый зарегистрированный в коннекторе, отваливается, свечки продолжают поступать только для одного. Почему отваливается, не понимаю, в логах ошибок не заметил.

На каких вкладках были открыти графики? На разных? Есть мысль, что если график открыт на неактивной вкладке после определенного интревала альфа-директ перестает его обновлять в целях оптимизации. Как только перейти на ту владку - он подгрузит то, что простил. Пробовали на одной вкладке оба графике держать? Идея с двумя коннекторами однозначно плохое решение. У меня в АД только одна вкладка, специально только под S#. На ней открыты все таблицы ордеров и.тд., сделки и графики по двум интересующим инструментам.Этот вариант отпадает, визуально все движется, понаблюдал. В логах пишет: 15:24:18.734 | Warning | AlfaTrader | Failed to process candles Несколько коннекторов действительно не очень охота городить. тем более больше 5 коннекторов все клинит в самом альфа директе.

seashaman
seashaman

Если запустить 100 коннекторов, как в примере с параллельным тестированием, на каждый коннектор по стратегии, то подвешивается сам Альфадирект, видать не успевает обрабатывать. Сижу думаю, как поэлегантнее решить вопрос одновременной работы сотни-другой стратегий...

Sergey Masyura
Sergey Masyura Автор

seashaman: Если запустить 100 коннекторов, как в примере с параллельным тестированием, на каждый коннектор по стратегии, то подвешивается сам Альфадирект, видать не успевает обрабатывать. Сижу думаю, как поэлегантнее решить вопрос одновременной работы сотни-другой стратегий...

В Альфа-Директ нельзя транзакции с ордерами делать одновременно. Т.е. если, например, две стратегии одноврменно отправят ордера - второй ордер Альфа завернет.

В чем смысл ста коннекторов? Посмотрите код коннекторе - очевидно, что никакого. Достаточно одного.

Если необходимо запускать большие портфели стратегий - прямая дорога на Plaza (или хотя бы на Quik).

seashaman
seashaman

Sergey Masyura:

seashaman: Если запустить 100 коннекторов, как в примере с параллельным тестированием, на каждый коннектор по стратегии, то подвешивается сам Альфадирект, видать не успевает обрабатывать. Сижу думаю, как поэлегантнее решить вопрос одновременной работы сотни-другой стратегий...

В Альфа-Директ нельзя транзакции с ордерами делать одновременно. Т.е. если, например, две стратегии одноврменно отправят ордера - второй ордер Альфа завернет.

В чем смысл ста коннекторов? Посмотрите код коннекторе - очевидно, что никакого. Достаточно одного.

Если необходимо запускать большие портфели стратегий - прямая дорога на Plaza (или хотя бы на Quik).

Да я просто не особо углубляясь взял с примера по образцу. Сейчас исправил, на один коннектор навешиваю стратегии. Достаточно шустренько все бегает. Альфа директ не морозит. На проблему одновременного посыла ордеров я еще не натолкнулся.. как вариант можно сделать буфер на край, по очереди их в альфу скармливать.

seashaman
seashaman

Ковыряюсь в процессах, меня терзают смутные сомнения что ошибка в самом коннекторе, событие ProcessHistoryCandles отрабатывается отлично, и свечки, которых не видно в кандле менеджере стратегии, успешно проходят через CandlesChanged.SafeInvoke(token, new [] ); Куда они дальше идут я не вижу, но есть подозрение что это место сбоит. Можно предположить что по неким причинам в хранилище складываются только свечки с последнего секьюрити. Причем первую свечку успешно выдаем всем, а вот следующую только последнему секьюрити зарегестрированному.

OvcharenkoVI
OvcharenkoVI

seashaman: Ковыряюсь в процессах, меня терзают смутные сомнения что ошибка в самом коннекторе, событие ProcessHistoryCandles отрабатывается отлично, и свечки, которых не видно в кандле менеджере стратегии, успешно проходят через CandlesChanged.SafeInvoke(token, new [] ); Куда они дальше идут я не вижу, но есть подозрение что это место сбоит. Можно предположить что по неким причинам в хранилище складываются только свечки с последнего секьюрити. Причем первую свечку успешно выдаем всем, а вот следующую только последнему секьюрити зарегестрированному.

вот здесь согласен. сталкивался с этой бедой

seashaman
seashaman

Все-ж CandleManager неправильно выбирает свечки из коннектора.

trader.CandlesFinished += (t, candlesLocal) => { ... // вот это НЕ работает var candles = candleManager.GetTimeFrameCandles(strategy.Security, timeFrame, bounds);

// это работает var candles2 = trader.GetLocalHistoryData(strategy.Security, timeFrame, bounds); .... } Выход сейчас один, напрямую по событию конца свечи скармливать в стратегию напрямую данные, в обход кэндле-менеджера. Надеюсь баг локализован окончательно и не заживется долго )

seashaman
seashaman

ra81: То есть старт экспорта наличиствует. Но в итоге ничего не работает. Реакции на изменение таблицы со своими сделками нет. Поправить не сложно, Но не хочется плодить свои сборки, ваши сборки итд. Надо уж както централизованно править чтоли. У альфа директа есть противная особенность, он нормально работает только с первого коннекта к нему. То есть если в процессе отладки отвалились, и перезапустились, он перестает нормально давать данные. Выход один. В каждом тесте ЗАНОВА запускать клиент. Другого способа устойчивой работы я не нашел (

Sergey Masyura
Sergey Masyura Автор

ra81: Возможно я уже не первый. Но поиск как-то не выдал толковых результатов. Смотрю в код:

private void TableChanged(string tableName, string tableParams, object data, object fieldtypes) { NewDataExported.SafeInvoke();

switch (tableName)
{
	case _marketDepthTable:
		ProcessQuotes.SafeInvoke(tableParams, (string)data);
		break;
	case _tradeTable:
		ProcessTrades.SafeInvoke(tableParams, (string)data);
		break;
	case _securityTable:
		ProcessSecurities.SafeInvoke((string)data, false);
		break;
	case _portfolioTable:
		ProcessPortfolios.SafeInvoke((string)data);
		ProcessPositions.SafeInvoke((string)data);
		break;
	case _orderTable:
		ProcessOrders.SafeInvoke((string)data);
		break;

// case _positionsTable: // ProcessPositions.SafeInvoke((string)data); // break; } }

> 
> И понимаю почему не работает событие NewMyTrade. Это так и задумано? Или досадное упущение? Я как бы смотрю, Но код для обработки MyTrades во враппере присутствует. Может быть не в полном объеме (не разбирался до конца) но есть. Так же есть код типо такого:
> ```csharp
public override void StartExport()
{
	this.AddInfoLog("StartExport()");

	if (IsExportStarted)
	{
		this.AddWarningLog("Export is already started");
		return;
	}

	base.StartExport();
	Wrapper.ReadPortfolios();
	Wrapper.ReadSecurities();

	Wrapper.ReadOrders();
	Wrapper.ReadMyTrades();

        Wrapper.StartExportOrders();
	Wrapper.StartExportPositions();
	Wrapper.StartExportMyTrades();
}

То есть старт экспорта наличиствует. Но в итоге ничего не работает. Реакции на изменение таблицы со своими сделками нет. Поправить не сложно, Но не хочется плодить свои сборки, ваши сборки итд. Надо уж както централизованно править чтоли.

В TableChanged пропущена_myTradesTable, поэтому и не работает. Создавайте отдельные топики для каждой проблемы, будет удобнее )

ra81
ra81

Sergey Masyura: В TableChanged пропущена_myTradesTable, поэтому и не работает. Создавайте отдельные топики для каждой проблемы, будет удобнее )

Да. Я заметил. У себя в коде я поправил и сбилдил библиотеку на базе вашего кода из trunk ветки Кодеплекса.

Ссылка на отдельную тему http://stocksharp.com/forum/2324/niet-sobytiia-NewMyTrade/