最大回撤率
将数组中零元素移动到末尾,要求算法时间复杂度为O(n),空间复杂度为O(1)

最大回撤率: 在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。最大回撤率用来描述买入产品后可能出现的最糟糕情况。D为某一天的净值,i 为某一天,j 为i 后的某一天,Di 是第i 天的产品净值,Dj 是第j 天的产品净值 最大回撤率:drawdown=max [(Di - Dj) / Di]

注意这道题不能简单地找数组中最大最小值,然后计算落差,因为有时间的先后顺序存在,比如,2,9,4,3这四个数,9出现在2后面,只能计算:
(9-4)/9=0.55
(9-3)/9=0.66
(4-3)/4=0.25
最大回撤率应该是0.66,起始值为9,结束值为3.

解题思路可以来看一张图:(图片来源于他人博客)

其中红色曲线表示各个数据点,蓝色点表示的是某段区间内的最大值,第5个点出我们可以看到最大落差。

numpy中有很好的工具实现这个过程:

def max_draw_down(arr):# i 为结束位置i = np.argmax((np.maxinum.accumulate(arr) - arr)/np.maxinum.accumulate(arr))if i == 0:print("bullshit")# j 为开始位置j = np.argmax(arr[:i])return (arr[j]-arr[i])/arr[j]

‘’’
numpy.argmax 找到最大元素的下标

numpy.ufunc.accumulate :官网的解释是 accumulate the result of applying the operator to all elements,个人理解是累加将ufunc方法应用到每个元素上后的值,比如 numpy.add.accumulate([1, 2, 3])=[1, 3, 6],numpy.multiply.accumulate([ 4, 5, 6]) = [4, 20, 120]

numpy.maxinum :compare two arrays and returns a new array containing the element-wise maxima。 比较两个数组并返回包含最大元素的新数组。比如:
np.maxinum([2, 3, 4], [5, 1, 3]) = [5, 3, 4]

所以: numpy.maxinum.accumulate就能计算出上图中的那些蓝点,对数组中每前后两个元素对比,保留较大的那个,直到遇到一个更大的值。
‘’’

由于我对numpy不熟,笔试的时候就没想到这么精简的代码,我的想法是,对于当前某一个值arr_i,当其为起始值时,取后序队列中的最小值能达到该位置的最大回撤值。(唉,其实感觉自己也是一个很笨的人,很多题目都只能想到最简单最原始的方法)

def find_min(arr):min_index = 0for i in range(len(arr)):if arr[i] < arr[min_index]:min_index = ireturn min_indexdef max_down(arr):max_d = -1start = -1end = -1min_index = find_min(arr)for i in range(len(arr)):if i >= min_index:min_index = find_min(arr[i + 1: ])d = (arr[i] - arr[min_index]) / arr[i]if d > max_d:max_d = dstart = iend = min_indexif max_d == 0:print("bullshit")else:print(str(max_d) + "," + str(start) + "," + str(end))
将数组中的零元素移动到数组末尾,要求算法时间复杂度为O(n),空间复杂度为O(1)

当时我的代码是:

def move_zeors(arr):for i in range(len(arr)):if arr[i]== 0:arr[i], arr[len(arr)-1-i] = arr[len(arr)-1-i], arr[i]

后面面试官提醒我可以改进,于是在数组末尾可以增加一个尾指针,记录尾零的最小下标,当前指针到达尾指针处时不再走动。

还有一个最简单的方法,当数组中零较多时,记录数组长度,一次遍历输出非零数字,再补零即可。

最大回撤率 和 移动数组零元素到末尾相关推荐

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

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

  2. 基金里投资风险指标的计算工具类(夏普比率,波动率,Var值,最大回撤率)

    去年在项目里写了一个计算投资风险指标的计算工具类,包含夏普比率,波动率,Var值,最大回撤率四个指标. 计算全部采用BigDecimal类型,开方计算采用牛顿迭代法计算. 其计算公式如下: 工具类实现 ...

  3. 学习记录657@python计算股价的回撤与收盘价回撤率组合图实现

    以比亚迪为例,对其收盘价计算回撤,计算逻辑的核心是求的当前日期及其之前日期的价格的最大值,然后计算回撤率,然后就可以求最大值了. 本文不仅给出回撤的计算,还画出了价格与回撤率的组合图,便于观察. 看完 ...

  4. 回撤率 python_最大回撤和最大回撤率的区别?

    两者无本质区别,最大回撤率是一个相对的概念,在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值. 举个例子:在基金净值2元时买入,在这一周期内,净值下跌到最低点1.6元,最大 ...

  5. 回撤率 python_最大回撤用python怎么计算

    如何使用python计算最大回撤,下面给大家举个小例子: 1. 单期简单收益率 import datetime import pandas as pd pd.core.common.is_list_l ...

  6. matlab最大回撤值,用matlab计算区间最大回撤值和最大回撤率

    用matlab 计算区间最大回撤值和最大回撤率 在股票投资的时候有一个很重要的概念-最大回撤.最大回撤被定义为: min()min(max )j i j i i j j i j d x x x x & ...

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

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

  8. 回撤率 python 平台_详解如何使用python计算一只股票的最大回撤率?

    详解如何使用python计算一只股票的最大回撤率? 一.什么是最大回撤率? 最大回撤率:在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值.最大回撤用来描述买入产品后可能出现 ...

  9. Python一些可能用的到的函数系列76 最大回撤率

    说明 这个问题其实有点绕,写在这里备忘吧. 内容 最大回撤:从任何一个峰值向后的最大落差. 两个要点: 1 找峰值 2 从峰值往后看,找到最大落差 最后取所有峰值的最大值就是最大回撤. 如下一个数列, ...

最新文章

  1. 命令行编译运行CSharp文件
  2. MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
  3. 简单字符串比较——JAVA
  4. 【Java中级】(三)IO
  5. WinXP的EFS加密文件如何解密?
  6. 因为一个字符校对问题,我的大厂面试挂了
  7. 寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路
  8. 梦断代码阅读笔记之二
  9. 【报告分享】2019全球住宅报告.pdf(附下载链接)
  10. linux下部署tomcat的备忘
  11. springBoot+JSP搭建项目
  12. android 烟花动画效果图,android利用图片实现烟花效果
  13. vrep小车寻迹代码
  14. mac word 复制自动产生书签
  15. CSDN 迷你博客错误
  16. 琪琪格不因为漂亮而自信
  17. Fiori WebIde开发环境搭建
  18. 九大免费自学编程网站,带你告别学习焦虑
  19. MRI影像学习笔记(一)
  20. CollapsingToolbarLayout源码分析

热门文章

  1. 前端vue基于onlyoffice实现在线预览
  2. matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...
  3. 冯杰的手写艺术签名怎么写好看
  4. 计算机专业学生的自我介绍英语翻译,英语学生自我介绍,大学生自我介绍带翻译?...
  5. 摩拜路演竟然都在用他做的PPT,这位骨灰级大神到底有什么秘诀?
  6. java的发展历史 现状
  7. Redis源码剖析和注释(二十四)--- Redis Sentinel实现(哨兵操作的深入剖析)
  8. Corona室内渲染作品赏析《绿色味道》
  9. 阿里云服务器使用配置
  10. python 股票分析常用库_Python数据分析常用库有哪些?Python学习!