コード例 #1
0
ファイル: Program.cs プロジェクト: alunfes/BTCSIM-csharp
        public static void Main(string[] args)
        {
            Console.WriteLine("# of CPU cores=" + System.Environment.ProcessorCount.ToString());

            var key = "";

            while (true)
            {
                Console.WriteLine("\"ga\" : island GA");
                Console.WriteLine("\"sim\" : read sim");
                Console.WriteLine("\"mul ga\" : multi strategy ga");
                Console.WriteLine("\"mul sim\" : multi strategy sim");
                Console.WriteLine("\"conti\" : do ga / sim continuously");
                Console.WriteLine("\"win ga\" : do win ga");
                Console.WriteLine("\"write\" : write MarketData");
                Console.WriteLine("\"test\" : test");
                key = Console.ReadLine();
                if (key == "ga" || key == "sim" || key == "mul ga" || key == "mul sim" || key == "win ga" || key == "conti" || key == "win ga" || key == "write" || key == "test")
                {
                    break;
                }
            }

            if (key == "test")
            {
                RandomSeed.initialize();
                for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine(RandomSeed.rnd.Next());
                }
                Environment.Exit(0);
            }


            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            Console.WriteLine("started program.");
            List <int> terms = new List <int>();

            for (int i = 10; i < 1000; i = i + 100)
            {
                terms.Add(i);
            }
            MarketData.initializer(terms);

            var    from           = 1000;
            var    to             = 501000;//MarketData.Close.Count-1;
            int    max_amount     = 1;
            var    index          = new int[] { 0, 0, 0, 1, 1, 0, 0 };
            double nn_threshold   = 0.3;
            int    best_island_id = 4;
            bool   display_chart  = true;
            var    sim_type       = 1; //0:limit, 1:market/limit

            //read weight sim
            if (key == "sim")
            {
                var ac = doSim(from, to, max_amount, sim_type, best_island_id, display_chart, nn_threshold);
            }
            //island ga
            else if (key == "ga")
            {
                int num_island         = 2;
                int num_chromos        = 4;
                int num_generations    = 20;
                int banned_move_period = 2;
                var units         = new int[] { 67, 5, 5, 5, 5 };
                var mutation_rate = 0.5;
                var move_ratio    = 0.2;
                best_island_id = doGA(from, to, max_amount, num_island, num_chromos, num_generations, banned_move_period, units, mutation_rate, move_ratio, index, display_chart, nn_threshold);
                doSim(from, to, max_amount, sim_type, best_island_id, display_chart, nn_threshold);
                doSim(to, MarketData.Close.Count - 1, max_amount, sim_type, best_island_id, display_chart, nn_threshold);
            }
            //multi strategy combination sim
            else if (key == "mul ga")
            {
                var index_list = new List <int[]> {
                    new int[] { 0, 0, 0, 1, 1, 0, 0 }, new int[] { 0, 0, 0, 0, 1, 1, 1 }
                };
                var units_list = new List <int[]> {
                    new int[] { 77, 5, 5, 5, 5 }, new int[] { 77, 5, 5, 5, 5 }
                };
                var best_pl_list       = new List <List <double> >();
                var best_ac_list       = new List <SimAccount>();
                int num_island         = 2;
                int num_chromos        = 4;
                int num_generations    = 3;
                int banned_move_period = 2;
                var mutation_rate      = 0.5;
                var move_ratio         = 0.2;
                var id_list            = new List <int>();
                var nn_threshold_list  = new List <double>();
                for (int i = 0; i < index_list.Count; i++)
                {
                    best_island_id = doGA(from, to, max_amount, num_island, num_chromos, num_generations, banned_move_period, units_list[i], mutation_rate, move_ratio, index_list[i], display_chart, nn_threshold);
                    var ac = doSim(from, to, max_amount, sim_type, best_island_id, display_chart, nn_threshold);
                    best_pl_list.Add(ac.total_pl_ratio_list);
                    best_ac_list.Add(ac);
                    if (File.Exists(@"./log_best_weight_ID-" + i.ToString() + ".csv"))
                    {
                        File.Delete(@"./log_best_weight_ID-" + i.ToString() + ".csv");
                    }
                    File.Copy(@"./best_weight_ID-" + best_island_id.ToString() + ".csv", @"./log_best_weight_ID-" + i.ToString() + ".csv");
                    id_list.Add(i);
                    nn_threshold_list.Add(nn_threshold);
                }
                doMultiSim(from, to, max_amount, id_list, true, nn_threshold_list);
                doMultiSim(to, MarketData.Close.Count - 1, max_amount, id_list, true, nn_threshold_list);
            }
            else if (key == "mul sim")
            {
                var num_best_chromo   = 4;
                var id_list           = new List <int>();
                var nn_threshold_list = new List <double>();
                for (int i = 0; i < num_best_chromo; i++)
                {
                    id_list.Add(i);
                    nn_threshold_list.Add(nn_threshold);
                }
                doMultiSim(from, to, max_amount, id_list, true, nn_threshold_list);
            }
            else if (key == "win ga")
            {
                int num_island         = 2;
                int num_chromos        = 4;
                int num_generations    = 20;
                int banned_move_period = 2;
                int num_random_windows = 10;
                index = new int[] { 0, 0, 0, 1, 0, 0, 0 };
                var units         = new int[] { 10, 30, 5, 3 };
                var mutation_rate = 0.5;
                var move_ratio    = 0.2;

                best_island_id = doWinGA(from, to, num_random_windows, num_island, num_chromos, num_generations, banned_move_period, units, mutation_rate, move_ratio, index, display_chart, nn_threshold);
                doWinSim(from, to, best_island_id, true, nn_threshold);
                doWinSim(to, MarketData.Close.Count - 1, best_island_id, true, nn_threshold);
            }
            else if (key == "conti")
            {
                int num_island         = 2;
                int num_chromos        = 4;
                int num_generations    = 20;
                int banned_move_period = 2;
                var units         = new int[] { 67, 5, 5, 5, 5 };
                var mutation_rate = 0.5;
                var move_ratio    = 0.2;
                var sim_period    = 5000;
                var ga_period     = 10000;
                var conti_from    = from;
                var ac_list       = new List <SimAccount>();
                var all_pl_list   = new List <double>();
                all_pl_list.Add(0);
                var all_num_trade = 0;

                while (to > sim_period + ga_period + conti_from)
                {
                    best_island_id = doGA(conti_from, conti_from + ga_period, max_amount, num_island, num_chromos, num_generations, banned_move_period, units, mutation_rate, move_ratio, index, display_chart, nn_threshold);
                    ac_list.Add(doSim(conti_from + ga_period, conti_from + ga_period + sim_period, max_amount, sim_type, best_island_id, true, nn_threshold));
                    foreach (var p in ac_list.Last().total_pl_list)
                    {
                        all_pl_list.Add(all_pl_list.Last() + p);
                    }
                    all_num_trade += ac_list.Last().performance_data.num_trade;
                    conti_from    += sim_period;
                }
                Console.WriteLine("Total pl =" + all_pl_list.Last().ToString() + ", num trade=" + all_num_trade.ToString());
                LineChart.DisplayLineChart(all_pl_list, "from=" + (from + ga_period).ToString() + ", to=" + (conti_from + ga_period + sim_period).ToString() + ", Total pl =" + all_pl_list.Last().ToString() + ", num trade=" + all_num_trade.ToString());
            }
            else if (key == "write")
            {
                MarketData.writeData();
            }

            stopWatch.Stop();
            Console.WriteLine("Completed all processes.");
            Console.WriteLine("Time Elapsed (sec)=" + stopWatch.Elapsed.TotalSeconds.ToString());
        }