コード例 #1
0
        /// <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;
        }
コード例 #2
0
            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";
            }
コード例 #3
0
 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;
 }
コード例 #4
0
        /// <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;
        }