最大回撤的计算

最近有家券商的考官问我最大回撤怎么算。

搜了一下,网上答案有很多。这里贴上我自己写的代码吧。Java实现。

/**
 * 计算最大回撤
 * 
 * @author qcy
 * 
 */
class FundTools {

	/**
	 * 由净值序列x,直接计算最大回撤
	 * 
	 * @param x
	 *            累计份额净值序列
	 * @return 最大回撤
	 */
	public double calc_max_dd(double[] x) {
		double max_unit_value = x[0];
		double max_dd = 0;
		double dd = 0;

		for (int i = 1; i < x.length; i++) {
			max_unit_value = Math.max(x[i], max_unit_value);
			dd = x[i] / max_unit_value - 1;
			max_dd = Math.min(dd, max_dd);
		}

		return max_dd;
	}

	/**
	 * 根据每日收盘后份额净值和截止前一日的最大回撤、最高水位,计算今日的最大回撤
	 * 
	 * @param max_dd
	 *            截止到i-1日的最大回撤
	 * @param max_unit_value
	 *            截止到i-1日的最高累计份额净值
	 * @param today_unit_value
	 *            i日的累计份额净值
	 * @return 第i日的最大回撤
	 */
	public double calc_max_dd(double max_dd, double max_unit_value,
			double today_unit_value) {
		max_unit_value = Math.max(max_unit_value, today_unit_value);
		double dd = today_unit_value / max_unit_value - 1;
		return Math.min(dd, max_dd);
	}

}

猜你喜欢

转载自blog.csdn.net/qcyfred/article/details/79696638