private IBot _AddBot(BotMode mode, BacktestResultHandle backtestResultHandle = null, IAccount account = null, BacktestResult backtestResult = null, PBot pBot = null, TBot tBot = null, IBot bot = null) { if (account == null) { throw new ArgumentNullException(nameof(account)); } if (backtestResult == null) { backtestResult = backtestResultHandle?.Object; } if (bot == null) { if (pBot != null) { bot = (IBot)pBot.Instantiate(); } else { if (tBot == null) { tBot = backtestResult.TBot; //if (backtestResult == null) { backtestResult = backtestResultHandle?.Object; } //var templateType = ResolveType(backtestResult.BotConfigType); ////var templateType = Type.GetType(result.BotConfigType); //if (templateType == null) //{ // throw new NotSupportedException($"Bot type not supported: {backtestResult.BotConfigType}"); //} //tBot = (TBot)((JObject)backtestResult.Config).ToObject(templateType); } if (tBot == null) { throw new ArgumentNullException(nameof(tBot)); } bot = (IBot)tBot.Create(); } } //bot.Modes = mode | BotMode.Paper; //var botVM = new BotVM() { Bot = bot }; //botVM.State = SupervisorBotState.Scanner; if (bot.Modes.HasFlag(BotMode.Live)) { throw new Exception("Not ready for live yet"); } bot.Account = account; //botVM.AddBacktestResult(backtestResult); //bool hasPaper = mode.HasFlag(BotMode.Paper); //if (mode != BotMode.Paper) //{ // mode = mode & ~BotMode.Paper; //} //if (mode.HasFlag(BotMode.Live)) { LiveBots.Add(bot); Template.LiveBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Demo)) { DemoBots.Add(bot); Template.DemoBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Scanner)) { Scanners.Add(bot); Template.Scanners.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Paper)) { PaperBots.Add(bot); Template.PaperBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Live)) { if (LiveBots == null) { LiveBots = new ObservableCollection<IBot>(); } LiveBots.Add(bot); } //if (mode.HasFlag(BotMode.Demo)) { if (DemoBots == null) { DemoBots = new ObservableCollection<IBot>(); } DemoBots.Add(bot); } if (Bots == null) { Bots = new ObservableCollection <IBot>(); } if (!BotIds.Contains(bot.Template.Id)) { BotIds.Add(bot.Template.Id); Bots.Add(bot); } //if (mode.HasFlag(BotMode.Paper)) { if (PaperBots==null) { PaperBots = new ObservableCollection<IBot>(); } PaperBots.Add(bot); } //if (pBot != null) //{ // bot.DesiredExecutionState = pBot.DesiredExecutionState; //} //switch (mode) //{ // case BotMode.Live: // LiveBots.Add(bot); // break; // case BotMode.Demo: // DemoBots.Add(bot); // break; // case BotMode.Scanner: // Scanners.Add(bot); // break; // case BotMode.Paper: // break; // default: // throw new ArgumentException(nameof(mode)); //} //if (mode.HasFlag(BotMode.Scanner)) //{ // Scanners.Add(bot); //} //if (mode.HasFlag(BotMode.Live)) //{ // LiveBots.Add(bot); //} //if (mode.HasFlag(BotMode.Demo)) //{ // DemoBots.Add(bot); //} //if (mode.HasFlag(BotMode.Paper)) //{ // PaperBots.Add(bot); //} //Task.Factory.StartNew(() => bot.Start()); return(bot); }
public void AddScanner(BacktestResultHandle handle) { _AddBot(BotMode.Scanner | BotMode.Paper, account: Workspace.DefaultScannerAccount, backtestResultHandle: handle); }