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]; }
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; } } } }
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; }
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); } }
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; } } } }
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]; } } } } }
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); } }
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]; } } } } }
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"); } }
public double getFloorVolaGene() { var r = RandomProvider.getRandom(); return(r.Next((int)Math.Truncate(floor_vola), (int)Math.Truncate(ceil_vola * 0.8))); }
public bool getKirikaeGene() { var r = RandomProvider.getRandom(); return((r.NextDouble() > 0.5) ? true: false); }
public double getRikakuPercentageGene() { var r = RandomProvider.getRandom(); return(Convert.ToDouble(r.Next(1, 501)) / 10000.0); }
public double getEntryKairiGene() { var r = RandomProvider.getRandom(); return(Convert.ToDouble(r.Next(1, 601)) / 10000.0); }
public int getExitTimeSecGene() { var r = RandomProvider.getRandom(); return(r.Next(3, 601)); }
public double getCeilAvevolGene(double floor) { var r = RandomProvider.getRandom(); return(r.Next((int)Math.Truncate(floor) + 500, (int)Math.Truncate(ceil_avevol))); }
public double getFloorAvevolGene() { var r = RandomProvider.getRandom(); return(r.Next((int)Math.Truncate(floor_avevol), (int)Math.Truncate(ceil_avevol * 0.8))); }
public double getCeilVolaGene(double floor) { var r = RandomProvider.getRandom(); return(r.Next((int)Math.Truncate(floor) + 10, (int)Math.Truncate(ceil_vola))); }
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); }
public int getKairiTermGene() { var r = RandomProvider.getRandom(); return(r.Next(3, 601)); }