private void InitSimulationStrategys() { var simulationData = SimulationData.Instance.Init(m_symbol); m_simuStrategy = new ISimulateStrategy[TestParameters2.CandidateParameter.BatchTps.Length, TestParameters2.CandidateParameter.BatchSls.Length]; for (int i = 0; i < TestParameters2.CandidateParameter.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters2.CandidateParameter.BatchSls.Length; ++j) { int tp = TestParameters2.CandidateParameter.BatchTps[i]; int sl = TestParameters2.CandidateParameter.BatchSls[j]; m_simuStrategy[i, j] = new TpSlM1SimulateStrategy(m_symbol, tp * 10, sl * 10, simulationData); } } }
public static void UpdateHp(string symbol, char dealType, int tp, int sl, string where, System.Data.DataTable dt = null, bool deleteFirst = false) { if (dt == null) { dt = GetUpdateHpMainTable(symbol, where); } System.Console.WriteLine(string.Format("UpdateHp of {0}_{1}_{2}_{3}", symbol, dealType, tp, sl)); if (deleteFirst) { string sql = string.Format("DELETE FROM {0}_HP WHERE DealType = '{1}' AND Tp = {2} AND Sl = {3} AND {4}", symbol, dealType, tp, sl, string.IsNullOrEmpty(where) ? "1=1" : where); DbHelper.Instance.ExecuteNonQuery(sql); } ISimulateStrategy strategy;// = new TpSlSimulateStrategy(0.0070, 0.0035); var simulationData = SimulationData.Instance.Init(symbol); strategy = new TpSlM1SimulateStrategy(symbol, tp * 0.0001, sl * 0.0001, simulationData); //strategy = new BreakEvenM1SimulateStrategy(0.0080, 0.0030, 0.0030); //strategy = new PriceProbSimulationStrategy(60, 0.0600); System.Data.DataTable dt2 = new System.Data.DataTable(); dt2.Columns.Add(new System.Data.DataColumn("Time", typeof(long))); dt2.Columns.Add(new System.Data.DataColumn("DealType", typeof(string))); dt2.Columns.Add(new System.Data.DataColumn("Tp", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("Sl", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("hp", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("hp_date", typeof(DateTime))); foreach (System.Data.DataRow row in dt.Rows) { DateTime date = (DateTime)row["Date"]; DateTime? closeDate; bool? hp; if (dealType == 'B') hp = strategy.DoBuy(date, (double)row["Close"], out closeDate); else if (dealType == 'S') hp = strategy.DoSell(date, (double)row["Close"], out closeDate); else throw new ArgumentException("Invalid dealtype of " + dealType); System.Data.DataRow row2 = dt2.NewRow(); row2["Time"] = row["Time"]; row2["DealType"] = dealType; row2["Tp"] = tp; row2["Sl"] = sl; row2["hp"] = hp == null ? (object)System.DBNull.Value : hp; row2["hp_date"] = closeDate == null ? (object)System.DBNull.Value : closeDate; dt2.Rows.Add(row2); } DbHelper.Instance.BulkCopy(dt2, string.Format("{0}_HP", symbol)); //System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback((o) => // { // System.Console.WriteLine(string.Format("UpdateWriteHp Start of {0}_{1}_{2}_{3}", symbol, dealType, tp, sl)); // DbHelper.Instance.BulkCopy(dt2, string.Format("{0}_HP", symbol)); // System.Console.WriteLine(string.Format("UpdateWriteHp End of {0}_{1}_{2}_{3}", symbol, dealType, tp, sl)); // })); }
public static void UpdateAllHp3(string symbol, string where = null, bool updateUnComplete = false) { //where = " TIME % 1800 = 0 AND Time >= " + WekaUtils.GetTimeFromDate(new DateTime(2001, 4, 10, 0, 0, 0)) + // " AND TIME < " + WekaUtils.GetTimeFromDate(new DateTime(2001, 4, 11)); try { DbHelper.Instance.ExecuteNonQuery(string.Format("SELECT * FROM {0}_HP WHERE TIME = -1", symbol)); } catch (Exception) { string sql = @"CREATE TABLE [dbo].[{0}_HP]( [Time] [bigint] NOT NULL, [hp] [varbinary](max) NOT NULL, [hp_date] [varbinary](max) NOT NULL, [IsComplete] [bit] NOT NULL, CONSTRAINT [PK_{0}_HP] PRIMARY KEY CLUSTERED ( [Time] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) )"; DbHelper.Instance.ExecuteNonQuery(string.Format(sql, symbol)); } bool deleteFirst = false; if (deleteFirst) { string sql = string.Format("DELETE FROM {0}_HP WHERE {1}", symbol, string.IsNullOrEmpty(where) ? "1=1" : where); WekaUtils.Instance.WriteLog(sql); DbHelper.Instance.ExecuteNonQuery(sql); } System.Data.DataTable dt2 = new System.Data.DataTable(); dt2.Columns.Add(new System.Data.DataColumn("Time", typeof(long))); dt2.Columns.Add(new System.Data.DataColumn("hp", typeof(byte[]))); dt2.Columns.Add(new System.Data.DataColumn("hp_date", typeof(byte[]))); dt2.Columns.Add(new System.Data.DataColumn("IsComplete", typeof(bool))); bool useAlreadHps = true; System.Data.DataTable dt = GetUpdateHpMainTable(symbol, where, TestParameters2.CandidateParameter.MainPeriod, useAlreadHps); //Dictionary<long, int> alreadyHps = new Dictionary<long, int>(); // //if (useAlreadHps) //{ // System.Data.DataTable dtHp = DbHelper.Instance.ExecuteDataTable(string.Format("SELECT Time FROM {0}_HP WHERE IsComplete = 1", symbol)); // foreach (System.Data.DataRow row in dtHp.Rows) // { // long time = (long)row[0]; // alreadyHps[time] = 1; // } //} var simulationData = SimulationData.Instance.Init(symbol); ISimulateStrategy[,] strategys = new ISimulateStrategy[TestParameters.CandidateParameter4Db.BatchTps.Length, TestParameters.CandidateParameter4Db.BatchSls.Length]; for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { int tp = TestParameters.CandidateParameter4Db.BatchTps[i]; int sl = TestParameters.CandidateParameter4Db.BatchSls[j]; strategys[i, j] = new TpSlM1SimulateStrategy(symbol, tp * 10, sl * 10, simulationData); } } try { if (TestParameters.EnableMultiThread) { Parallel.ForEach<System.Data.DataRow>(dt.Rows.Cast<System.Data.DataRow>(), row => { UpdateHpRow(row, symbol, strategys, dt2, updateUnComplete); } ); } else { foreach (System.Data.DataRow row in dt.Rows) { UpdateHpRow(row, symbol, strategys, dt2, updateUnComplete); } } DbHelper.Instance.BulkCopy(dt2, string.Format("{0}_HP", symbol)); dt2.Rows.Clear(); } catch (ArgumentOutOfRangeException) { } }
public static void UpdateAllHp2(string symbol, string where = null) { bool deleteFirst = true; if (deleteFirst) { foreach (char dealType in Parameters.AllDealTypes) { for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { string sql = string.Format("DELETE FROM {0}_HP WHERE {1} AND DealType = '{2}' AND Tp = '{3}' AND Sl = '{4}'", symbol, string.IsNullOrEmpty(where) ? "1=1" : where, dealType, TestParameters.CandidateParameter4Db.BatchTps[i], TestParameters.CandidateParameter4Db.BatchSls[j]); WekaUtils.Instance.WriteLog(sql); DbHelper.Instance.ExecuteNonQuery(sql); } } } } System.Data.DataTable dt2 = new System.Data.DataTable(); dt2.Columns.Add(new System.Data.DataColumn("Time", typeof(long))); dt2.Columns.Add(new System.Data.DataColumn("DealType", typeof(string))); dt2.Columns.Add(new System.Data.DataColumn("Tp", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("Sl", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("hp", typeof(int))); dt2.Columns.Add(new System.Data.DataColumn("hp_date", typeof(DateTime))); System.Data.DataTable dt = GetUpdateHpMainTable(symbol, where); var simulationData = SimulationData.Instance.Init(symbol); ISimulateStrategy[,] strategys = new ISimulateStrategy[TestParameters.CandidateParameter4Db.BatchTps.Length, TestParameters.CandidateParameter4Db.BatchSls.Length]; for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { int tp = TestParameters.CandidateParameter4Db.BatchTps[i]; int sl = TestParameters.CandidateParameter4Db.BatchSls[j]; strategys[i, j] = new TpSlM1SimulateStrategy(symbol, tp * 0.0001, sl * 0.0001, simulationData); } } foreach (System.Data.DataRow row in dt.Rows) { DateTime date = (DateTime)row["Date"]; System.Console.WriteLine(string.Format("Now updatehp of {0}", date.ToString(Parameters.DateTimeFormat))); foreach (char dealType in Parameters.AllDealTypes) { int?[,] hps = new int?[TestParameters.CandidateParameter4Db.BatchTps.Length, TestParameters.CandidateParameter4Db.BatchSls.Length]; DateTime?[,] hpDates = new DateTime?[TestParameters.CandidateParameter4Db.BatchTps.Length, TestParameters.CandidateParameter4Db.BatchSls.Length]; for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { hps[i, j] = -1; } } for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { if (hps[i, j] != -1) continue; ISimulateStrategy strategy = strategys[i, j]; DateTime? closeDate; bool? hp; if (dealType == 'B') hp = strategy.DoBuy(date, (double)row["Close"], out closeDate); else if (dealType == 'S') hp = strategy.DoSell(date, (double)row["Close"], out closeDate); else throw new ArgumentException("Invalid dealtype of " + dealType); if (hp.HasValue) { if (hp.Value) { // tp for (int jj = j; jj < TestParameters.CandidateParameter4Db.BatchSls.Length; ++jj) { hps[i, jj] = 1; hpDates[i, jj] = closeDate.Value; } } else { for (int ii = i; ii < TestParameters.CandidateParameter4Db.BatchTps.Length; ++ii) { hps[ii, j] = 0; hpDates[ii, j] = closeDate.Value; } } } else { for (int ii = i; ii < TestParameters.CandidateParameter4Db.BatchTps.Length; ++ii) for (int jj = j; jj < TestParameters.CandidateParameter4Db.BatchSls.Length; ++jj) { hps[ii, jj] = null; hpDates[ii, jj] = null; } } } } for (int i = 0; i < TestParameters.CandidateParameter4Db.BatchTps.Length; ++i) { for (int j = 0; j < TestParameters.CandidateParameter4Db.BatchSls.Length; ++j) { System.Data.DataRow row2 = dt2.NewRow(); row2["Time"] = row["Time"]; row2["DealType"] = dealType; row2["Tp"] = TestParameters.CandidateParameter4Db.BatchTps[i]; row2["Sl"] = TestParameters.CandidateParameter4Db.BatchSls[j]; row2["hp"] = hps[i, j] == null ? (object)System.DBNull.Value : hps[i, j].Value; row2["hp_date"] = hpDates[i, j] == null ? (object)System.DBNull.Value : hpDates[i, j].Value; dt2.Rows.Add(row2); } } } if (dt2.Rows.Count > 50000) { DbHelper.Instance.BulkCopy(dt2, string.Format("{0}_HP", symbol)); dt2.Rows.Clear(); } } DbHelper.Instance.BulkCopy(dt2, string.Format("{0}_HP", symbol)); dt2.Rows.Clear(); }
public static void CheckHpData2() { string symbol = "EURUSD"; var simulationData = SimulationData.Instance.Init(symbol); int tp = 20; int sl = 20; var x = new TpSlM1SimulateStrategy(symbol, tp * 10, sl * 10, simulationData); var y = new DbSimulationStrategy(symbol, tp * 10, sl * 10); DateTime openDate = WekaUtils.GetDateFromTime(946859400); int ntp = 0, nfp = 0; for (int i = 0; i < 48; ++i) { var d = openDate.AddMinutes(30 * i); DateTime? closeDate; var hp = x.DoBuy(d, -1, out closeDate); if (hp.Value) ntp++; else nfp++; DateTime? closeDate2; var hp2 = y.DoBuy(d, -1, out closeDate2); WekaUtils.DebugAssert(hp == hp2, "hp == hp2"); WekaUtils.DebugAssert(closeDate == closeDate2, "closeDate == closeDate2"); } ntp = 0; nfp = 0; for (int i = 0; i < 48; ++i) { var d = new DateTime(2006, 6, 19).AddMinutes(30 * i); DateTime? closeDate; var hp = x.DoSell(d, -1, out closeDate); if (hp.Value) ntp++; else nfp++; DateTime? closeDate2; var hp2 = y.DoSell(d, -1, out closeDate2); WekaUtils.DebugAssert(hp == hp2, "hp == hp2"); WekaUtils.DebugAssert(closeDate == closeDate2, "closeDate == closeDate2"); } }