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


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


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

В строке 3 выдается исключение:
Quote:
System.ArgumentNullException не обработано
Message=Значение не может быть неопределенным.
Имя параметра: key
Source=mscorlib
ParamName=key
StackTrace:
в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
в Ecng.Collections.SynchronizedDictionary`2.Add(TKey key, TValue value)
в Ecng.Collections.SynchronizedDictionary`2.Add(KeyValuePair`2 item)
в Ecng.Serialization.CollectionEntityFactory`2.CreateEntity(ISerializer serializer, SerializationItemCollection source)
в Ecng.Serialization.EntityFactory`1.CreateObject(ISerializer serializer, SerializationItemCollection source)
в Ecng.Serialization.Serializer`1.Deserialize(SerializationItemCollection source, FieldList fields)
в Ecng.Serialization.Serializer`1.Deserialize(Stream stream, FieldList fields)
в Ecng.Serialization.Serializer`1.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 Go to
Файл сохранен предыдущей версией?


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

PavelAd

Avatar
Date: 8/23/2012
Reply


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

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


и получаю исключение:
Quote:
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[T](Type type, Object[] args)
в Ecng.Serialization.ReflectionFieldFactoryAttribute.CreateFactory(Field field)
в Ecng.Serialization.TypeSchemaFactory.<>c__DisplayClass11.<CreateSchema>b__d(FieldFactoryAttribute a)
в System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
в System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
в System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
в Ecng.Serialization.TypeSchemaFactory.CreateSchema(Type entityType)
в Ecng.Serialization.SchemaManager.<>c__DisplayClass5.<GetSchema>b__4(Type key)
в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler, Boolean& isNew)
в Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler)
в Ecng.Serialization.SchemaManager.GetSchema(Type entityType, SchemaFactory factory)
в Ecng.Serialization.SchemaManager.GetSchema(Type entityType)
в Ecng.Serialization.SchemaManager.GetSchema[TEntity]()
в Ecng.Serialization.Serializer`1.get_Schema()
в Ecng.Serialization.Serializer`1.GetFields()
в Ecng.Serialization.Serializer`1.Serialize(T graph, SerializationItemCollection source)
в Ecng.Serialization.Serializer`1.Ecng.Serialization.ISerializer.Serialize(Object graph, SerializationItemCollection source)
в Ecng.Serialization.InnerSchemaFieldFactory`1.OnCreateSource(ISerializer serializer, TEntity instance)
в Ecng.Serialization.FieldFactory`2.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.DynamicFieldFactory.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.FieldFactory`2.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.Serializer`1.Serialize(T graph, FieldList fields, SerializationItemCollection source)
в Ecng.Serialization.Serializer`1.Serialize(T graph, SerializationItemCollection source)
в Ecng.Serialization.RealCollectionFieldFactory`2.OnCreateSource(ISerializer serializer, TCollection instance)
в Ecng.Serialization.FieldFactory`2.OnCreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.FieldFactory.CreateSource(ISerializer serializer, Object instance)
в Ecng.Serialization.Serializer`1.Serialize(T graph, FieldList fields, SerializationItemCollection source)
в Ecng.Serialization.Serializer`1.Serialize(T graph, FieldList fields, Stream stream)
в Ecng.Serialization.Serializer`1.Serialize(T graph, Stream stream)
в Ecng.Serialization.Serializer`1.Serialize(T graph)
в Ecng.Serialization.Serializer`1.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.GetInstance[TService]()
в Ecng.Configuration.ConfigManager.GetService[T]()
в Ecng.Serialization.RelationFieldFactory`2..ctor(Field field, Int32 order)
в Ecng.Serialization.RelationSingleFieldFactory`2..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 (190)
Thanks:

PavelAd

Avatar
Date: 8/24/2012
Reply


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

Mikhail Sukhov

Avatar
Date: 8/24/2012
Reply


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


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

PavelAd

Avatar
Date: 8/27/2012
Reply


Mikhail Sukhov Go to

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


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

Quote:

<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:
Quote:

<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 не выгружается по аналогии:
Quote:

<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