private static double GetProfitRating(MultiParameter parameter, int peroidNum) { if (parameter.IsGlobal) { return(parameter.GlobalRating); } return(peroidNum <= parameter.PrevPeroidNums ? parameter.PrevPeroidRating : parameter.RestPeroidRating); }
/// <summary> /// 获取倍投收益率。 /// </summary> /// <param name="parameter">倍投参数</param> /// <returns>倍投收益率集合</returns> public static List<ProfitRate> GetMultiProfitRates(MultiParameter parameter) { List<ProfitRate> profitRates = new List<ProfitRate>(parameter.PeroidNums); for (int i = 1; i <= parameter.PeroidNums; i++) { double profitRating = GetProfitRating(parameter, i); double lastTotalAmount = (i == 1) ? 0 : profitRates[i - 2].CurrentTotalAmount; int lastMultiNums = (i == 1) ? parameter.StartMultiNums : profitRates[i - 2].MultiNums; int currentMultiNums = GetMultiNums(parameter, lastMultiNums, lastTotalAmount, profitRating); if (currentMultiNums == -1) break; ProfitRate profitRate = new ProfitRate(i, parameter.Nums, currentMultiNums, parameter.Prize, lastTotalAmount); profitRates.Add(profitRate); } return profitRates; }
private void btnCompute_Click(object sender, EventArgs e) { MultiParameter parameter = new MultiParameter(); parameter.PeroidNums = ConvertHelper.GetInt32(this.txtPeroidNums.Text); parameter.Nums = ConvertHelper.GetInt32(this.txtNums.Text); parameter.StartMultiNums = ConvertHelper.GetInt32(this.txtStartMultiNums.Text); parameter.MaxMultiNums = ConvertHelper.GetInt32(this.txtMaxMultiNums.Text); parameter.Prize = ConvertHelper.GetDouble(this.txtPrize.Text); parameter.IsGlobal = this.rdGlobalRating.Checked; parameter.GlobalRating = ConvertHelper.GetDouble(this.txtGlobalRating.Text) / 100.0; parameter.PrevPeroidNums = ConvertHelper.GetInt32(this.txtPrevPeroidNums.Text); parameter.PrevPeroidRating = ConvertHelper.GetDouble(this.txtPrevRating.Text) / 100.0; parameter.RestPeroidRating = ConvertHelper.GetDouble(this.txtRestRating.Text) / 100.0; parameter.MinProfitAmount = this.chkMinProfit.Checked ? ConvertHelper.GetDouble(this.txtMinProfitAmount.Text) : 0.0; this.FillListView(ProfitOrLoss.GetMultiProfitRates(parameter)); }
private static int GetMultiNums(MultiParameter parameter, int lastMultiNums, double lastTotalAmount, double profitRating) { int multiNums = lastMultiNums; double totalAmount = lastTotalAmount + parameter.Nums * multiNums * 2; double totalProfit = parameter.Prize * multiNums - totalAmount; while (totalProfit / totalAmount < profitRating || totalProfit < parameter.MinProfitAmount) { if (multiNums > parameter.MaxMultiNums) { return(-1); } multiNums++; totalAmount = lastTotalAmount + parameter.Nums * multiNums * 2; totalProfit = parameter.Prize * multiNums - totalAmount; } return(multiNums); }
/// <summary> /// 获取倍投收益率。 /// </summary> /// <param name="parameter">倍投参数</param> /// <returns>倍投收益率集合</returns> public static List <ProfitRate> GetMultiProfitRates(MultiParameter parameter) { List <ProfitRate> profitRates = new List <ProfitRate>(parameter.PeroidNums); for (int i = 1; i <= parameter.PeroidNums; i++) { double profitRating = GetProfitRating(parameter, i); double lastTotalAmount = (i == 1) ? 0 : profitRates[i - 2].CurrentTotalAmount; int lastMultiNums = (i == 1) ? parameter.StartMultiNums : profitRates[i - 2].MultiNums; int currentMultiNums = GetMultiNums(parameter, lastMultiNums, lastTotalAmount, profitRating); if (currentMultiNums == -1) { break; } ProfitRate profitRate = new ProfitRate(i, parameter.Nums, currentMultiNums, parameter.Prize, lastTotalAmount); profitRates.Add(profitRate); } return(profitRates); }
private static double GetProfitRating(MultiParameter parameter, int peroidNum) { if (parameter.IsGlobal) return parameter.GlobalRating; return peroidNum <= parameter.PrevPeroidNums ? parameter.PrevPeroidRating : parameter.RestPeroidRating; }
private static int GetMultiNums(MultiParameter parameter, int lastMultiNums, double lastTotalAmount, double profitRating) { int multiNums = lastMultiNums; double totalAmount = lastTotalAmount + parameter.Nums * multiNums * 2; double totalProfit = parameter.Prize * multiNums - totalAmount; while (totalProfit / totalAmount < profitRating || totalProfit < parameter.MinProfitAmount) { if (multiNums > parameter.MaxMultiNums) return -1; multiNums++; totalAmount = lastTotalAmount + parameter.Nums * multiNums * 2; totalProfit = parameter.Prize * multiNums - totalAmount; } return multiNums; }