1、测试数据源:长盛电子信息主题灵活配置混合(000063),2013-05-10~2016-04-15全部历史净值数据。数据净值曲线:
2016-4-17 18:26:30 上传
下载附件 (16.76 KB)2、写了三种方式做比较,Level1是参考了一些资料做的模版;Level2在前者基础上做了循环点的修改,将净值中所有下降沿的顶点和终点成对筛选出来,存为一个集合。经运行测试,Level1和Level2两者消耗时间相当;Level3将净值中所有下降沿的顶点值和终点值筛选出来,分别存为集合。当最大回撤出现在数据靠后位置时,减少了搜寻最低点的次数,此时Level3有一定优势。
3、主要代码如下:class ValueSample
{
private static ArrayList valueCollection = new ArrayList<>();// 净值集合
private static ArrayList maxCollection = new ArrayList<>();// 下降趋势顶部索引集合
private static ArrayList minCollection = new ArrayList<>();// 上升趋势底部索引集合
private static ArrayList IndexCollection = new ArrayList<>();// 趋势点索引集合
public static void main(String[] args)
{
//.....此处省略导入净值到valueCollection的过程。
// 最大回撤,Level1
long start = System.nanoTime();
System.out.println("L1最大回撤=" + getMaxDrawdownLevel1());
long end = System.nanoTime();
System.out.println("L1用时:" + (en