最近有家券商的考官问我最大回撤怎么算。
搜了一下,网上答案有很多。这里贴上我自己写的代码吧。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); } }