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用时:" + (end - start));

Thread.sleep(3000);//暂停3s

// 最大回撤,Level2

start = System.nanoTime();

indexInitialize();

System.out.println("L2最大回撤=" + getMaxDrawdownLevel2());

end = System.nanoTime();

System.out.println("L2用时:" + (end - start));

Thread.sleep(3000);

// 最大回撤,Level3

start = System.nanoTime();

valueInitialize();

System.out.println("L3最大回撤=" + getMaxDrawdownLevel3());

end = System.nanoTime();

System.out.println("L3用时:" + (end - start));

}

private static double getMaxDrawdownLevel1()// 最大回撤L1

{

double diff = 0;

double max = valueCollection.get(0);

for (int temp = 1; temp < valueCollection.size(); temp++)

{

if (valueCollection.get(temp) - max < diff)

diff = valueCollection.get(temp) - max;

if (valueCollection.get(temp) > max)

max = valueCollection.get(temp);

}

System.out.println("最大回撤率max=" + (diff / max) * 100);

return diff;

}

private static double getMaxDrawdownLevel2()// 最大回撤L2

{

double diff = 0;

double max = valueCollection.get(IndexCollection.get(0));

for (int baseIndex = 1; baseIndex < IndexCollection.size(); baseIndex++)

{

if (valueCollection.get(IndexCollection.get(baseIndex)) - max < diff)

diff = valueCollection.get(IndexCollection.get(baseIndex)) - max;

if (valueCollection.get(IndexCollection.get(baseIndex)) > max)

max = valueCollection.get(IndexCollection.get(baseIndex));

}

System.out.println("最大回撤率max=" + (diff / max) * 100);

return diff;

}

private static double getMaxDrawdownLevel3()// 最大回撤L3

{

double max = maxCollection.get(0);

int maxIndex = 0;

for (int baseIndex = 1; baseIndex < maxCollection.size(); baseIndex++)

if (max < maxCollection.get(baseIndex))

{

max = maxCollection.get(baseIndex);

maxIndex = baseIndex;

}

double min = minCollection.get(maxIndex + 1);

for (int baseIndex = maxIndex + 2; baseIndex < minCollection.size(); baseIndex++)

if (min > minCollection.get(baseIndex))

min = minCollection.get(baseIndex);

System.out.println("最大回撤率max=" + (min / max - 1) * 100);

return min - max;

}

private static void valueInitialize()// 初始化趋势点值集合

{

for (int baseIndex = 0; baseIndex < valueCollection.size() - 1; baseIndex++)

if (valueCollection.get(baseIndex) > valueCollection.get(baseIndex + 1))

{

maxCollection.add(valueCollection.get(baseIndex));// 加入下降趋势顶部值

for (; baseIndex + 1 < valueCollection.size(); baseIndex++)

if (valueCollection.get(baseIndex) < valueCollection.get(baseIndex + 1))

{

minCollection.add(valueCollection.get(baseIndex));// 加入上升趋势底部值

break;

}

}

}

private static void indexInitialize()// 初始化趋势点索引集合

{

for (int baseIndex = 0; baseIndex < valueCollection.size() - 1; baseIndex++)

if (valueCollection.get(baseIndex) > valueCollection.get(baseIndex + 1))

{

IndexCollection.add(baseIndex);// 加入下降趋势顶部索引

for (; baseIndex + 1 < valueCollection.size(); baseIndex++)

if (valueCollection.get(baseIndex) < valueCollection.get(baseIndex + 1))

{

IndexCollection.add(baseIndex);// 成对加入上升趋势底部索引

break;

}

}

}

}

4、测试时间(单位,毫微秒):

2016-4-17 18:24:45 上传

下载附件 (7.43 KB)

2016-4-17 18:24:44 上传

下载附件 (7.41 KB)

2016-4-17 18:24:43 上传

下载附件 (7.37 KB)

2016-4-17 18:24:42 上传

下载附件 (7.36 KB)

2016-4-17 18:24:33 上传

下载附件 (7.4 KB)

5、数据源xml,使用Navicat导出的MySQL数据表。(因不能上传xml文件,加了txt的后缀)

2016-4-17 18:33:36 上传

长盛电子信息主题灵活配置混合(000063)历史数据

mysql中计算最大回撤_基金最大回撤算例(Java 1.8)相关推荐

  1. mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

    mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法:  语法:  TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)  说明:  ...

  2. mysql节假日函数_如何在MySQL中计算不包括周末和节假日的日期差

    我需要计算两个日期之间的天数(工作日),不包括周末(最重要)和假期 SELECT DATEDIFF(end_date, start_date) from accounts 但是,我不知道该如何在MyS ...

  3. mysql 税率用什么类型_在MySQL中计算增值税/税金总额 - 增值税税率取决于地点字段...

    我正在尝试在MySQL中创建一个报告(来自Wordpress / Woocommerce安装中的表格,但这个商店征税的方式与Woocommerce的工作方式不同,所以我不能使用Woocommerce报 ...

  4. mysql中日期怎样求差_在Sql语句中怎样计算出两个日期的差值

    展开全部 sql语句中计算两个日期的差值用32313133353236313431303231363533e4b893e5b19e31333365643662datediff函数. 工具:sqlser ...

  5. md5后得到的32位字符串存储到mysql中太占空间了_好看!快收藏:非常完整的 MySQL 规范...

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  6. mysql中的索引什么意思_索引是什么意思(数据库中的索引是什么)

    mysql中索引是存储引擎层面用于快速查询找到记录的一种数据结构,索引对性能的影响非常重要,特别是表中数据量很大的时候,正确的索引会极大的提成查询效率.简单理解索引,就相当于一本砖头厚书的目录部分,通 ...

  7. mysql中sysdate函数转字符串_【转】MySQL:日期函数、时间函数总结(MySQL 5.X)

    转自:http://www.cnblogs.com/she27/articles/1377089.html 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time) ...

  8. md5后得到的32位字符串存储到mysql中太占空间了_面试官:你对MySQL高性能优化有什么规范建议?...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? 文章篇幅较长,建议先收藏再找个合适的时间阅读 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 ...

  9. mysql中获取时间的年月日_详解mysql 获取当前日期及格式化

    MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 ...

最新文章

  1. 在python中调用js或者nodejs要使用PyExecJs第三方包。
  2. 用计算机算出你喜欢吃你喜欢的人,Go for it七年级下学期1-12单元(期末复习)句子翻译专练...
  3. 国外的程序猿可以工作到退休而国内的为什么这么短命(思维认知)
  4. openssh arm linux 编译,openssh编译安装到ARM嵌入式系统中
  5. 理论基础 —— 线性表 —— 单链表
  6. 2019年的流水账和总结
  7. linux怎么添加DSL,如何在redhat上进行DSL 拨号
  8. 车牌识别算法_向滥用远光灯说不,易泊车牌识别算法了解一下?
  9. 基于JSP+Servlet+Tomcat8.5+WebSocket实现的网页聊天室
  10. 苹果亮度自动调节怎么关闭_为何安卓自动亮度调节做不好?小米张国全释疑
  11. 如何有效的获得高质量的大规模标注数据?
  12. 旁门左道:让移动游戏在APP Store下载量暴涨的邪门功夫
  13. MOTO不相信眼泪!艰难回归!你,准备好了吗?
  14. 你该知道的Pyecharts简易上手教程
  15. 获取指定区域内的坐标点位,在线查看经纬坐标
  16. 绿地五里桥 设计原型_绿地 · 黄浦滨江项目设计
  17. 关于“发现在互联网状态下的生活时间流逝很快的分析”
  18. 论文阅读笔记:看完也许能进一步了解Batch Normalization
  19. 异常被 ”吃“ 掉导致事务无法回滚
  20. SAP中总账科目事务FS00/FSP0/FSS0的关系和区别

热门文章

  1. outlook邮件撤回你了解吗?邮件撤回功能讲解
  2. kafka-eagle 使用配置及远程jmx端口设置遇到的问题
  3. 第九届蓝桥杯稍小分数c语言,【第九届蓝桥杯大赛征文】蓝桥梦
  4. 下载链接在微信中无法打开的解决方案
  5. 流行的权限管理 gem devise的定制
  6. 4g网络设置dns地址_上网速度慢,修改一下win10系统的DNS设置,网速飙升
  7. CSS实现长宽比的几种方案,CSS如何实现长宽比?
  8. 2022年全球颈椎按摩仪市场前景分析及研究报告
  9. G6-Editor 编辑器入门使用教程
  10. 认真分享一波本科 4 年挣到人生第一个 30w 的经历:目标->动力->坚持->改变