예제 #1
0
파일: WekaEA2.cs 프로젝트: vseledkin/MLEA
        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);
                }
            }
        }
예제 #2
0
파일: DbUtils.cs 프로젝트: wushian/MLEA
        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));
            //    }));
        }
예제 #3
0
파일: DbUtils.cs 프로젝트: wushian/MLEA
        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)
            {
            }
        }
예제 #4
0
파일: DbUtils.cs 프로젝트: wushian/MLEA
        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();
        }
예제 #5
0
파일: WekaEA2.cs 프로젝트: wushian/MLEA
        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);
                }
            }
        }
예제 #6
0
파일: TestTool.cs 프로젝트: wushian/MLEA
        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");
            }
        }