Ошибка при генерации отчёта через ExcelStrategyReport

Ошибка при генерации отчёта через ExcelStrategyReport
Atom
16.08.2010
Alexander


При вызове new ExcelStrategyReport(strategy, "c:\1.xls").Generate(); возникает ошибка, ниже прилагаю трассу: (xml генерируется нормально)

System.Runtime.InteropServices.COMException was unhandled by user code HelpLink=xlmain11.chm Message=Введено недопустимое имя для листа или диаграммы. Убедитесь, что:

  • длина введенного имени не превышает 31 знака;
  • имя не содержит ни одного из следующих знаков: : \ / ? * [ или ];
  • имя не оставлено пустым. Source=Microsoft Excel ErrorCode=-2146827284 StackTrace: at Microsoft.Office.Interop.Excel._Worksheet.set_Name(String RHS) at Ecng.Trading.Algo.ExcelStrategyReport. (Sheets , String ) at Ecng.Trading.Algo.ExcelStrategyReport. () at Ecng.Trading.Algo.ExcelStrategyReport.Generate() at Robots.MainWindow.MainWindow.OnClosing(CancelEventArgs e) in C:\Users\Alexander\Documents\Visual Studio 2010\Projects\Robots\Robots \MainWindow\MainWindow.xaml.cs:line 65 at System.Windows.Window.WmClose() InnerException:

Теги:


Спасибо:


< 1 2 
Mikhail Sukhov

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


Не, не через 10... Я там новшество одно ввожу. Так что может затянутся.

Спасибо:

Mikhail Sukhov

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


Скачал 2010. Пока не устанавливал... Что воодушевляет - офис написан на .NET FW. Прямо как S# =)

Спасибо:

Alexander

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


Сегодня впервые робот на Stock# 2.2.1 проработал весь день - в конце дня у меня по планам была генерация отчёта, в итоге возник такой exception:

System.ArgumentOutOfRangeException was unhandled by user code Message=Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks. Parameter name: ticks Source=mscorlib ParamName=ticks StackTrace: at System.DateTime..ctor(Int64 ticks) at Ecng.Common.TimeSpanEx.ToString(String format, IFormatProvider formatProvider) at Ecng.Common.TimeSpanEx.ToString(String format) at Ecng.Trading.Algo.XmlStrategyReport.Generate() at Robots.MainWindow.MainWindow.OnClosing(CancelEventArgs e) at System.Windows.Window.WmClose() InnerException:

Отчёт генерирую для каждой стратегии через var fileNameXml = "{0} _{1}.xml".Put(DateTime.Now.ToString("MM_dd"), strategy.Portfolio.Name); new XmlStrategyReport(strategy, Path.Combine("c:
", fileNameXml)).Generate();

Спасибо:

Alexander

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


Никаких мыслей пока нет? Сегодня попробую вечером сгенерировать отчёт, пока работает без ошибок весь день - заменил снятие заявок на старое, через Trader.CancelOrder

Ещё заметил такую вещь, ещё начиная с 2.1 - периодически пропадает связь или, к примеру, перед торгами - в нижнем левом углу Квика просто в этом случае не отображается текущее время. Тогда вылетает эксепшен необрабатываемый:

http://img.pixs.ru/storage/3/8/5/123png_1161875_897385.png

Мелочь, а не приятно =) Можно вместо этой ошибки выдавать просто текущее время? У некоторых брокеров, которыми я пользуюсь, в первые секунды (а то и пару минут) торгов время не идёт в нижнем левом углу - опять же, ошибка возникает. Я сейчас использую следующую функцию-заглушку: static public DateTime GetMarketTime(ITrader trader) { return trader.MarketTime.TimeOfDay < new TimeSpan(10, 5, 0) ? DateTime.Now : trader.MarketTime; }

Но в случае когда пропадает связь и время не отображается это не помогает (скрин выше - то что получил час назад судя по логу).

Спасибо:

Mikhail Sukhov

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


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

Насчет необрабатываемого исключения. Уверены? Судя по скрину - он то как раз обрабатываемый. Я специальное в try catch обернул получение времени из Квика.

Но доп проверку на время поставить не мешает.

Спасибо:

Alexander

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


Спасибо:

Mikhail Sukhov

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


Оно все как раз так и реализовано. Если ошибка - просто возвращается по старому (системное со смещением). А Вы если что-то правите, лучше делайте наследника и переопределяйте методы.

Насчет игнорирования - отпишитесь от события ProcessDataError. Только так лучше не делать =)

Спасибо:

Alexander

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


Переопределил, сегодня с утра попробовал просто использовать base.MarketTime - событие CandlesFinished не приходило до 10:01:57 (у меня 1 и 5-минутки фьючерса ртс). Как то может быть связано с неправильным временем? (как раз с тем, что первые пару минут неверное время отображается в самом квике. просто раньше не замечал такого долгого формирования свечек на открытии сессии...)

Спасибо:

Mikhail Sukhov

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


Связанно прямо. TimeFrameCandle опираются как раз на данное время.

Спасибо:
< 1 2 

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

loading
clippy