← Atrás

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

Добрый день! Выкачал с сайта библиотеку 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);

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

Comentarios (22)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Moadip
Moadip

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

Последнюю версию надо брать с CodePlex.

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

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

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

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

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

Moadip
Moadip

Его надо "собрать" из исходников. Лежит в trunk\Connectors\Alfa

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

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

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

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

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

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

Alexander
Alexander

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

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

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

Moadip
Moadip

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

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

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

Alexander
Alexander

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

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

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

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

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() 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, Nullable1 isGetter) at Ecng.Reflection.FastInvoker.<>c__DisplayClass1.<CreateCore>b__0(MemberInfo ) at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler, Boolean& isNew) at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler) at Ecng.Reflection.FastInvoker.CreateCore(MemberInfo member, Nullable1 isGetter) at Ecng.Reflection.FastInvoker.Create(PropertyInfo property, Boolean isGetter) at Ecng.Reflection.FastInvoker3.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==(IList1 #=q9BNzHBlc06wgg381qfVUEQ==, Func2 #=qivlfx$qlAvIYE1pmmAARMQ==) at #=qK5kWDJ0_XW_Aedhy0g8SeMBpMGoLqpi0ECaFDIHBygK4oEhhC9gQwYGUtzsPXJHy.#=qOp1Kjm53VvY4eYcKjHX_Uw==(DdeTable #=qzoKtk1FXJ$qJNjkYgeeicQ==, IList1 #=qjP6stMDpNWPwX2U9eMudOA==, Action2 #=qmPhanvmWRQtENEbTlUdW$g==, Action1 #=qicxbnTfEt0LFUHmQGTUN5Q==, Boolean #=qPUBc_znQLbZWaXnkyh1ZQQ==) 00:11:39.382 | | QuikTrader | Экспорт запущен.

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

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

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() 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, Nullable1 isGetter) at Ecng.Reflection.FastInvoker.<>c__DisplayClass1.<CreateCore>b__0(MemberInfo ) at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler, Boolean& isNew) at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler) at Ecng.Reflection.FastInvoker.CreateCore(MemberInfo member, Nullable1 isGetter) at Ecng.Reflection.FastInvoker.Create(PropertyInfo property, Boolean isGetter) at Ecng.Reflection.FastInvoker3.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==(IList1 #=q9BNzHBlc06wgg381qfVUEQ==, Func2 #=qivlfx$qlAvIYE1pmmAARMQ==) at #=qK5kWDJ0_XW_Aedhy0g8SeMBpMGoLqpi0ECaFDIHBygK4oEhhC9gQwYGUtzsPXJHy.#=qOp1Kjm53VvY4eYcKjHX_Uw==(DdeTable #=qzoKtk1FXJ$qJNjkYgeeicQ==, IList1 #=qjP6stMDpNWPwX2U9eMudOA==, Action2 #=qmPhanvmWRQtENEbTlUdW$g==, Action1 #=qicxbnTfEt0LFUHmQGTUN5Q==, Boolean #=qPUBc_znQLbZWaXnkyh1ZQQ==) 00:15:33.824 | | QuikTrader | Экспорт запущен. 00:15:56.194 | | QuikTrader | Экспорт остановлен.

Alexander
Alexander

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

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

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

сейчас отключил UAC, ситуация не изменилась

Alexander
Alexander

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

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

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

Alexander
Alexander

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

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

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

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

Откуда вы взяли этот стэктрэйс что привели выше? создал вот так 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 то там все сделки есть

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

Проблему импорта кажется победил, внимательнее посмотрел пример 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
Alexander

Подтверждаю, есть такое

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

Alexander Mukhanchikov: Подтверждаю, есть такое А у вас в планах будет пофиксить это?

Alexander
Alexander

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