示例#1
0
        public void roulettteSelectionNonElite(int current_generaiton, int elite_crossover_start_gen)
        {
            selected_chrom = new List <int>();
            var           ran   = RandomProvider.getRandom();
            List <double> board = new List <double>();
            double        sum   = 0;

            double[] eva_copy = eva.ToArray();
            eva_copy[best_chrom_ind[best_chrom_ind.Count - 1]] = 0;

            for (int i = 0; i < eva_copy.Length; i++)
            {
                sum += eva_copy[i];
                board.Add(sum);
            }

            //roulette select
            for (int i = 0; i < eva_copy.Length; i++)
            {
                double roulette_v = ran.Next(0, Convert.ToInt32(Math.Truncate(sum) + 1));
                for (int j = 1; j < board.Count; j++)
                {
                    if (board[j - 1] < roulette_v && board[j] >= roulette_v)
                    {
                        selected_chrom.Add(j);
                        break;
                    }
                }
                if (0 <= roulette_v && board[0] >= roulette_v)
                {
                    selected_chrom.Add(0);
                }
            }
            selected_chrom[best_chrom_ind[best_chrom_ind.Count - 1]] = best_chrom_ind[best_chrom_ind.Count - 1];
        }
示例#2
0
        private void immigration(double immigration_rate, int num_island, int num_chrome)
        {
            var r = RandomProvider.getRandom();

            for (int i = 0; i < num_island; i++)
            {
                for (int j = 0; j < num_chrome; j++)
                {
                    if (r.Next() < immigration_rate)
                    {
                        int selected_island = r.Next(0, num_island);
                        int selected_chro   = -1;
                        do
                        {
                            selected_chro = r.Next(0, num_chrome);
                        }while (selected_chro != islands[selected_island].best_chrom_ind[islands[selected_island].best_chrom_ind.Count - 1]);

                        islands[selected_island].chromes[selected_chro].Gene_exit_time_sec     = (r.Next() > 0.5) ? islands[i].chromes[j].Gene_exit_time_sec : islands[selected_island].chromes[selected_chro].Gene_exit_time_sec;
                        islands[selected_island].chromes[selected_chro].Gene_kairi_term        = (r.Next() > 0.5) ? islands[i].chromes[j].Gene_kairi_term : islands[selected_island].chromes[selected_chro].Gene_kairi_term;
                        islands[selected_island].chromes[selected_chro].Gene_entry_kairi       = (r.Next() > 0.5) ? islands[i].chromes[j].Gene_entry_kairi : islands[selected_island].chromes[selected_chro].Gene_entry_kairi;
                        islands[selected_island].chromes[selected_chro].Gene_rikaku_percentage = (r.Next() > 0.5) ? islands[i].chromes[j].Gene_rikaku_percentage : islands[selected_island].chromes[selected_chro].Gene_rikaku_percentage;
                    }
                }
            }
        }
示例#3
0
        public void generateInitialChrome()
        {
            var r = RandomProvider.getRandom();

            Gene_exit_time_sec     = r.Next(3, 601);
            Gene_kairi_term        = r.Next(3, 601);
            Gene_entry_kairi       = Convert.ToDouble(r.Next(5, 151)) / 10000.0;
            Gene_rikaku_percentage = Convert.ToDouble(r.Next(5, 151)) / 10000.0;
        }
示例#4
0
        public void crossOver()
        {
            new_gene_chromes = new List <Chrome>();

            var ran = RandomProvider.getRandom();

            for (int i = 0; i < chromes.Count; i++)
            {
                var c = new Chrome();
                c.Gene_exit_time_sec     = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].Gene_exit_time_sec : chromes[i].Gene_exit_time_sec;
                c.Gene_kairi_term        = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].Gene_kairi_term : chromes[i].Gene_kairi_term;
                c.Gene_entry_kairi       = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].Gene_entry_kairi : chromes[i].Gene_entry_kairi;
                c.Gene_rikaku_percentage = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].Gene_rikaku_percentage : chromes[i].Gene_rikaku_percentage;
                new_gene_chromes.Add(c);
            }
        }
示例#5
0
文件: GA.cs 项目: alunfes/BTCTickSim
        public void mutation()
        {
            var    ran = RandomProvider.getRandom();
            Chrome c   = new Chrome();

            for (int i = 0; i < new_gene_chromes.Count; i++)
            {
                if (i != best_chrom_ind[best_chrom_ind.Count - 1])
                {
                    if (ran.NextDouble() > 0.1)
                    {
                        new_gene_chromes[i].Gene_exit_time_sec     = (ran.NextDouble() > 0.1) ? c.getExitTimeSecGene() : new_gene_chromes[i].Gene_exit_time_sec;
                        new_gene_chromes[i].Gene_kairi_term        = (ran.NextDouble() > 0.1) ? c.getKairiTermGene() : new_gene_chromes[i].Gene_kairi_term;
                        new_gene_chromes[i].Gene_entry_kairi       = (ran.NextDouble() > 0.1) ? c.getEntryKairiGene() : new_gene_chromes[i].Gene_entry_kairi;
                        new_gene_chromes[i].Gene_rikaku_percentage = (ran.NextDouble() > 0.1) ? c.getRikakuPercentageGene() : new_gene_chromes[i].Gene_rikaku_percentage;
                    }
                }
            }
        }
示例#6
0
        public void mutation()
        {
            var ran = RandomProvider.getRandom();
            var c   = new Chrome2(from, to, num_box);

            for (int i = 0; i < new_gene_chromes.Count; i++)
            {
                if (i != best_chrom_ind[best_chrom_ind.Count - 1])
                {
                    if (ran.NextDouble() > 0.1)
                    {
                        for (int j = 0; j < new_gene_chromes[i].num_box; j++)
                        {
                            if (ran.NextDouble() > 0.1)
                            {
                                new_gene_chromes[i].gene_floor_vola[j] = c.getFloorVolaGene();
                                new_gene_chromes[i].gene_ceil_vola[j]  = c.getCeilVolaGene(new_gene_chromes[i].gene_floor_vola[j]);
                            }
                            else
                            {
                                new_gene_chromes[i].gene_floor_vola[j] = new_gene_chromes[i].gene_floor_vola[j];
                                new_gene_chromes[i].gene_ceil_vola[j]  = new_gene_chromes[i].gene_ceil_vola[j];
                            }
                            if (ran.NextDouble() > 0.1)
                            {
                                new_gene_chromes[i].gene_floor_avevol[j] = c.getFloorAvevolGene();
                                new_gene_chromes[i].gene_ceil_avevol[j]  = c.getCeilAvevolGene(new_gene_chromes[i].gene_floor_avevol[j]);
                            }
                            else
                            {
                                new_gene_chromes[i].gene_floor_avevol[j] = new_gene_chromes[i].gene_floor_avevol[j];
                                new_gene_chromes[i].gene_ceil_avevol[j]  = new_gene_chromes[i].gene_ceil_avevol[j];
                            }
                            new_gene_chromes[i].gene_exit_time_sec[j]     = (ran.NextDouble() > 0.1) ? c.getExitTimeSecGene() : new_gene_chromes[i].gene_exit_time_sec[j];
                            new_gene_chromes[i].gene_rikaku_percentage[j] = (ran.NextDouble() > 0.1) ? c.getRikakuPercentageGene() : new_gene_chromes[i].gene_rikaku_percentage[j];
                            new_gene_chromes[i].gene_kirikae[j]           = (ran.NextDouble() > 0.1) ? c.getKirikaeGene() : new_gene_chromes[i].gene_kirikae[j];
                            new_gene_chromes[i].gene_entry_kairi[j]       = (ran.NextDouble() > 0.1) ? c.getEntryKairiGene() : new_gene_chromes[i].gene_entry_kairi[j];
                        }
                    }
                }
            }
        }
示例#7
0
        public void crossOver()
        {
            new_gene_chromes = new List <Chrome2>();

            var ran = RandomProvider.getRandom();

            for (int i = 0; i < chromes.Count; i++)
            {
                var c = new Chrome2(from, to, num_box);
                c.box_fired_num = chromes[i].box_fired_num;
                for (int j = 0; j < c.num_box; j++)
                {
                    if ((ran.NextDouble() > 0.5))
                    {
                        c.gene_floor_vola[j] = chromes[selected_chrom[i]].gene_floor_vola[j];
                        c.gene_ceil_vola[j]  = chromes[selected_chrom[i]].gene_ceil_vola[j];
                    }
                    else
                    {
                        c.gene_floor_vola[j] = chromes[i].gene_floor_vola[j];
                        c.gene_ceil_vola[j]  = chromes[i].gene_ceil_vola[j];
                    }
                    if ((ran.NextDouble() > 0.5))
                    {
                        c.gene_floor_avevol[j] = chromes[selected_chrom[i]].gene_floor_avevol[j];
                        c.gene_ceil_avevol[j]  = chromes[selected_chrom[i]].gene_ceil_avevol[j];
                    }
                    else
                    {
                        c.gene_floor_avevol[j] = chromes[i].gene_floor_avevol[j];
                        c.gene_ceil_avevol[j]  = chromes[i].gene_ceil_avevol[j];
                    }
                    c.gene_exit_time_sec[j]     = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].gene_exit_time_sec[j] : chromes[i].gene_exit_time_sec[j];
                    c.gene_entry_kairi[j]       = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].gene_exit_time_sec[j] : chromes[i].gene_exit_time_sec[j];
                    c.gene_rikaku_percentage[j] = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].gene_rikaku_percentage[j] : chromes[i].gene_rikaku_percentage[j];
                    c.gene_kirikae[j]           = (ran.NextDouble() > 0.5) ? chromes[selected_chrom[i]].gene_kirikae[j] : chromes[i].gene_kirikae[j];
                }
                new_gene_chromes.Add(c);
            }
        }
示例#8
0
        private void immigration(double immigration_rate, int num_island, int num_chrome)
        {
            var r = RandomProvider.getRandom();

            for (int i = 0; i < num_island; i++)
            {
                for (int j = 0; j < num_chrome; j++)
                {
                    if (r.Next() < immigration_rate)
                    {
                        int selected_island = r.Next(0, num_island);
                        int selected_chro   = -1;
                        do
                        {
                            selected_chro = r.Next(0, num_chrome);
                        }while (selected_chro != islands[selected_island].best_chrom_ind[islands[selected_island].best_chrom_ind.Count - 1]);

                        for (int k = 0; k < islands[i].chromes[j].num_box; k++)
                        {
                            if (r.Next() > 0.5)
                            {
                                islands[selected_island].chromes[selected_chro].gene_floor_vola[k] = islands[i].chromes[j].gene_floor_vola[k];
                                islands[selected_island].chromes[selected_chro].gene_ceil_vola[k]  = islands[i].chromes[j].gene_ceil_vola[k];
                            }
                            if (r.Next() > 0.5)
                            {
                                islands[selected_island].chromes[selected_chro].gene_floor_avevol[k] = islands[i].chromes[j].gene_floor_avevol[k];
                                islands[selected_island].chromes[selected_chro].gene_ceil_avevol[k]  = islands[i].chromes[j].gene_ceil_avevol[k];
                            }
                            islands[selected_island].chromes[selected_chro].gene_exit_time_sec[k]     = (r.Next() > 0.5) ? islands[i].chromes[j].gene_exit_time_sec[k] : islands[selected_island].chromes[selected_chro].gene_exit_time_sec[k];
                            islands[selected_island].chromes[selected_chro].gene_entry_kairi[k]       = (r.Next() > 0.5) ? islands[i].chromes[j].gene_entry_kairi[k] : islands[selected_island].chromes[selected_chro].gene_entry_kairi[k];
                            islands[selected_island].chromes[selected_chro].gene_rikaku_percentage[k] = (r.Next() > 0.5) ? islands[i].chromes[j].gene_rikaku_percentage[k] : islands[selected_island].chromes[selected_chro].gene_rikaku_percentage[k];
                            islands[selected_island].chromes[selected_chro].gene_kirikae[k]           = (r.Next() > 0.5) ? islands[i].chromes[j].gene_kirikae[k] : islands[selected_island].chromes[selected_chro].gene_kirikae[k];
                        }
                    }
                }
            }
        }
示例#9
0
文件: GA.cs 项目: alunfes/BTCTickSim
        public void rouletteSelection()
        {
            selected_chrom = new List <int>();
            var ran = RandomProvider.getRandom();

            //make roulette board
            List <double> board = new List <double>();
            double        sum   = 0;

            for (int i = 0; i < eva.Count; i++)
            {
                sum += eva[i];
                board.Add(sum);
            }

            //roulette select
            for (int i = 0; i < eva.Count; i++)
            {
                double roulette_v = ran.Next(0, Convert.ToInt32(Math.Truncate(sum) + 1));
                for (int j = 1; j < board.Count; j++)
                {
                    if (board[j - 1] < roulette_v && board[j] >= roulette_v)
                    {
                        selected_chrom.Add(j);
                        break;
                    }
                }
                if (0 <= roulette_v && board[0] >= roulette_v)
                {
                    selected_chrom.Add(0);
                }
            }
            if (selected_chrom.Count != chromes.Count)
            {
                Debug.WriteLine("kita");
            }
        }
示例#10
0
        public double getFloorVolaGene()
        {
            var r = RandomProvider.getRandom();

            return(r.Next((int)Math.Truncate(floor_vola), (int)Math.Truncate(ceil_vola * 0.8)));
        }
示例#11
0
        public bool getKirikaeGene()
        {
            var r = RandomProvider.getRandom();

            return((r.NextDouble() > 0.5) ? true:  false);
        }
示例#12
0
        public double getRikakuPercentageGene()
        {
            var r = RandomProvider.getRandom();

            return(Convert.ToDouble(r.Next(1, 501)) / 10000.0);
        }
示例#13
0
        public double getEntryKairiGene()
        {
            var r = RandomProvider.getRandom();

            return(Convert.ToDouble(r.Next(1, 601)) / 10000.0);
        }
示例#14
0
        public int getExitTimeSecGene()
        {
            var r = RandomProvider.getRandom();

            return(r.Next(3, 601));
        }
示例#15
0
        public double getCeilAvevolGene(double floor)
        {
            var r = RandomProvider.getRandom();

            return(r.Next((int)Math.Truncate(floor) + 500, (int)Math.Truncate(ceil_avevol)));
        }
示例#16
0
        public double getFloorAvevolGene()
        {
            var r = RandomProvider.getRandom();

            return(r.Next((int)Math.Truncate(floor_avevol), (int)Math.Truncate(ceil_avevol * 0.8)));
        }
示例#17
0
        public double getCeilVolaGene(double floor)
        {
            var r = RandomProvider.getRandom();

            return(r.Next((int)Math.Truncate(floor) + 10, (int)Math.Truncate(ceil_vola)));
        }
示例#18
0
        public static DecisionData2 contrarianSashine(AccountGA2 ac, int i, Chrome2 chro, DecisionData2 pre_dd)
        {
            DecisionData2 dd = new DecisionData2();

            double kairi = (TickData.price[i] - TickData.makairi_500[i]) / TickData.makairi_500[i];

            var    entry_signs  = new int[chro.num_box]; //1:Long, -1:Short
            string entry_sign   = "";
            int    selected_box = -1;

            for (int j = 0; j < chro.num_box; j++)
            {
                if (chro.gene_ceil_vola[j] >= TickData.vola_500[i] && chro.gene_floor_vola[j] <= TickData.vola_500[i] &&
                    chro.gene_ceil_avevol[j] >= TickData.ave_vol_500[i] && chro.gene_floor_avevol[j] <= TickData.ave_vol_500[i])
                {
                    if (kairi >= chro.gene_entry_kairi[j])
                    {
                        entry_signs[j] = (chro.gene_kirikae[j]) ? -1 : 1;
                    }
                    else if (kairi <= chro.gene_entry_kairi[j])
                    {
                        entry_signs[j] = (chro.gene_kirikae[j]) ? 1 : -1;
                    }
                }
            }


            bool   flg = true;
            string s   = "";

            if (pre_dd.fired_box_ind >= 0)
            {
                if (entry_signs[pre_dd.fired_box_ind] == 1)
                {
                    s = "Long";
                }
                else if (entry_signs[pre_dd.fired_box_ind] == -1)
                {
                    s = "Short";
                }

                if (s == pre_dd.position)
                {
                    selected_box = pre_dd.fired_box_ind;
                    entry_sign   = s;
                    flg          = false;
                }
            }
            if (flg)
            {
                var r = RandomProvider.getRandom();
                if (entry_signs.Sum() > 0)
                {
                    entry_sign = "Long";
                    var selections = entry_signs.Select((p, ind) => new { Content = p, Index = ind })
                                     .Where(ano => ano.Content == 1)
                                     .Select(ano => ano.Index).ToList();
                    selected_box = selections[r.Next(0, selections.Count)];
                }
                else if (entry_signs.Sum() < 0)
                {
                    entry_sign = "Short";
                    var selections = entry_signs.Select((p, ind) => new { Content = p, Index = ind })
                                     .Where(ano => ano.Content == -1)
                                     .Select(ano => ano.Index).ToList();
                    selected_box = selections[r.Next(0, selections.Count)];
                }
                if (selected_box >= 0)
                {
                    entry_sign = (entry_signs[selected_box] == 1) ? "Long" : "Short";
                }
            }



            if (entry_sign != "")
            {
                if (ac.holding_position == "None" && ac.price_tracing_order_flg == false)
                {
                    dd = makeDDForEntryPriceTracingOrder(i, entry_sign, true, 0.05, selected_box);
                }
                else if (ac.holding_position != "None" && entry_sign != ac.holding_position && ac.price_tracing_order_flg && ac.cancel_all_orders == false)
                {
                    dd = makeDDForEntryPriceTracingOrder(i, "Cancel_PriceTracingOrder", false, 0, selected_box);
                }
                else if (ac.holding_position != "None" && entry_sign != ac.holding_position && ac.price_tracing_order_flg == false && ac.cancel_all_orders == false)
                {
                    dd = makeDDForEntryPriceTracingOrder(i, entry_sign, true, ac.ave_holding_lot + 0.05, selected_box);
                }
                else if (entry_sign == ac.holding_position && ac.unexe_position.Count == 0)
                {
                    dd.position            = (entry_sign == "Long") ? "Short" : "Long";
                    dd.cancel_index        = -1;
                    dd.price_tracing_order = false;
                    dd.price = (ac.holding_position == "Long") ? Math.Round(ac.ave_holding_price * (1 + chro.gene_rikaku_percentage[selected_box])) : Math.Round(ac.ave_holding_price * (1 - chro.gene_rikaku_percentage[selected_box]));
                    dd.lot   = ac.ave_holding_lot;
                }
                else if ((TickData.time[i] - ac.last_entry_time).TotalSeconds >= chro.gene_exit_time_sec[selected_box])
                {
                    dd = makeDDForEntryPriceTracingOrder(i, (ac.holding_position == "Long") ? "Short" : "Long", true, ac.ave_holding_lot, selected_box);
                }

                /*else if (entry_sign == ac.holding_position && ac.unexe_position.Count == 0 && (TickData.time[i] - ac.last_entry_time).TotalSeconds >= chro.gene_exit_time_sec[selected_box])
                 * {
                 *  dd = makeDDForEntryPriceTracingOrder(i, (ac.holding_position == "Long") ? "Short" : "Long", true, ac.ave_holding_lot, selected_box);
                 * }*/
            }
            else if (ac.holding_position != "None")
            {
                // dd.position = "Exit_All";
            }

            //if(dd.fired_box_ind!=-1) chro.box_fired_num[dd.fired_box_ind]++;   ->Count in SIM class

            return(dd);
        }
示例#19
0
        public int getKairiTermGene()
        {
            var r = RandomProvider.getRandom();

            return(r.Next(3, 601));
        }