← Zurück

событие NewPortfolios

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

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

Kommentare (21)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

Алексей
Алексей Autor

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 все правильно. Лукойл добавлен в инструменты..