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); } } } }
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); }
public double getRikakuPercentageGene() { var r = RandomProvider.getRandom(); return(Convert.ToDouble(r.Next(5, 151)) / 10000.0); }
public double getEntryKairiGene() { var r = RandomProvider.getRandom(); return(Convert.ToDouble(r.Next(5, 151)) / 10000.0); }
public int getKairiTermGene() { var r = RandomProvider.getRandom(); return(r.Next(3, 601)); }
public int getExitTimeSecGene() { var r = RandomProvider.getRandom(); return(r.Next(3, 601)); }