Esempio n. 1
0
        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 { }
        }