ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 76587|回复: 13

[求助] 如何计算股票或是指数的最大回撤

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-6-11 15:04 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
初始数据:一个时间序列的所对应的指数和和基金净值
数据需求:计算指数和基金净值的最大回撤
注:最大回撤:从一个最大值点到下个最高点来临前的最低点的跌幅      比如:2013-01-16,为第一个高点1.0143,之后再新高到来之前的最低点为2013-3-18,0.9713,这两个值的变化百分比为这一阶段的回撤,为(0.9713/1.0143-1);之后遇到新高2013-5-29,1.0387,再下个新高到来前的最低点2013-6-24,0,9908,二者的变化即为回撤;直到算出所有的回撤中的最大回撤即为所需数据,能否用EXCEL直接跑出最大回撤,望大家帮忙,谢谢! 最大回撤.rar (38.24 KB, 下载次数: 1420)

TA的精华主题

TA的得分主题

发表于 2014-6-11 16:44 | 显示全部楼层
Sub calmtommy()
    Dim arr, brr(), crr(), drr()
    Dim i%, j%, k%, r%
    arr = Sheet1.[a1].CurrentRegion
   
    For i = 3 To UBound(arr) - 1
        If arr(i + 1, 3) < arr(i, 3) And arr(i - 1, 3) < arr(i, 3) Then
            j = j + 1
            ReDim Preserve brr(1 To j)
            brr(j) = arr(i, 3)
        End If
        If arr(i, 3) < arr(i + 1, 3) And arr(i, 3) < arr(i - 1, 3) Then
            k = k + 1
            ReDim Preserve crr(1 To k)
            crr(k) = arr(i, 3)
        End If
    Next i
    r = Application.WorksheetFunction.Min(j, k)
    For i = 1 To r
        ReDim Preserve drr(i)
        drr(i) = (crr(i) - brr(i)) / brr(i)
        
    Next i
    MsgBox "最大回撤为:" & Application.WorksheetFunction.Max(drr)
   
End Sub

TA的精华主题

TA的得分主题

发表于 2014-6-11 17:04 | 显示全部楼层
按ALT+F11 调出VBA代码窗口,粘贴进去 F5运行一下就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-20 10:15 | 显示全部楼层
Calmtommy 发表于 2014-6-11 16:44
Sub calmtommy()
    Dim arr, brr(), crr(), drr()
    Dim i%, j%, k%, r%

感谢Calmtommy的解答,由于对VBA不甚了解,有些问题请教下。不知道你是算的上证指数还是基金净值的回撤呢,运行结果是

回撤结果

回撤结果

但是不论是上证指数还是基金的回撤都不是这个数,按照看图算的结果的最大回撤是如下情况,不知道是怎么回事?
上证综指
基金净值
2013/2/5
2433.13
2013/10/22
1.2156
2013/6/27
1950.01
2013/11/18
1.1055
 
-19.86%
-9.06%


另外,可否不用弹窗的形式,可以输出到EXCEL中的一个格子里,这样我可以引用这个最大回撤,并导出该最大回撤最大值和最小值所对应的日期,谢谢

TA的精华主题

TA的得分主题

发表于 2014-6-20 11:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
取的是基金净值最大回撤,
MsgBox "最大回撤为:" & Application.WorksheetFunction.Max(drr)
改为  MsgBox "最大回撤为:" & Application.WorksheetFunction.min(drr)
因为回撤是负值吗。
另外,回撤的概念不是每一个(波谷值-波峰值)/波峰值吗?
波谷波峰必须是相邻的才能构成回撤,是这样吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-20 13:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢你及时的回复
恩,回撤是负值。  一个完整的回撤,是从净值达到新高,到下个新高来临之前的最低值,二者的变化率即为回撤,每个完整的回撤是是以所检测数列达到新高时为间隔,所有回撤的的最小值即为最大回撤。图示如下:
上证指数回撤.png
基金净值最大回撤.png




我想达到的效果就是,后期维护是就不断添加新的净值和日期即可,自动算出最大回撤,并在在EXCEL中的一个单元格中显示出,这样便于我引用,另外最好能显示出计算出最大回撤的两个日期及各个日期的净值,谢谢。



TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-1 15:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-6-21 15:06 | 显示全部楼层
本帖最后由 jikea 于 2015-6-22 09:23 编辑

股票中的战斗机
股票分析.jpg

股票分析.part3.rar

114.78 KB, 下载次数: 620

股票分析.part2.rar

1 MB, 下载次数: 599

股票分析.part1.rar

1 MB, 下载次数: 641

TA的精华主题

TA的得分主题

发表于 2015-9-12 07:54 | 显示全部楼层
用(历史最高-今天值)/历史最高,然后求出最小值就是最大回撤幅度

TA的精华主题

TA的得分主题

发表于 2015-10-9 17:06 | 显示全部楼层
Calmtommy 发表于 2014-6-11 16:44
Sub calmtommy()
    Dim arr, brr(), crr(), drr()
    Dim i%, j%, k%, r%

先下载,再学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 05:14 , Processed in 0.048082 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表