public override void Run() { StatisticsManager.Add(new DailyNumOfLossTrades()); StatisticsManager.Add(new DailyNumOfWinTrades()); StatisticsManager.Add(new DailyConsecutiveLossTrades()); Instrument instrument1 = InstrumentManager.Instruments["IF999"]; Instrument instrument2 = InstrumentManager.Instruments["IC999"]; // Create SMA Crossover strategy //DualThrust_RangeBreak_Strategy strategy = new DualThrust_RangeBreak_Strategy(framework, "DualThrust & RangeBreak"); //RBreaker_Strategy strategy = new RBreaker_Strategy(framework, "RBreaker"); //DynamicBreakOut2 strategy = new DynamicBreakOut2(framework, "DynamicBreakOut2"); DoubleMA_Crossover strategy = new DoubleMA_Crossover(framework, "DoubleMA Crossover"); strategy.MaxBarSize = MaxBarSize; // Add instruments strategy.AddInstrument(instrument1); strategy.AddInstrument(instrument2); // Set simulation interval DataSimulator.DateTime1 = new DateTime(2015, 04, 16); //DataSimulator.DateTime2 = new DateTime(2013, 12, 16, 9, 36, 0); DataSimulator.DateTime2 = new DateTime(2016, 11, 02); // Add 1 minute bars BarFactory.Add(instrument1, SmartQuant.BarType.Time, barSize); BarFactory.Add(instrument2, SmartQuant.BarType.Time, barSize); BarFactory.Add(instrument1, SmartQuant.BarType.Time, MaxBarSize); BarFactory.Add(instrument2, SmartQuant.BarType.Time, MaxBarSize); this.strategy = strategy; // Run the strategy StartStrategy(); }
public override void Run() { // Prepare running. Console.WriteLine("Prepare running in {0} mode...", framework.StrategyManager.Mode); // Get trading instruments. Instrument ins1 = InstrumentManager.Instruments["IF1612"]; // Create SMA Crossover with Loading data on start strategy. // and add trading instruments. DoubleMA_Crossover smaCrossoverLOS = new DoubleMA_Crossover(framework, "SMACrossoverLOS"); smaCrossoverLOS.Instruments.Add(ins1); // Set strategy as main. strategy = smaCrossoverLOS; Console.WriteLine("Prepare running in {0} mode...", framework.StrategyManager.Mode); // 开始时间是前一个交易日,这个地方要按自己策略的实际情况进行调整 DateTime startDate = DateTime.Now.DayOfWeek == DayOfWeek.Monday ? DateTime.Now.AddDays(-3).Date : DateTime.Now.AddDays(-1).Date; DateTime historicalData1EndTime = startDate; // 取本地的数据的最后时间 DataSeries ins1DataSeries = framework.DataManager.GetDataSeries(ins1, DataObjectType.Trade); if (ins1DataSeries != null && ins1DataSeries.Count > 0) { historicalData1EndTime = ins1DataSeries.DateTime2; } // 以两个时间的最大值为起点 historicalData1EndTime = new DateTime(Math.Max(historicalData1EndTime.Ticks, startDate.Ticks)); // Load and save historical trades from QuantBase provider. IHistoricalDataProvider quantBase = framework.ProviderManager.GetHistoricalDataProvider(94); if (quantBase.Status == ProviderStatus.Disconnected) { quantBase.Connect(); } // 等待连接成功,订阅太快了不行 while (!quantBase.IsConnected) { Thread.Sleep(1000); } // Load historical trades. Console.WriteLine("Load historical data."); TickSeries ins1TickSeries = framework.DataManager.GetHistoricalTrades(quantBase, ins1, historicalData1EndTime, DateTime.Now); Console.WriteLine("Save historical data."); // Save historical trades. foreach (Trade trade in ins1TickSeries) { framework.DataManager.Save(ins1, trade); } // Set DataSimulator's dates. DataSimulator.DateTime1 = startDate; DataSimulator.DateTime2 = DateTime.Now; // Set null for event filter. framework.EventManager.Filter = null; // Set property for suspend trading during simulation. DoubleMA_Crossover.SuspendTrading = true; // Add 5 minute bars (300 seconds) for trading instruments. BarFactory.Add(ins1, SmartQuant.BarType.Time, barSize); // Run in simulation. Console.WriteLine("Run in Backtest mode."); // Save current strategy mode. StrategyMode mode = framework.StrategyManager.Mode; // Set backtest mode. framework.StrategyManager.Mode = StrategyMode.Backtest; StartStrategy(StrategyMode.Backtest); // Run. Console.WriteLine("Run in {0} mode.", framework.StrategyManager.Mode); // Restore strategy mode. framework.StrategyManager.Mode = mode; // Get provider for realtime. Provider quantRouter = framework.ProviderManager.GetProvider(99) as Provider; if (quantRouter.Status == ProviderStatus.Disconnected) { quantRouter.Connect(); } while (!quantRouter.IsConnected) { Thread.Sleep(1000); } // Set property for trading. DoubleMA_Crossover.SuspendTrading = false; if (framework.StrategyManager.Mode == StrategyMode.Paper) { // Set QuantRouter as data provider. strategy.DataProvider = quantRouter as IDataProvider; } else if (framework.StrategyManager.Mode == StrategyMode.Live) { // Set QuantRouter as data and execution provider. strategy.DataProvider = quantRouter as IDataProvider; strategy.ExecutionProvider = quantRouter as IExecutionProvider; } StartStrategy(framework.StrategyManager.Mode); }
public override void Run() { StatisticsManager.Add(new DailyNumOfLossTrades()); StatisticsManager.Add(new DailyNumOfWinTrades()); StatisticsManager.Add(new DailyConsecutiveLossTrades()); Instrument instrument1 = InstrumentManager.Instruments["IF999"]; Instrument instrument2 = InstrumentManager.Instruments["IC999"]; // Create SMA Crossover strategy //DualThrust_RangeBreak_Strategy strategy = new DualThrust_RangeBreak_Strategy(framework, "DualThrust & RangeBreak"); //RBreaker_Strategy strategy = new RBreaker_Strategy(framework, "RBreaker"); //DynamicBreakOut2 strategy = new DynamicBreakOut2(framework, "DynamicBreakOut2"); DoubleMA_Crossover strategy = new DoubleMA_Crossover(framework, "DoubleMA Crossover"); strategy.MaxBarSize = MaxBarSize; // Add instruments strategy.AddInstrument(instrument1); //strategy.AddInstrument(instrument2); // Set simulation interval DataSimulator.DateTime1 = new DateTime(2015, 04, 16); //DataSimulator.DateTime2 = new DateTime(2013, 12, 16, 9, 36, 0); DataSimulator.DateTime2 = new DateTime(2016, 11, 02); // Add 1 minute bars BarFactory.Add(instrument1, SmartQuant.BarType.Time, barSize); //BarFactory.Add(instrument2, SmartQuant.BarType.Time, barSize); BarFactory.Add(instrument1, SmartQuant.BarType.Time, MaxBarSize); //BarFactory.Add(instrument2, SmartQuant.BarType.Time, MaxBarSize); this.strategy = strategy; Provider quantRouter = framework.ProviderManager.GetProvider(99) as Provider; if (quantRouter.Status == ProviderStatus.Disconnected) { quantRouter.Connect(); } while (!quantRouter.IsConnected) { Thread.Sleep(1000); } if (framework.StrategyManager.Mode == StrategyMode.Paper) { // Set QuantRouter as data provider. strategy.DataProvider = quantRouter as IDataProvider; } else if (framework.StrategyManager.Mode == StrategyMode.Live) { // Set QuantRouter as data and execution provider. strategy.DataProvider = quantRouter as IDataProvider; strategy.ExecutionProvider = quantRouter as IExecutionProvider; } // Run the strategy StartStrategy(); }