一、问题概述

做基金数据分析时,最大回测是一个很重要的参考指标。他有别于一个区间内的最大值和最小值,这是一个阶段性的统计数据,这个数据可以衡量一个基金经理对风险的把控程度。

二、简单粗暴的方法

算法实现有很多,简单粗暴的方法比如把每一天的值和其他天作差值计算,找到差值最大的那一天,但这个方法并不好。从时间复杂度上看是O(n!),差不多算是最差的了。

说到这顺便普及一下时间复杂度的知识。

常见复杂度

除了常数阶、线性阶、平方阶、对数阶,还有如下时间复杂度: 
f(n)=nlogn时,时间复杂度为O(nlogn),可以称为nlogn阶。 
f(n)=n³时,时间复杂度为O(n³),可以称为立方阶。 
f(n)=2ⁿ时,时间复杂度为O(2ⁿ),可以称为指数阶。 
f(n)=n!时,时间复杂度为O(n!),可以称为阶乘阶。 
f(n)=(√n时,时间复杂度为O(√n),可以称为平方根阶。

下面将算法中常见的f(n)值根据几种典型的数量级来列成一张表,根据这种表,我们来看看各种算法复杂度的差异。

从上表可以看出,O(n)、O(logn)、O(√n )、O(nlogn )随着n的增加,复杂度提升不大,因此这些复杂度属于效率高的算法,反观O(2ⁿ)和O(n!)当n增加到50时,复杂度就突破十位数了,这种效率极差的复杂度最好不要出现在程序中,因此在动手编程时要评估所写算法的最坏情况的复杂度。

O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(2ⁿ) < O(n!)

参考链接:https://blog.csdn.net/itachi85/article/details/54882603

三、更优的解决方法

下面这个方法更简单,时间复杂度是线性的O(1)

class Program{static void Main(string[] args){Console.WriteLine("3,1,6,5,4,3,6,4,8,2,9");string listtext = Console.ReadLine();string[] Datelist = listtext.Split(',');decimal max = decimal.MinValue;decimal min = decimal.MaxValue;decimal payback = decimal.MinValue;string oldmax = "";string oldmin = "";SortedList<decimal, decimal> SOR = new SortedList<decimal, decimal>();List<decimal> res = new List<decimal>();foreach (var new_date in Datelist){decimal dec_new_date = Convert.ToDecimal(new_date);if (max < dec_new_date){max = dec_new_date;min = dec_new_date;}if (min > dec_new_date){min = dec_new_date;}if ((max - min) / max > payback && max != min){oldmax = max.ToString();oldmin = min.ToString();payback = (max - min) / max;}}Console.WriteLine("最大回撤" + payback.ToString());Console.WriteLine("最大值" + oldmax.ToString());Console.WriteLine("最小值" + oldmin.ToString());Console.ReadLine();}}

最大回撤算法代码实现相关推荐

  1. python计算最大回撤_【邢不行|量化小讲堂系列36-python量化入门】如何通过3行Python代码计算最大回撤...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]: 个人微 ...

  2. 回撤率 python_【Python量化】O(n)复杂度实现最大回撤的计算

    看到大多数计算最大回撤的代码都是 的算法复杂度,其实最大回撤的计算用 的算法复杂度就能实现,只需对 复杂度的代码稍作修改即可. 我们先来回顾下最大回撤的定义: 我们来生成一个数组,包含连续1000个时 ...

  3. python计算最大回撤_最大回撤线性算法实现

    最大回撤是指投资组合在选定的周期内,任一时间点往后推,可能出现资产净值下降的最大幅度.回撤的意思是指在某一段时期内净值从最高点开始回落到最低点的幅度.最大回撤常用百分率来表示,是一个重要的风险指标.最 ...

  4. 新手追高,熟手突破,老手抄底,高手回撤,庄家筹码,机构算法!

    做一个真正高手 我一直认为,一个人对股市的研究无论如何都只能是其中的一部分内容.股市知识的广泛,从十个人就有十种操作方法就可见一斑.就股市获利而言,方法细分下来多如牛毛.虽然可以归纳为基本的几种方法, ...

  5. 最大回撤线性算法实现

    最大回撤是指投资组合在选定的周期内,任一时间点往后推,可能出现资产净值下降的最大幅度.回撤的意思是指在某一段时期内净值从最高点开始回落到最低点的幅度.最大回撤常用百分率来表示,是一个重要的风险指标.最 ...

  6. 最大回撤率MaxDawndown算法(Python3)

    最大回撤率MaxDawndown 含义 最大回撤率:在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值.最大回撤用来描述买入产品后可能出现的最糟糕的情况.最大回撤是一个重要的 ...

  7. 已经push到远端的代码 如何回撤? --转载

    已经push到远端的代码 如何回撤? 1.第一种情况:还没有push,只是在本地commit 2.push 代码已经更新到远程仓库 个人实操命名 工作遇到已经push到gitlab的代码,想撤回,在此 ...

  8. C+++实现推箱子(附加回撤功能)

    跟着B站老师 做的,链接[C/C++]180行代码,推箱子就是这么简单~抄详细,学不会我还不信了,关卡切换和回退都实现了哦_哔哩哔哩_bilibili 编码环境:VS2019 利用 链栈实现的回撤功能 ...

  9. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

最新文章

  1. 「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了
  2. Codeforces#371 Div2
  3. 安装Kubernetes-Dashboard插件
  4. [记录] JavaScript 中的字符串操作
  5. Dapr牵手.NET学习笔记:绑定
  6. Vue+Element!一千字带你编写合理的编辑,查看,新建!
  7. Vue-touch的使用
  8. MSP430杂谈--IIC通信
  9. java 是否继续_Java异常被抛出或被捕获之后,代码是否继续执行的问题
  10. 64位Office 2010 连接SOHU IMAP服务器遇到问题
  11. HTTP服务器状态代码定义
  12. 斐波那契数列的第N项
  13. phpstorm的安装和破解
  14. ajax id sort,带有ajax更新的Jqueryui可排序列表
  15. 北斗三号频点_解码北斗三号
  16. 电脑常用截图方法(含长截图)
  17. csgo安全服务器显示我无法加入vac,为什么进入CSGO之后显示我无法加入VAC安全服务器?在线等!急...
  18. Windows禁用系统自动更新(全)
  19. 商标网报错504_网站502与504错误分析
  20. CentOS7 wifi安装配置问题总结

热门文章

  1. 单细胞数据分析工具scvi介绍
  2. 剑指Offer——京东校招笔试题+知识点总结
  3. 吉他学习教程1 之 认识吉他
  4. 地下城与勇士游戏设计元素及成功原因分析
  5. 大聪明教你学Java | Spring Boot 整合 Redis 实现访问量统计
  6. 成品油公司注册之柴油的馏程和特性
  7. 【过程控制工程】第三次在线作业
  8. 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】
  9. 《人工智能的明天,中国去哪儿》---汤晓鸥
  10. 手机号、IMSI、TMSI CGI/SAI MSC BSC