← Back

событие NewPortfolios

Добрый день. Почему-то в примере SimpleConsole не срабатывает событие NewPortfolios. Программа так и остается в ожидании сигнала из другого потока.

WindowsXP SP3, Quik 5.17.0.165, S# 2.2 запускаю на вечерней сессии, virifier проверил (пришлось удалить одну колонку из окна 'инструменты', в прилагающейся к примерам конфигурации квика) соединение с квиком проходит, затем появляются securities, и на этом все заканчивается.

Comments (21)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

Обновите до 2.4. Экспорт портфелей изменился (до этого бралось из таблицы позиций и они судя по повоедению пусты). Теперь информация о них идет из окна управления счетами.

А что за колонку удалили? Если не составит труда и решите перейти на новую версию, можете сказать, в текущем дистрибутиве так же?

Алексей
Алексей Author

S# версия 2.4 файл конфигурации info_rts_micex.wnd

проеряю на соответствие площадке ММВБ В таблице 'инструменты' по индексу 9 должна быть колонка 'Время последней сделки' вместо колонки 'Время последнего изменения'.

убираю этот столбец, проверка проходит. однако после этого при проверке РТС ситуация обратная В таблице 'инструменты' по индексу 9 должна быть колонка 'Время последнего изменения' вместо колонки 'Время последней сделки'.

Мне представлялось что в этом файле конфигурации универсальная настройка для квика.

ну и после всего ММВБ(срочный рынок) В таблице 'инструменты' по индексу 11 должна быть колонка 'Количество контрактов в последней сделке' вместо колонки 'Количество в последней сделке'.

экспорт портфеля заработал на новой версии, спасибо.

Mikhail Sukhov
Mikhail Sukhov

Все правильно. Вот что написано в документации

http://stocksharp.com/doc/help/html/5c13da7b-b6e4-4fd4-958a-66c93c58b941.htm

Файлы имеют следующее разграничение и их необходимо использовать в случаях:

  • info_micex.wnd - подключение только к площадке ММВБ . * info_rts.wnd - подключение только к площадке РТС . * info_rts_micex.wnd - одновременное подключение в площадкам РТС и ММВБ . Для использования данного файла необходимо прочитать раздел Модификация стандартных таблиц.

А Вы берете файл для одновременного подключения и проверяете его как на единичное. Поэтому Verifier и ругается.

curious
curious

Алексей: Почему-то в примере SimpleConsole не срабатывает событие NewPortfolios. Программа так и остается в ожидании сигнала из другого потока.

Аналогичная проблема. QUIK 6.00.0.323 Stock# 4.0.17

У Verifier'а претензий нет.

Что вообще в данном случае понимается под портфелем: код клиента из таблицы "Портфель по бумагам", торговый счёт из "Портфеля по деривативам", любое из них, что-то другое?

П.С.: в п. 3 раздела документации "Создание первого робота" (QUIK) опечатка в комменте подписки на новый портфель

// находим Лукойл и присваиваем ее переменной lkoh

Alexander
Alexander

Что за очепятка? её на его? :)

curious
curious

Alexander Mukhanchikov: Что за очепятка? её на его? :)

// находим Лукойл и присваиваем ее переменной lkoh _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

В этом месте не бумагу, а портфель ищем :)

Alexander
Alexander

Спасибо, исправил.

curious
curious

Александр,

а что с основным вопросом? В чем может быть проблема?

Аналогичная проблема. QUIK 6.00.0.323 Stock# 4.0.17

У Verifier'а претензий нет.

Что вообще в данном случае понимается под портфелем: код клиента из таблицы "Портфель по бумагам", торговый счёт из "Портфеля по деривативам", любое из них, что-то другое?

Alexander
Alexander

Экспорт идёт по таблице с портфелями?

Портфель для ммвб - это то что с бумагами, на фортсе - с деривативами. В Trader.Portfolios будет и тот и тот.

Посмотрите SampleQuik, Портфели.

curious
curious

Alexander Mukhanchikov: Экспорт идёт по таблице с портфелями?

Портфель для ммвб - это то что с бумагами, на фортсе - с деривативами. В Trader.Portfolios будет и тот и тот.

Посмотрите SampleQuik, Портфели.

Идёт экспорт по таблице "инструменты", по таблице "портфель по бумагам", но не по таблице "портфель по деривативам". Запускаю пример SampleConsole для QUIK.

Alexander
Alexander

curious:

Alexander Mukhanchikov: Экспорт идёт по таблице с портфелями?

Портфель для ммвб - это то что с бумагами, на фортсе - с деривативами. В Trader.Portfolios будет и тот и тот.

Посмотрите SampleQuik, Портфели.

Идёт экспорт по таблице "инструменты", по таблице "портфель по бумагам", но не по таблице "портфель по деривативам". Запускаю пример SampleConsole для QUIK.

А в портфеле по бумагам у вас какие есть портфели? Для SampleQuik какие портфели отображаются?

curious
curious

Alexander Mukhanchikov: А в портфеле по бумагам у вас какие есть портфели? Для SampleQuik какие портфели отображаются?

Александр, в портфеле по бумагам у меня пусто. Есть только FORTS'овский счет в портфеле по деривативам.

Что значит SampleQuik? Есть пример Sample, есть SampleConsole. С первым примером в портфелях отображается FORTS'овский счёт, а вот со вторым проблема: событие появления нового портфеля не происходит.

Moadip
Moadip

curious: С первым примером в портфелях отображается FORTS'овский счёт, а вот со вторым проблема: событие появления нового портфеля не происходит.

Думаю в этом посте найдете ответ на свой вопрос.

curious
curious

Moadip:

curious: С первым примером в портфелях отображается FORTS'овский счёт, а вот со вторым проблема: событие появления нового портфеля не происходит.

Думаю в этом посте найдете ответ на свой вопрос.

Пропустил ваш ответ. Действительно, следующая замена решает проблему:


trader.StartExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable,
          trader.EquityPortfoliosTable, trader.OrdersTable, trader.DerivativePositionsTable, trader.DerivativePortfoliosTable);
 
...
 
trader.StopExport(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable,
          trader.EquityPortfoliosTable, trader.OrdersTable, trader.DerivativePositionsTable, trader.DerivativePortfoliosTable);

Alexander Mukhanchikov: Потому что не запущен экспорт по нужной таблице. Смотрите как идёт работа с экспортом в SampleQuik.

Вопрос снят.

Alexander
Alexander

Вы ждёте портфеля по ММВБ, которого у вас нет. Раз нет портфеля - можно не ждать, он не придёт. :)

curious
curious

Alexander Mukhanchikov: Вы ждёте портфеля по ММВБ, которого у вас нет. Раз нет портфеля - можно не ждать, он не придёт. :)

Alexander Mukhanchikov: Портфель для ммвб - это то что с бумагами, на фортсе - с деривативами. В Trader.Portfolios будет и тот и тот.

Александр, всё-таки, событие NewPortfolios обрабатывает только ММВБ'шные портфели или FORTS'овские тоже?!

Alexander
Alexander

Для всех существующих портфелей.

curious
curious

Alexander Mukhanchikov: Для всех существующих портфелей.

Александр, тогда повторю свой вопрос: почему при отсутствии ММВБ'шного портфеля и наличии FORTS'овского событие NewPortfolios может не происходить в примере SampleConsole?

Alexander
Alexander

curious:

Alexander Mukhanchikov: Для всех существующих портфелей.

Александр, тогда повторю свой вопрос: почему при отсутствии ММВБ'шного портфеля и наличии FORTS'овского событие NewPortfolios может не происходить в примере SampleConsole?

Потому что не запущен экспорт по нужной таблице. Смотрите как идёт работа с экспортом в SampleQuik.

Algonavt
Algonavt

У меня обратная проблема - NewPortfolios отлично срабатывает на появление портфеля по деривативам, но появление таблиц "Портфель по бумагам" и "Позиции по бумагам" не порождают это событие. В чем я ошибаюсь?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

using Ecng.Common;

using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.Algo;

class Program
{
	
	static void Main()
	{
		try
		{
			var quikDefaultPath = @"C:\Documents and Settings\User\Рабочий стол\Quik (StockSharp tests)\info.exe";
			
			var quikPath = QuikTerminal.GetDefaultPath();
			var quikLogin = "***";
			var quikPassword = "***";

			if (quikPath.IsEmpty())
			{
				Console.WriteLine("Не найден ни один запущенный Quik, пробуем запустить Quik из " + quikDefaultPath);
				quikPath = quikDefaultPath;
			}
			else
				Console.WriteLine("Запущенный Quik найден по пути " + quikPath);

			using (var waitHandle = new AutoResetEvent(false))
			{
				// создаем шлюз к Quik-у
				using (var trader = new QuikTrader(quikPath))
				{
					// необходимо раскомментировать, если идет работа с РТС Стандарт
					//trader.FormatTransaction += builder => builder.RemoveInstruction(TransactionBuilder.ExecutionCondition);

					// подписываемся на событие успешного подключения
					// все действия необходимо производить только после подключения
					trader.Connected += () =>
					{
						Console.WriteLine("Подключение было произведено успешно.");

						// извещаем об успешном соединении
						waitHandle.Set();
					};

					// подписываемся на событие обновления портфеля
					trader.NewPortfolios += portfolios =>
					{
						foreach (var p in portfolios)
							Console.WriteLine("Найден портфель: {0}" +
							                  "\nExchange: {1}", p.Name, p.Exchange);
						waitHandle.Set();
					};
					
					Console.WriteLine("Производим подключение...");

					if (!trader.Terminal.IsLaunched)
					{
						trader.Terminal.Launch();
						trader.Terminal.Login(quikLogin, quikPassword);
					}
					trader.Connect();

					// дожидаемся события об успешном соединении
					waitHandle.WaitOne();

					Console.WriteLine("Запускаем экспорт таблиц по DDE");
					
					// запускаем экспорт по DDE портфеля по деривативам
					Console.WriteLine("Портфель по деривативам...");
					trader.StartExport(new[] {trader.DerivativePortfoliosTable});
					waitHandle.WaitOne();
					Console.WriteLine("Готово!");
					
					// запускаем экспорт по DDE таблицы позиций по бумагам
					Console.WriteLine("Позиции по бумагам...");
					trader.StartExport(new[] {trader.EquityPositionsTable});
					waitHandle.WaitOne();
					Console.WriteLine("Готово!");
					
					// запускаем экспорт по DDE портфеля по бумагам
					Console.WriteLine("Портфель по бумагам...");
					trader.StartExport(new[] {trader.EquityPortfoliosTable});
					
					waitHandle.WaitOne();
					Console.WriteLine("Готово!");

					Console.WriteLine("Нажмите Enter для выхода");
					Console.ReadLine();
					
					trader.StopExport();
				}
			}
		}
		catch (Exception ex)
		{
			Console.WriteLine(ex);
			Console.ReadLine();
		}
	}
}

Zyanov
Zyanov

Algonavt: У меня обратная проблема - NewPortfolios отлично срабатывает на появление портфеля по деривативам, но появление таблиц "Портфель по бумагам" и "Позиции по бумагам" не порождают это событие. В чем я ошибаюсь? Похоже что такая же проблема. SimpleConsole встает на сообщении "Стакан Лукойл появился" а квик пишет: DDE сервер 'STOCKSHARP'.Документ 'стакан[LKOH@QJSIM]'.Произошла ошибка:Ошибка при передаче таблицы,вывод приостановлен.Переполнена очередь сообщений. Файл wnd из той же папки s#.Verifer все правильно. Лукойл добавлен в инструменты..