private object GetModel(string name, ModelProperties properties) { ModelInterface model = Plugins.Instance.GetModel(name); PropertyTable propertyTable = new PropertyTable(model); Starter starter = Factory.Starter.DesignStarter(); starter.Run(model); starter.Wait(); propertyTable.UpdateAfterInitialize(); if (properties != null) { model.OnProperties(properties); propertyTable.UpdateAfterProjectFile(); string[] keys = properties.GetModelKeys(); for (int i = 0; i < keys.Length; i++) { ModelProperties nestedProperties = properties.GetModel(keys[i]); if (nestedProperties.ModelType == ModelType.Indicator) { Add(nestedProperties); } } } else { LoadIndicators(model); } return(propertyTable); }
private void LoadModel(ModelProperties properties) { if (!QuietMode) { log.Debug(properties.ModelType + " " + properties.Name + ", type = " + properties.Type); } ModelInterface model = CreateModel(properties.Type, properties.Name); model.OnProperties(properties); if (!QuietMode) { log.Indent(); } string[] keys = properties.GetModelKeys(); for (int i = 0; i < keys.Length; i++) { ModelProperties nestedProperties = properties.GetModel(keys[i]); if (nestedProperties.ModelType == ModelType.Indicator) { } else { // type null for performance, positionsize, exitstrategy, etc. if (nestedProperties.Type == null) { HandlePropertySet(model, nestedProperties); } else { LoadModel(nestedProperties); Strategy nestedModel = TopModel as Strategy; nestedModel.OnProperties(nestedProperties); AddDependency(model, nestedModel); } } } if (!QuietMode) { log.Outdent(); } TopModel = model; }
private void HandlePropertySet(ModelInterface model, ModelProperties properties) { if (!QuietMode) { log.Debug(properties.Name); log.Indent(); } if ("exitstrategy".Equals(properties.Name)) { Strategy strategy = (Strategy)model; strategy.ExitStrategy.OnProperties(properties); } else if ("performance".Equals(properties.Name)) { if (model is Portfolio) { Portfolio portfolio = (Portfolio)model; portfolio.Performance.OnProperties(properties); } else if (model is Strategy) { Strategy strategy = (Strategy)model; strategy.Performance.OnProperties(properties); } else { throw new ApplicationException("'" + model.Name + "' is neither a strategy nor a portfolio."); } } else { model.OnProperties(properties); } if (!QuietMode) { log.Outdent(); } }