← Zurück

Ошибка экспорта таблицы стоп-заявок

При прошлом запуске успешно создавал тейк-профиты по заявке (как CreateConditionTakeProfit из примера). Соответственно в таблице стоп-заявок есть данные. Закрыл, запустил заново. Получил следующий баг экспорта на старте:

2013/02/26 14:42:37.144|       |StrategyManager|Status:Started, PnL:0, Slippage:0, Position:0, Latency:00:00:00, StartedTime
2013/02/26 14:42:37.145|       |SS        |Стратегия запущена. [0,-1]. Позиция при старте 0.
2013/02/26 14:42:37.277|Debug  |QuikManager|Терминал проверен
2013/02/26 14:42:37.281|Debug  |QuikManager|Создание шлюза взаимодействия с системой Quik.
2013/02/26 14:42:37.593|       |QuikManager|Шлюз создан
2013/02/26 14:42:42.652|Debug  |QuikManager|Ожидание соединения
2013/02/26 14:42:42.657|Debug  |QuikManager|Соединение установлено.
2013/02/26 14:42:46.168|Debug  |TimeServerHelper|Время синхронизировано c сервером 80.90.180.140:123. Отступ - 00:00:03.4116024
2013/02/26 14:42:51.169|Debug  |QuikManager|Запуск экспорта данных.
2013/02/26 14:42:51.533|Debug  |QuikManager|Новые бумаги
2013/02/26 14:42:51.675|Error  |QuikManager|Ошибка получения данных: System.ArgumentOutOfRangeException: Неподдерживаемый тип стоп-заявки.
Имя параметра: func
Фактическое значение было Тэйк-профит по заявке.
   в StockSharp.Quik.QuikDdeFormatter.GetStopOrderType(Func`2 func) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikDdeFormatter.cs:строка 268
   в StockSharp.Quik.QuikTrader.<>c__DisplayClass31.<>c__DisplayClass56.<>c__DisplayClass58.<>c__DisplayClass5a.<OnPoke>b__1b(Int64 key) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikTrader.cs:строка 1154
   в StockSharp.Algo.BaseTrader.<>c__DisplayClass1f.<GetOrder>b__1d(Int64 key) в e:\Projects\C_Projects\StockSharp\Sources\Algo\BaseTrader.cs:строка 2440
   в StockSharp.Algo.BaseTrader.Cache.<>c__DisplayClass50.<GetOrder>b__4f(Int64 key) в e:\Projects\C_Projects\StockSharp\Sources\Algo\BaseTrader.cs:строка 125
   в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler, Boolean& isNew) в e:\Ecng\trunk\Collections\CollectionHelper.cs:строка 479
   в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler) в e:\Ecng\trunk\Collections\CollectionHelper.cs:строка 456
   в StockSharp.Algo.BaseTrader.Cache.GetOrder(Security security, Int64 id, Func`2 createOrder) в e:\Projects\C_Projects\StockSharp\Sources\Algo\BaseTrader.cs:строка 123
   в StockSharp.Algo.BaseTrader.GetOrder(Security security, Int64 id, Func`2 createOrder, Func`2 changeOrder) в e:\Projects\C_Projects\StockSharp\Sources\Algo\BaseTrader.cs:строка 2436
   в StockSharp.Quik.QuikTrader.<>c__DisplayClass31.<>c__DisplayClass56.<>c__DisplayClass58.<OnPoke>b__1a(Security otherSec) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikTrader.cs:строка 1149
   в StockSharp.Quik.QuikTrader.<>c__DisplayClass31.<>c__DisplayClass56.<OnPoke>b__19(Security security) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikTrader.cs:строка 1207
   в StockSharp.Algo.BaseTrader.ProcessSecurityAction(String securityId, Object nativeSecurityId, Action`1 action, Boolean ignoreIfNotExist) в e:\Projects\C_Projects\StockSharp\Sources\Algo\BaseTrader.cs:строка 2829
   в StockSharp.Quik.QuikTrader.<>c__DisplayClass31.<OnPoke>b__18(IList`1 row, Func`2 func) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikTrader.cs:строка 1141
   в StockSharp.Quik.QuikDdeFormatter.Deserialize(DdeTable table, IList`1 rows, Action`2 handler, Action`1 errorHandler, Boolean skipErrors) в e:\Projects\C_Projects\StockSharp\Sources\Quik\QuikDdeFormatter.cs:строка 57

Kommentare (12)

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

Mikhail Sukhov
Mikhail Sukhov

Судя по тексту, собрано из сырцов. Как насчет бряки в метод GetStopOrderType?🙄

VassilSanych
VassilSanych Autor

Mikhail Sukhov: Судя по тексту, собрано из сырцов. Как насчет бряки в метод GetStopOrderType?🙄 Собрано-то собрано, но я исходники в солюшн робота не включаю.

VassilSanych
VassilSanych Autor

Ругается отсюда:

		public static QuikOrderConditionTypes GetStopOrderType(this Func<DdeTableColumn, object> func)
		{
			var value = Get<string>(func, DdeStopOrderColumns.Type);

			switch (value)
			{
				case "Со связ. заявкой":
					return QuikOrderConditionTypes.LinkedOrder;
				case "Стоп-лимит":
				case "Стоп-лимит по заявке":
					return QuikOrderConditionTypes.StopLimit;
				case "СЦ по др. бумаге":
					return QuikOrderConditionTypes.OtherSecurity;
				case "Тэйк-профит":
				case "Тэйк профит по заявке":
					return QuikOrderConditionTypes.TakeProfit;
				case "Тэйк-профит и стоп-лимит":
				case "Тэйк-профит и стоп-лимит по заявке":
					return QuikOrderConditionTypes.TakeProfitStopLimit;
				default:
					throw new ArgumentOutOfRangeException("func", value, "Неподдерживаемый тип стоп-заявки.");
			}
		}

upd В "Тэйк профит по заявке" пропущен дефис

Mikhail Sukhov
Mikhail Sukhov

VassilSanych: В "Тэйк профит по заявке" пропущен дефис

А должен быть с дефисом? Странно, получается первый раз приходит без дефиса?

VassilSanych
VassilSanych Autor

Mikhail Sukhov: А должен быть с дефисом? Странно, получается первый раз приходит без дефиса? В первый раз таблица пустая и вообще ничего не приходит. Добавил в условие строчку с дефисом (без дефиса на всякий случай тоже стирать не стал) - заработало.

Mikhail Sukhov
Mikhail Sukhov

VassilSanych: В первый раз таблица пустая и вообще ничего не приходит.

Первоначально писалось про какой-то прошлый запуск, где все работало.

VassilSanych
VassilSanych Autor

Mikhail Sukhov: Первоначально писалось про какой-то прошлый запуск, где все работало. Так и есть:

  • первый запуск: таблица стопов пустая, тейк-профиты добавляются, ошибок не валится
  • второй запуск: таблица с отработанными тейкпрофитами от первого запуска, ошибки при экспорте.

Именно это имелось в виду.

Mikhail Sukhov
Mikhail Sukhov

VassilSanych:

Mikhail Sukhov: Первоначально писалось про какой-то прошлый запуск, где все работало. Так и есть:

  • первый запуск: таблица стопов пустая, тейк-профиты добавляются, ошибок не валится
  • второй запуск: таблица с отработанными тейкпрофитами от первого запуска, ошибки при экспорте.

Именно это имелось в виду.

Экспорт ДДЕ идет и в первый раз и во второй. Тоесть первый раз по ДДЕ шлется что-то не то, что во второй.

VassilSanych
VassilSanych Autor

Не знаю. Главное, что после правки экспорт работает.

Mikhail Sukhov
Mikhail Sukhov

VassilSanych: Не знаю. Главное, что после правки экспорт работает.

Тогда подождем пару дней, вдруг перестанет из-за правки.

VassilSanych
VassilSanych Autor

Mikhail Sukhov: Тогда подождем пару дней, вдруг перестанет из-за правки. Не перестанет. Во-первых, я старый функционал не выбрасывал. Так что, даже если это было рассчитано на какую-то другую (более кривую) версию квика, то по-старому тоже будет работать. Просто не будет падать именно с таким типом заявки. Во-вторых, ошибка описана однозначно. Накосячить трудно. В-третьих, не понимаю, почему столько внимания такому пустячному исправлению. В других моих сегодняшних багрепортах жести значительно больше ;)

Mikhail Sukhov
Mikhail Sukhov

VassilSanych:

Будет значительно проще, если вы в лог выведите тип стоп-заявки, что приходит от Квика (с идентификатором процесса, чтобы разделить повторные запуски).