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


При прошлом запуске успешно создавал тейк-профиты по заявке (как 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

Теги:


Спасибо:




12 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.02.2013
Ответить


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

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


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

Собрано-то собрано, но я исходники в солюшн робота не включаю.
Автор топика
Спасибо:

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


Ругается отсюда:
Код
		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

Фотография
Автор статей Программист Трейдер
Дата: 26.02.2013
Ответить


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


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

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.02.2013
Ответить


VassilSanych Перейти

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


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

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


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

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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.02.2013
Ответить


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

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

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



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

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 26.02.2013
Ответить


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


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

VassilSanych

Фотография
Дата: 26.02.2013
Ответить


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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.02.2013
Ответить


VassilSanych Перейти



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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy