public static void TrySetStrategy(StrategyInterface strategy) { if (breakMode == BreakMode.None || locationType != LocationType.Platform) { return; } BreakPoint bp; switch (constraintType) { case ConstraintType.Strategy: if (strategy.Name == constraint) { bp = new BreakPoint(); bp.strategy = strategy; strategy.AddInterceptor(bp); } break; case ConstraintType.Symbol: if (strategy.SymbolDefault == constraint) { bp = new BreakPoint(); bp.strategy = strategy; strategy.AddInterceptor(bp); } break; default: bp = new BreakPoint(); bp.strategy = strategy; strategy.AddInterceptor(bp); break; } }
public override void OnConfigure() { changeActiveNow.OnInitialize(); changeNextBar.OnInitialize(); reverseActiveNow.OnInitialize(); reverseNextBar.OnInitialize(); exitActiveNow.OnInitialize(); enterActiveNow.OnInitialize(); exitNextBar.OnInitialize(); enterNextBar.OnInitialize(); exitNextBar.OnInitialize(); base.OnConfigure(); BreakPoint.TrySetStrategy(this); AddInterceptor(preFillManager); AddInterceptor(performance.Equity); AddInterceptor(performance); AddInterceptor(exitStrategy); AddInterceptor(postFillManager); }
public sealed override void OnConfigure() { BreakPoint.TrySetStrategy(this); base.OnConfigure(); AddInterceptor(performance.Equity); AddInterceptor(performance); do { // Count all the unique symbols used by dependencies and // get a list of all the strategies. strategies = new List <Strategy>(); portfolios = new List <Portfolio>(); Dictionary <string, List <Model> > symbolMap = new Dictionary <string, List <Model> >(); for (int i = 0; i < Chain.Dependencies.Count; i++) { Chain chain = Chain.Dependencies[i]; if (chain.Model is Strategy || chain.Model is Portfolio) { Model model = (Model)chain.Model; List <Model> tempModels; if (symbolMap.TryGetValue(model.SymbolDefault, out tempModels)) { tempModels.Add(model); } else { tempModels = new List <Model>(); tempModels.Add(model); symbolMap[model.SymbolDefault] = tempModels; } if (model is Strategy) { strategies.Add((Strategy)model); } else if (model is Portfolio) { portfolios.Add((Portfolio)model); } } } if (symbolMap.Count == 1) { portfolioType = PortfolioType.SingleSymbol; } else if (symbolMap.Count == (strategies.Count + portfolios.Count)) { portfolioType = PortfolioType.MultiSymbol; } else { // Remove all dependencies which have more than one obect. for (int i = Chain.Dependencies.Count - 1; i >= 0; i--) { Chain chain = Chain.Dependencies[i]; Chain.Dependencies.RemoveAt(i); } // There is a mixture of multi symbols and multi strategies per symbol. // Insert additional Portfolios for each symbol. foreach (var kvp in symbolMap) { string symbol = kvp.Key; List <Model> tempStrategies = kvp.Value; if (tempStrategies.Count > 1) { Portfolio portfolio = new Portfolio(); portfolio.Name = "AutoGen-Portfolio-" + symbol; portfolio.SymbolDefault = symbol; portfolio.IntervalDefault = IntervalDefault; portfolio.Performance.Equity.EnableDailyStats = Performance.Equity.EnableDailyStats; portfolio.Performance.Equity.EnableWeeklyStats = Performance.Equity.EnableWeeklyStats; portfolio.Performance.Equity.EnableMonthlyStats = Performance.Equity.EnableMonthlyStats; portfolio.Performance.Equity.EnableYearlyStats = Performance.Equity.EnableYearlyStats; foreach (var strategy in tempStrategies) { portfolio.Chain.Dependencies.Add(strategy.Chain); } Chain.Dependencies.Add(portfolio.Chain); } else { Model model = tempStrategies[0]; Chain.Dependencies.Add(model.Chain); } } } } while(portfolioType == PortfolioType.None); if (debug) { log.Debug("Configuring Portfolio " + Name + " for sub strategies/portfolios.."); } // Create strategy watchers foreach (var strategy in strategies) { SetupWatcher(strategy); } foreach (var portfolio in portfolios) { SetupWatcher(portfolio); } }