private void StartBackTest() { DateTime today = btParameter.StartDate.Date; MarketTimeRange marketRange = MarketTimeRange.getTimeRange(securityInfo.Market); int totalcount = this.policys.Count; DataMonitor da = new DataMonitor(); Parallel.For(0, totalcount, (j, LoopState) => { RunningPolicy policy = policys[j]; Guid g = policy.PolicyGuid; string backtesttitle = policy.getBackTestTitle(); PolicyStarted(new BackTestStartEventArgs(backtesttitle, g)); policy.PolicyResult_Arrival += policy_PolicyResult_Arrival; }); while (today <= btParameter.EndDate.Date) { string name = ConfigFileName.HistoryDataFileName + "\\Okex%" + securityInfo.Code + "%" + today.ToString("yyyyMMdd") + ".csv"; //string name = ConfigFileName.HistoryDataFileName + "\\XBTUSD-" + today.ToString("yyyyMMdd") + ".csv"; PolicyLoading(name); DataTable tickdatas = CSVFileHelper.OpenCSV(name); List <TickData> list_tickdata = new List <TickData>(); for (int i = 0; i < tickdatas.Rows.Count; i++) { DataRow dr = tickdatas.Rows[i]; DateTime tickTime = System.Convert.ToDateTime(dr["timestamp"].ToString().Replace("D", " ").Substring(0, 23)); //TickData tickdata = TickData.ConvertFromDataRow(dr); TickData tickdata = new TickData(); tickdata.Code = dr["symbol"].ToString(); tickdata.SecInfo = this.securityInfo; tickdata.Time = tickTime; tickdata.Preclose = 0; tickdata.Open = 0; tickdata.High = 0; tickdata.Low = 0; tickdata.Ask = System.Convert.ToDouble(dr["askPrice"]); tickdata.Bid = System.Convert.ToDouble(dr["bidPrice"]); tickdata.Last = (tickdata.Ask + tickdata.Bid) / 2; tickdata.Volume = 0; tickdata.Amt = 0; tickdata.IsReal = false; tickdata.Asks[0] = tickdata.Ask; tickdata.Bids[0] = tickdata.Bid; list_tickdata.Add(tickdata); } Parallel.For(0, totalcount, (j, LoopState) => { RunningPolicy policy = policys[j]; //policy.PolicyMessage_Arrival += policy_PolicyMessage_Arrival; //da.Simulator(tickdatas, policy.PolicyDataReceiver, policy.Inteval); da.BackSimulator(list_tickdata, policy.PolicyDataReceiver, 0); PolicyDataFinished(); }); list_tickdata.Clear(); today = today.AddDays(1); } Parallel.For(0, totalcount, (j, LoopState) => { Stopwatch sw = new Stopwatch(); RunningPolicy policy = policys[j]; Guid g = policy.PolicyGuid; PolicyFinished(g, sw.Elapsed); policy.PolicyResult_Arrival -= policy_PolicyResult_Arrival; sw.Stop(); }); RaiseFinished(new EventArgs()); }
public void Simulator(SecurityInfo si, DateTime startDate, DateTime endDate, DataReceiver da, int interval, bool needSimulte = false) { if (needSimulte) { DateTime today = startDate.Date; MarketTimeRange marketRange = MarketTimeRange.getTimeRange(si.Market); while (today <= endDate) { //DataTable tickdatas = CSVFileHelper.OpenCSV(ConfigFileName.HistoryDataFileName + "\\Okex%" + si.Code + "%" + today.ToString("yyyyMMdd") + ".csv"); //DataTable tickdatas = CSVFileHelper.OpenCSV(ConfigFileName.HistoryDataFileName + "\\" + si.Code + "-" + today.ToString("yyyyMMdd") + ".csv"); DataTable tickdatas = new DataTable(); try { tickdatas = CSVFileHelper.OpenCSV(ConfigFileName.HistoryDataFileName + "\\" + si.Code + "%" + today.ToString("yyyyMMdd") + ".csv"); } catch { } if (tickdatas.Rows.Count > 0) { for (int i = 0; i < tickdatas.Rows.Count; i++) { try { DataRow dr = tickdatas.Rows[i]; DateTime tickTime = System.Convert.ToDateTime(dr["timestamp"].ToString()); //DateTime tickTime = System.Convert.ToDateTime(dr["timestamp"].ToString().Replace("D", " ").Substring(0, 23)); TickData tickdata = new TickData(); tickdata.Code = si.Code; tickdata.SecInfo = GlobalValue.GetFutureByCodeAndMarket(tickdata.Code, si.Market); tickdata.Time = tickTime; tickdata.Preclose = 0; tickdata.Open = 0; tickdata.High = 0; tickdata.Low = 0; tickdata.Ask = System.Convert.ToDouble(dr["askPrice"].ToString()); tickdata.Bid = System.Convert.ToDouble(dr["bidPrice"].ToString()); //tickdata.Last = System.Convert.ToDouble(dr["lastPrice"].ToString()); tickdata.Last = (tickdata.Ask + tickdata.Bid) / 2; tickdata.Volume = 0; tickdata.Amt = 0; tickdata.IsReal = false; for (int j = 0; j < 10; j++) { tickdata.Asks[j] = tickdata.Ask; tickdata.Bids[j] = tickdata.Bid; tickdata.Asksizes[j] = System.Convert.ToDouble(dr["askSize"]); tickdata.Bidsizes[j] = System.Convert.ToDouble(dr["bidSize"]); } da.DataArrival(tickdata); if (interval != 0) { Thread.Sleep(interval); } } catch { } } } today = today.AddDays(1); } //DataTable tickdatas = CSVFileHelper.OpenCSV(ConfigFileName.HistoryDataFileName + "\\rb15.csv"); ////DataTable tickdatas = CSVFileHelper.OpenCSV(ConfigFileName.HistoryDataFileName + "\\XBTUSD-" + today.ToString("yyyyMMdd") + ".csv"); //if (tickdatas.Rows.Count > 0) //{ // for (int i = 0; i < tickdatas.Rows.Count; i++) // { // DataRow dr = tickdatas.Rows[i]; // DateTime tickTime = System.Convert.ToDateTime(dr["timestamp"].ToString()); // //TickData tickdata = TickData.ConvertFromDataRow(dr); // TickData tickdata = new TickData(); // tickdata.Code = "rb"; // tickdata.SecInfo = GlobalValue.GetFutureByCode(tickdata.Code); // tickdata.Time = tickTime; // tickdata.Preclose = 0; // tickdata.Open = 0; // tickdata.High = 0; // tickdata.Low = 0; // tickdata.Ask = System.Convert.ToDouble(dr["open"]); // tickdata.Bid = System.Convert.ToDouble(dr["high"]); // tickdata.Last = System.Convert.ToDouble(dr["close"]); // tickdata.Volume = 0; // tickdata.Amt = 0; // tickdata.IsReal = false; // for (int j = 0; j < 10; j++) // { // tickdata.Asks[j] = tickdata.Ask; // tickdata.Bids[j] = tickdata.Bid; // } // da.DataArrival(tickdata); // if (interval != 0) // Thread.Sleep(interval); // } //} } TickData td = new TickData(); td.Code = string.Empty; try { da.DataArrival(td); } catch { } }