проблема с CandleManager - не возвращает весь диапазон свечек
Atom Ответить
16.06.2012


Добрый день!
Выкачал с сайта библиотеку 4.1.1 Сегодня 16 июня.
На более ранней версии библиотеки при регистрации менеджера свечек я получал свечки с начала торгового дня.
В сборке 4.1.1 при регистрации менеджера: this.candleManager.Start(this.candleSeries);
период времени, с которого начинается импорт свечек при каждом запуске программы оказывается разным. То есть
если несколько раз запускать одну и туже программу то случайным образом начало периода импорта свечек оказывается либо 13:40 либо 16:40 либо 19:40 (свечки десятиминутные)

Попытка использования перегруженной версии метода:
this.candleManager.Start(this.candleSeries, Convert.ToDateTime("15.06.2012 10:00:00"), Convert.ToDateTime("15.06.2012 23:40:00")); никак не повлияла на результат.

Опять я получаю либо набор начинающийся с 19:40 либо 16:40 либо с 13:40.

Для проверки делал такой вызов, что бы убедится что в запрошенном диапазоне данные есть:
var range = this.candleManager.GetSupportedRanges(this.candleSeries).GetEnumerator();
range.MoveNext();
this.candleManager1.Start(this.candleSeries, range.Current.Min, range.Current.Max);


Получаю аналогичный вышеописанному результат!

Теги:


Спасибо:




22 Ответов
Moadip

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


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

Последнюю версию надо брать с CodePlex.
Спасибо: Роман Угрюмов

Роман Угрюмов

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


Спасибо! Закачал с CodePlex последнюю сборку и все заработало как надо!

Можно еще пару вопросов? А куда в последней сборке делся StockSharp.AlfaDirect?
Автор топика
Спасибо:

Moadip

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


Его надо "собрать" из исходников. Лежит в trunk\Connectors\Alfa
Спасибо: Роман Угрюмов

Роман Угрюмов

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


Роман Угрюмов Перейти
Спасибо! Закачал с CodePlex последнюю сборку и все заработало как надо!

Не, рано я радовался. Свечки с 10:00 я получил, но не на каждом запуске программы они импортируются. То есть примерно в 2/3 не получаю вообще ничего, соответственно в 1/3 получаю правильно.
Автор топика
Спасибо:

Moadip

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


Покажите больше кода. Как создаете CandleManager, CandleSeries, когда и как запускается экспорт данных.

Проблемы пропуска свечек я больше ни разу не наблюдал.

UPD:
Походу дела понял в чем проблема.
dll надо брать из ветки trunk, т.к. она обновляется. Если dll из dev, то пропуски есть.
Спасибо: Роман Угрюмов

Роман Угрюмов

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


Взял из trunk dll
Картина не изменилась. Поясню что я имею ввиду.
Пропуски собственно говоря исчезли, я получаю аккуратные данные начиная с 10-00
Но! Сам процесс импорта запускается не всегда. То есть один и тот же код, запускаешь
импорт свечек, три раза может начаться нормально, потом (код не меняется) пару раз
не импортировать, потом импортировать и.т.д
То есть есть некий случайный фактор, который я не могу найти. То есть импорт, то нет его.
Прикол в том, что с ранней версией где не было series импортировало аккуратно и всегд, а вечера
новую версию выкачал и вот вторые сутки бъюсь
Автор топика
Спасибо:

Alexander

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


Приводите код и лог который это продемонстрирует.
Спасибо:

Роман Угрюмов

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


Я готов хоть весь свой проект выслать, там сверхценных алгоритмов нет. на какой адрес выслать?
а под логом, что вы имели ввиду?
Автор топика
Спасибо:

Moadip

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


Роман Угрюмов Перейти
Я готов хоть весь свой проект выслать, там сверхценных алгоритмов нет. на какой адрес выслать?
а под логом, что вы имели ввиду?


Ну если сверхценных граалей нет, можете прямо сюда выложить, прикрепив архив к посту.BigGrin

Лог, это использование класса логгера LogManager
Лог может быть в различном формате, например в txt - FileLogListener
Спасибо: Роман Угрюмов

Роман Угрюмов

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


Это лог когда импорт не запустился:


00:11:34.781 | Error | QuikTrader | System.TypeInitializationException: The type initializer for 'StockSharp.Algo.Licensing.LicenseHelper' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Security.CryptoAlgorithm' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Reflection.Emit.AssemblyHolder' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Configuration.ConfigManager' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System' or one of its dependencies. Не удается найти указанный файл.
at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, String typeString, Boolean throwOnError)
at System.Configuration.MgmtConfigurationRecord.CreateSectionGroupFactory(FactoryRecord factoryRecord)
at System.Configuration.MgmtConfigurationRecord.EnsureSectionGroupFactory(FactoryRecord factoryRecord)
at System.Configuration.MgmtConfigurationRecord.GetSectionGroup(String configKey)
at System.Configuration.ConfigurationSectionGroupCollection.Get(String name)
at System.Configuration.ConfigurationSectionGroupCollection.<GetEnumerator>d__0.MoveNext()
at Ecng.Configuration.ConfigManager.<>c__DisplayClass4.<.cctor>b__1(ConfigurationSectionGroupCollection groups)
at Ecng.Configuration.ConfigManager..cctor()
--- End of inner exception stack trace ---
at Ecng.Configuration.ConfigManager.GetSection[T]()
at Ecng.Reflection.Emit.AssemblyHolder..cctor()
--- End of inner exception stack trace ---
at Ecng.Reflection.Emit.AssemblyHolder.get_NeedCache()
at Ecng.Reflection.FastInvoker.CreateDelegate(Type delegType, Type instanceType, Type argType, ConstructorInfo ctor, MethodInfo method, MemberInfo member, Nullable`1 isGetter)
at Ecng.Reflection.FastInvoker.<>c__DisplayClass1.<CreateCore>b__0(MemberInfo )
at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler, Boolean& isNew)
at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler)
at Ecng.Reflection.FastInvoker.CreateCore(MemberInfo member, Nullable`1 isGetter)
at Ecng.Reflection.FastInvoker.Create(PropertyInfo property, Boolean isGetter)
at Ecng.Reflection.FastInvoker`3.Create(PropertyInfo property, Boolean isGetter)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](MemberInfo member, A arg)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](Type type, String memberName, BindingFlags flags, A arg)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](Type type, String memberName, A arg)
at Ecng.Security.CryptoAlgorithm..cctor()
--- End of inner exception stack trace ---
at Ecng.Security.CryptoAlgorithm.Create(AlgorithmTypes type, ProtectedKey[] keys)
at StockSharp.Algo.Licensing.LicenseHelper..cctor()
--- End of inner exception stack trace ---
at StockSharp.Algo.Licensing.LicenseHelper.IsLicenseSupport(Type featureType)
at StockSharp.Algo.BaseTrader..ctor(Boolean checkLicense)
00:11:36.269 | Error | QuikTrader | System.InvalidOperationException: Инструмент с кодом GAZP для бумажной позиции не найден.
at StockSharp.Quik.QuikTrader.#=qrDHUuxlCxpMFVWZelS7cxBV0UdbwRVjf47rF6sL_Bpk=.#=qNLWkuSgES4bcfsZdVaIg4Q==(IList`1 #=q9BNzHBlc06wgg381qfVUEQ==, Func`2 #=qivlfx$qlAvIYE1pmmAARMQ==)
at #=qK5kWDJ0_XW_Aedhy0g8SeMBpMGoLqpi0ECaFDIHBygK4oEhhC9gQwYGUtzsPXJHy.#=qOp1Kjm53VvY4eYcKjHX_Uw==(DdeTable #=qzoKtk1FXJ$qJNjkYgeeicQ==, IList`1 #=qjP6stMDpNWPwX2U9eMudOA==, Action`2 #=qmPhanvmWRQtENEbTlUdW$g==, Action`1 #=qicxbnTfEt0LFUHmQGTUN5Q==, Boolean #=qPUBc_znQLbZWaXnkyh1ZQQ==)
00:11:39.382 | | QuikTrader | Экспорт запущен.
Автор топика
Спасибо:

Alexander

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


Роман Угрюмов Перейти
Я готов хоть весь свой проект выслать, там сверхценных алгоритмов нет. на какой адрес выслать?
а под логом, что вы имели ввиду?


проект не нужен.
нужен минимальный код и дебаг печать, которая покажет что вы описываете
Спасибо:

Роман Угрюмов

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


Это лог с успешно запущеным импортом:

00:15:33.079 | Error | QuikTrader | System.TypeInitializationException: The type initializer for 'StockSharp.Algo.Licensing.LicenseHelper' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Security.CryptoAlgorithm' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Reflection.Emit.AssemblyHolder' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Ecng.Configuration.ConfigManager' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System' or one of its dependencies. Не удается найти указанный файл.
at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, String typeString, Boolean throwOnError)
at System.Configuration.MgmtConfigurationRecord.CreateSectionGroupFactory(FactoryRecord factoryRecord)
at System.Configuration.MgmtConfigurationRecord.EnsureSectionGroupFactory(FactoryRecord factoryRecord)
at System.Configuration.MgmtConfigurationRecord.GetSectionGroup(String configKey)
at System.Configuration.ConfigurationSectionGroupCollection.Get(String name)
at System.Configuration.ConfigurationSectionGroupCollection.<GetEnumerator>d__0.MoveNext()
at Ecng.Configuration.ConfigManager.<>c__DisplayClass4.<.cctor>b__1(ConfigurationSectionGroupCollection groups)
at Ecng.Configuration.ConfigManager..cctor()
--- End of inner exception stack trace ---
at Ecng.Configuration.ConfigManager.GetSection[T]()
at Ecng.Reflection.Emit.AssemblyHolder..cctor()
--- End of inner exception stack trace ---
at Ecng.Reflection.Emit.AssemblyHolder.get_NeedCache()
at Ecng.Reflection.FastInvoker.CreateDelegate(Type delegType, Type instanceType, Type argType, ConstructorInfo ctor, MethodInfo method, MemberInfo member, Nullable`1 isGetter)
at Ecng.Reflection.FastInvoker.<>c__DisplayClass1.<CreateCore>b__0(MemberInfo )
at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler, Boolean& isNew)
at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler)
at Ecng.Reflection.FastInvoker.CreateCore(MemberInfo member, Nullable`1 isGetter)
at Ecng.Reflection.FastInvoker.Create(PropertyInfo property, Boolean isGetter)
at Ecng.Reflection.FastInvoker`3.Create(PropertyInfo property, Boolean isGetter)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](MemberInfo member, A arg)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](Type type, String memberName, BindingFlags flags, A arg)
at Ecng.Reflection.ReflectionHelper.GetValue[A,V](Type type, String memberName, A arg)
at Ecng.Security.CryptoAlgorithm..cctor()
--- End of inner exception stack trace ---
at Ecng.Security.CryptoAlgorithm.Create(AlgorithmTypes type, ProtectedKey[] keys)
at StockSharp.Algo.Licensing.LicenseHelper..cctor()
--- End of inner exception stack trace ---
at StockSharp.Algo.Licensing.LicenseHelper.IsLicenseSupport(Type featureType)
at StockSharp.Algo.BaseTrader..ctor(Boolean checkLicense)
00:15:33.813 | Error | QuikTrader | System.InvalidOperationException: Инструмент с кодом GAZP для бумажной позиции не найден.
at StockSharp.Quik.QuikTrader.#=qrDHUuxlCxpMFVWZelS7cxBV0UdbwRVjf47rF6sL_Bpk=.#=qNLWkuSgES4bcfsZdVaIg4Q==(IList`1 #=q9BNzHBlc06wgg381qfVUEQ==, Func`2 #=qivlfx$qlAvIYE1pmmAARMQ==)
at #=qK5kWDJ0_XW_Aedhy0g8SeMBpMGoLqpi0ECaFDIHBygK4oEhhC9gQwYGUtzsPXJHy.#=qOp1Kjm53VvY4eYcKjHX_Uw==(DdeTable #=qzoKtk1FXJ$qJNjkYgeeicQ==, IList`1 #=qjP6stMDpNWPwX2U9eMudOA==, Action`2 #=qmPhanvmWRQtENEbTlUdW$g==, Action`1 #=qicxbnTfEt0LFUHmQGTUN5Q==, Boolean #=qPUBc_znQLbZWaXnkyh1ZQQ==)
00:15:33.824 | | QuikTrader | Экспорт запущен.
00:15:56.194 | | QuikTrader | Экспорт остановлен.
Автор топика
Спасибо:

Alexander

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


Администраторские права есть? Какая версия framework установлена?
Спасибо:

Роман Угрюмов

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


.NEW Framework 4 , Windiws 7, администратор, UAC отключен не был

сейчас отключил UAC, ситуация не изменилась
Автор топика
Спасибо:

Alexander

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


Откуда вы взяли этот стэктрэйс что привели выше?
У вас примеры работают? Verifier что выдаёт?
Лицензию получали?
Спасибо:

Роман Угрюмов

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


Откуда вы взяли этот стэктрэйс что привели выше?
создал вот так
private readonly LogManager logManager = new LogManager();

var fileLogListener = new FileLogListener("D:\\tradeFuckir.log");
this.logManager.Listeners.Add(fileLogListener);

this.quikTrader = new QuikTrader(quikPath).GuiSyncTrader(); // создаем шлюз к Quik-у и синхронизуем его
this.logManager.Sources.Add(this.quikTrader.Trader);

this.candleManager1 = new CandleManager(this.quikTrader); // создаем синхронизованный менеджер свечек по this.logManager.Sources.Add(this.candleManager1);

Лицензию получали?
Нет. О какой лицензии идет речь? Я прочитал что это бесплатная библиотека и в течении года балуюсь с ней.

Я начинаю подозревать что это проблема не библиотеки а самого квика. Запущу в рабочее время, посмотрю как
это все будет работать. А то сейчас воскресенье полтретьего утра
после вызова this.quikTrader.Connect(); // производим соединение
не появляется событие успешного подключения this.quikTrader.Connected
я игнорирую и запускаю DDE this.quikTrader.StartExport();
примерно в половине случаев не начинается генерация события Processing
this.candleManager = new CandleManager(this.quikTrader);
this.candleManager.Processing += this.CandleProcessing;

Хотя если заглянуть в this.quikTrader.Trades то там все сделки есть
Автор топика
Спасибо:

Роман Угрюмов

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


Проблему импорта кажется победил, внимательнее посмотрел пример SampleSync,
Создание шлюза в коде this.quikTrader = new QuikTrader(quikPath).GuiSyncTrader();

надо было вызывать старт импорта так:
this.quikTrader.Trader.StartExport()
в этом случае импорт стартует аккуратно

а я по невнимательности делал так this.quikTrader.StartExport()
в этом случае импорт часто не стартовал (вернее не было появления события this.candleManager.Processing)

Однако стал получать некоторые свечки по два раза, во вложении скриншот с гридом где этот видно

То есть приходит два раза сообщение this.candleManager.Processing со свечкой к примеру за 15:00

Это можно увидеть на примере SampleSync, если сделать такое изменение в коде:
Public partial class MainWindow
{
private CandleSeries series;
.......
.......

private void CandleSeriesProcessCandle(Candle candle)
{
if (candle.State == CandleStates.Finished)
{
return; // Бреакпоинт 1
}
return;
}

private void ShowChartClick(object sender, RoutedEventArgs e)
{
var security = (Security)Security.SelectedValue;
series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromMinutes(60));
series.ProcessCandle += this.CandleSeriesProcessCandle;
var range = this._candleManager.GetSupportedRanges(series).GetEnumerator();
range.MoveNext();
this._candleManager.Start(series, range.Current.Min, range.Current.Max);
}

В точке Бреакпоинт 1 можно видеть что приходят сообщения о том что финишировала свечка за к примеру 15:00 два раза
Автор топика
Спасибо:

Alexander

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


Подтверждаю, есть такое
Спасибо:

Роман Угрюмов

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


Alexander Mukhanchikov Перейти

Лицензию получали?

А что с лицензией? Ее надо получать? Я вроде на сайте видел что бесплатная библиотеке.
Автор топика
Спасибо:

Alexander

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


Роман Угрюмов Перейти
Alexander Mukhanchikov Перейти

Лицензию получали?

А что с лицензией? Ее надо получать? Я вроде на сайте видел что бесплатная библиотеке.


Читайте новости и документацию
Спасибо:

Роман Угрюмов

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


Alexander Mukhanchikov Перейти
Подтверждаю, есть такое

А у вас в планах будет пофиксить это?
Автор топика
Спасибо:

Alexander

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


Да, в планах стоит, в 4.1 попробуем пофиксить.
Спасибо:


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

loading
clippy