4.1.3 Перестала работать загрузка параметров стратегии

4.1.3 Перестала работать загрузка параметров стратегии
Atom
8/22/2012
PavelAd


Загружаю параметры стратегии так:

 
if (System.IO.File.Exists("settings.xml")) {
  //Загрузка настроек стратегии из существующего конфигурационного файла
  var settingsStorage = new XmlSerializer<SettingsStorage>().Deserialize("settings.xml");
}

В строке 3 выдается исключение:

System.ArgumentNullException не обработано Message=Значение не может быть неопределенным. Имя параметра: key Source=mscorlib ParamName=key StackTrace: в System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) в System.Collections.Generic.Dictionary2.Add(TKey key, TValue value) в Ecng.Collections.SynchronizedDictionary2.Add(TKey key, TValue value) в Ecng.Collections.SynchronizedDictionary2.Add(KeyValuePair2 item) в Ecng.Serialization.CollectionEntityFactory2.CreateEntity(ISerializer serializer, SerializationItemCollection source) в Ecng.Serialization.EntityFactory1.CreateObject(ISerializer serializer, SerializationItemCollection source) в Ecng.Serialization.Serializer1.Deserialize(SerializationItemCollection source, FieldList fields) в Ecng.Serialization.Serializer1.Deserialize(Stream stream, FieldList fields) в Ecng.Serialization.Serializer1.Deserialize(Stream stream) в Ecng.Serialization.Serializer`1.Deserialize(String fileName) в 4.1.2 все работало.


Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 8/23/2012
Reply


Файл сохранен предыдущей версией?

Thanks:

PavelAd

Avatar
Date: 8/23/2012
Reply


Mikhail Sukhov: Файл сохранен предыдущей версией?

Да. Направление понятно

Thanks:

PavelAd

Avatar
Date: 8/23/2012
Reply


Чтобы получить файл настроек в новом формате вызываю как и раньше:


var StopLossSize = new Unit(200, UnitTypes.Limit);
....
settings.SetValue("StopLossSize", StopLossSize);
new XmlSerializer<SettingsStorage>().Serialize(settings, "settings_template.xml");

и получаю исключение:

System.Reflection.TargetInvocationException не обработано пользовательским кодом Message=Адресат вызова создал исключение. Source=mscorlib StackTrace: в System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct& signature, RuntimeType declaringType) в System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct signature, RuntimeType declaringType) в System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) в System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) в System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) в System.Activator.CreateInstance(Type type, Object[] args) в Ecng.Common.TypeHelper.CreateInstanceArgs(Type type, Object[] args) в Ecng.Serialization.ReflectionFieldFactoryAttribute.CreateFactory(Field field) в Ecng.Serialization.TypeSchemaFactory.<>c__DisplayClass11.<CreateSchema>b__d(FieldFactoryAttribute a) в System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() в System.Collections.Generic.List1..ctor(IEnumerable1 collection) в System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) в Ecng.Serialization.TypeSchemaFactory.CreateSchema(Type entityType) в Ecng.Serialization.SchemaManager.<>c__DisplayClass5.<GetSchema>b__4(Type key) в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler, Boolean& isNew) в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary2 dictionary, TKey key, Func2 handler) в Ecng.Serialization.SchemaManager.GetSchema(Type entityType, SchemaFactory factory) в Ecng.Serialization.SchemaManager.GetSchema(Type entityType) в Ecng.Serialization.SchemaManager.GetSchemaTEntity в Ecng.Serialization.Serializer1.get_Schema() в Ecng.Serialization.Serializer1.GetFields() в Ecng.Serialization.Serializer1.Serialize(T graph, SerializationItemCollection source) в Ecng.Serialization.Serializer1.Ecng.Serialization.ISerializer.Serialize(Object graph, SerializationItemCollection source) в Ecng.Serialization.InnerSchemaFieldFactory1.OnCreateSource(ISerializer serializer, TEntity instance) в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.DynamicFieldFactory.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, SerializationItemCollection source) в Ecng.Serialization.Serializer1.Serialize(T graph, SerializationItemCollection source) в Ecng.Serialization.RealCollectionFieldFactory2.OnCreateSource(ISerializer serializer, TCollection instance) в Ecng.Serialization.FieldFactory2.OnCreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance) в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, SerializationItemCollection source) в Ecng.Serialization.Serializer1.Serialize(T graph, FieldList fields, Stream stream) в Ecng.Serialization.Serializer1.Serialize(T graph, Stream stream) в Ecng.Serialization.Serializer1.Serialize(T graph) в Ecng.Serialization.Serializer1.Serialize(T graph, String fileName) в TradeStrategy.TresureStrategy.Save(SettingsStorage settings) в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 2004 в TradeStrategy.TresureStrategy.OnStopped() в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 367 в StockSharp.Algo.Strategies.Strategy.#=q9ZjYAh_tjTRiPKXRpMmVPaf8lHMr7XpjKfF8P_SBSxY=(ProcessStates #=qK93m3AC1JAhKyhuxNljMUw==) InnerException: Microsoft.Practices.ServiceLocation.ActivationException Message=Activation error occured while trying to get instance of type IStorage, key "" Source=Microsoft.Practices.ServiceLocation StackTrace: в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstanceTService в Ecng.Configuration.ConfigManager.GetService() в Ecng.Serialization.RelationFieldFactory2..ctor(Field field, Int32 order) в Ecng.Serialization.RelationSingleFieldFactory2..ctor(Field field, Int32 order) InnerException: Microsoft.Practices.Unity.ResolutionFailedException Message=Resolution of the dependency failed, type = "Ecng.Serialization.IStorage", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, Ecng.Serialization.IStorage, is an interface and cannot be constructed. Are you missing a type mapping?

At the time of the exception, the container was:

Resolving Ecng.Serialization.IStorage,(none)

        Source=Microsoft.Practices.Unity
        TypeRequested=IStorage
        StackTrace:
             в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
             в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
             в Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
             в Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type serviceType, String key)
             в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
        InnerException: System.InvalidOperationException
             Message=The current type, Ecng.Serialization.IStorage, is an interface and cannot be constructed. Are you missing a type mapping?
             Source=Microsoft.Practices.Unity
             StackTrace:
                  в Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForAttemptingToConstructInterface(IBuilderContext context)
                  в BuildUp_Ecng.Serialization.IStorage(IBuilderContext )
                  в Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
                  в Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
                  в Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
                  в Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
             InnerException:

Исключение выходит только в случае сохранения параметров типа Unit

Thanks:

PavelAd

Avatar
Date: 8/23/2012
Reply


Ошибку повторил используя пример SampleHistoryTesting добавив сериализацию объекта Unit.

Thanks:

PavelAd

Avatar
Date: 8/24/2012
Reply


Измененный пример SampleHistoryTesting где повторяется ошибка

SmaStrategy.cs 2 KB (499)
Thanks:

PavelAd

Avatar
Date: 8/24/2012
Reply


Ошибка подтверждается7

Thanks:

Mikhail Sukhov

Avatar
Date: 8/24/2012
Reply


PavelAd: Ошибка подтверждается7

Unit так просто не сохранить в файл. Там нужно регистрировать загрузчик инструментов для инициализации Unit.Security

Thanks:

PavelAd

Avatar
Date: 8/27/2012
Reply


Mikhail Sukhov: Unit так просто не сохранить в файл. Там нужно регистрировать загрузчик инструментов для инициализации Unit.Security

И как тогда быть? Возожно привести пример такого загрузчика? Замечу еще раз что в 4.1.2 в старом формате все выгружалось, например:

<StopLoss type="StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.2.0, Culture=neutral, PublicKeyToken=null"> <Security hasValue="false" /> <Type>0</Type> <Value>120</Value> </StopLoss>

В новом формате сложные типы (например индикаторы) выгружаются без проблем, например EMA:

<KeyValuePairBeginStringAndObjectEnd> <key>MAHigh</key> <value> <Type type="string">StockSharp.Algo.Indicators.ExponentialMovingAverage, StockSharp.Algo.Indicators, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Type> <Value type="StockSharp.Algo.Indicators.ExponentialMovingAverage, StockSharp.Algo.Indicators, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <Length>10</Length> <Name>ExponentialMovingAverage</Name> </Value> </value> </KeyValuePairBeginStringAndObjectEnd>

почему Unit не выгружается по аналогии:

<KeyValuePairBeginStringAndObjectEnd> <key>StopLoss</key> <value> <Type type="string">StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.4.0, Culture=neutral, PublicKeyToken=null</Type> <Value type="StockSharp.BusinessEntities.Unit, StockSharp.BusinessEntities, Version=4.1.4.0, Culture=neutral, PublicKeyToken=null"> <Security hasValue="false" /> <Type>0</Type> <Value>120</Value> </Value> </value> </KeyValuePairBeginStringAndObjectEnd>

Thanks:


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

loading
clippy