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

Ошибка при генерации отчёта через ExcelStrategyReport
Atom
8/16/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:


Tags:


Thanks:


< 1 2 
Mikhail Sukhov

Avatar
Date: 8/16/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 8/17/2010
Reply


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

Thanks:

Alexander

Avatar
Date: 8/18/2010
Reply


Сегодня впервые робот на 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();
Thanks:

Alexander

Avatar
Date: 8/19/2010
Reply


Никаких мыслей пока нет? Сегодня попробую вечером сгенерировать отчёт,
пока работает без ошибок весь день - заменил снятие заявок на старое,
через 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;
}

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

Thanks:

Mikhail Sukhov

Avatar
Date: 8/19/2010
Reply


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

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

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

Thanks:

Alexander

Avatar
Date: 8/19/2010
Reply


Thanks:

Mikhail Sukhov

Avatar
Date: 8/19/2010
Reply


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

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

Thanks:

Alexander

Avatar
Date: 8/19/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 8/19/2010
Reply


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

Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy