Exemplo n.º 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;

            if (current_generaiton < elite_crossover_start_gen)
            {
                for (int i = 0; i < eva.Count; i++)
                {
                    if (i != best_chrom_ind[best_chrom_ind.Count - 1])
                    {
                        sum += eva[i];
                        board.Add(sum);
                    }
                }
            }
            else
            {
                for (int i = 0; i < eva.Count; i++)
                {
                    sum += eva[i];
                    board.Add(sum);
                }
            }
            //roulette select
            if (current_generaiton < elite_crossover_start_gen)
            {
                for (int i = 0; i < eva.Count; i++)
                {
                    if (i != best_chrom_ind[best_chrom_ind.Count - 1])
                    {
                        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);
                        }
                    }
                    else
                    {
                        selected_chrom.Add(best_chrom_ind[best_chrom_ind.Count - 1]);
                    }
                }
            }
            else
            {
                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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static DecisionData2 contrarianSashine(Account2 ac, int i, Chrome2 chro, DecisionData2 pre_dd, bool no_trade_non_fired_box)
        {
            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;
                    }
                }
            }

            //prohibit trade using non fired box in GA period
            if (no_trade_non_fired_box)
            {
                for (int j = 0; j < chro.box_fired_num.Length; j++)
                {
                    entry_signs[j] = (chro.box_fired_num[j] < 3) ? 0 : entry_signs[j];
                }
            }

            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);
        }
Exemplo n.º 3
0
        public double getRikakuPercentageGene()
        {
            var r = RandomProvider.getRandom();

            return(Convert.ToDouble(r.Next(5, 151)) / 10000.0);
        }
Exemplo n.º 4
0
        public double getEntryKairiGene()
        {
            var r = RandomProvider.getRandom();

            return(Convert.ToDouble(r.Next(5, 151)) / 10000.0);
        }
Exemplo n.º 5
0
        public int getKairiTermGene()
        {
            var r = RandomProvider.getRandom();

            return(r.Next(3, 601));
        }
Exemplo n.º 6
0
        public int getExitTimeSecGene()
        {
            var r = RandomProvider.getRandom();

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