/// <summary> /// Construct and initialize new optimizer param for algorithm. This is for internal /// use by the optimizer and should not be called by user applications. /// </summary> /// <param name="algorithm">parent algorithm</param> /// <param name="name">name of parameter</param> public OptimizerParam(Algorithm algorithm, string name) { _algorithm = algorithm; Name = name; IsEnabled = false; Type algoType = _algorithm.GetType(); PropertyInfo property = algoType.GetProperties() .Where(p => p.Name == name) .FirstOrDefault(); if (property != null) { _attribute = (OptimizerParamAttribute)property.GetCustomAttribute(typeof(OptimizerParamAttribute)); } FieldInfo field = algoType.GetFields() .Where(f => f.Name == name) .FirstOrDefault(); if (_attribute == null && field != null) { _attribute = (OptimizerParamAttribute)field.GetCustomAttribute(typeof(OptimizerParamAttribute)); } if (_attribute == null) { throw new Exception(string.Format("OptimizerParam: parameter {0} not found", name)); } Start = _attribute.Start; End = _attribute.End; Step = _attribute.Step; }
public DataSourceAlgorithm(Algorithm algo) : base(new Dictionary <DataSourceParam, string>()) { _algo = algo; Info[DataSourceParam.nickName] = Info[DataSourceParam.nickName2] = Info[DataSourceParam.ticker] = Info[DataSourceParam.symbolAlgo] = string.Format("algorithm:{0}{1}", _algo.GetType().Name, _algo.GetType().Name != _algo.Name ? ";" + _algo.Name : ""); Info[DataSourceParam.name] = _algo.Name; // by default, we run the data source in sync, if it was // instantiated from an algorithm instance Info[DataSourceParam.allowSync] = "true"; }
public DataSourceAlgorithm(Algorithm algo) : base(new Dictionary <DataSourceParam, string>()) { _algo = algo; Info[DataSourceParam.nickName] = Info[DataSourceParam.nickName2] = Info[DataSourceParam.ticker] = Info[DataSourceParam.symbolAlgo] = string.Format("algorithm:{0}", _algo.GetType().Name); Info[DataSourceParam.name] = _algo.Name; }
/// <summary> /// Retrieve all optimizable parameters for algorithm. /// </summary> /// <param name="algo">input algorithm</param> /// <returns>optimizable parameters</returns> public static IEnumerable <OptimizerParam> GetParams(Algorithm algo) { Type algoType = algo.GetType(); IEnumerable <PropertyInfo> properties = algoType.GetProperties() .Where(p => Attribute.IsDefined(p, typeof(OptimizerParamAttribute))); foreach (PropertyInfo property in properties) { yield return(new OptimizerParam(algo, property.Name)); } IEnumerable <FieldInfo> fields = algoType.GetFields() .Where(p => Attribute.IsDefined(p, typeof(OptimizerParamAttribute))); foreach (FieldInfo field in fields) { yield return(new OptimizerParam(algo, field.Name)); } yield break; }