例子

初始资金是1块钱的话,资金连续一周的变化如下:

周一:1.01

周二:1.02

周三:0.98

周四:1.0

周五:0.97

那么我们要计算的样本为:[1, 1.01, 1.02, 0.98, 1.0, 0.97]

如果计算截至到周二的最大回撤,那么我们要拿到周二的值:1.02,再拿周二之前最大的值,即,周一的1.01,再计算回撤:(1.02/1.01-1)*100=0.99%,这时间 0.99% >0 ,所以是不存在回撤的。

如果计算截至到周三的最大回撤,那么我们要拿到周三的值:0.98,再拿周三之前最大的值,即,周二的1.02,再计算回撤:(0.98/1.02-1)*100=-3.9215%,这时间 -3.9215% < 0 ,所以是存在回撤的。

如果计算截至到周五的最大回撤,那么我们要拿到周五的值:0.97,再拿周五之前最大的值,即,周二的1.02,再计算回撤:(0.97/1.02-1)*100=-4.9019%,这时间 -4.9019% < 0 ,所以是存在回撤的。

这时间再比较 Min(-4.9019%, -3.9215%),得出最大回撤为 -4.9019%。

这里用图来表示下最大回测

代码

使用Python完成上述例子:

代码:

#price = [1.0, 1.01, 1.05, 1.1, 1.11, 1.07, 1.03, 1.03, 1.01, 1.02,1.04, 1.05, 1.07, 1.06,1.05, 1.06, 1.07, 1.09, 1.12, 1.18, 1.15, 1.15, 1.18, 1.16, 1.19, 1.17, 1.17, 1.18,1.19, 1.23]
price = [1, 1.01, 1.02, 0.98, 1.0, 0.97]
maxValueList = []
reList = []if __name__ == '__main__':print("样本:" + str(price))maxValueList.append(price[0])for i in range(1, len(price)):maxValue = price[i]#获取最大值for j in range(0, i):if price[j] > maxValue:maxValue = price[j]passmaxValueList.append(maxValue)revalue = (price[i]/maxValueList[i - 1] - 1) * 100print("当前数组下标 " + str(i) + " 回测值 : " + str(revalue) + "%")#获取存在的回撤reList.append(revalue)pass#算最大回撤maxRe = 0for i in range(0, len(reList)):maxRe = reList[i]for j in range(0, i):if maxRe > reList[j]:maxRe = reList[j]print("最大回测 : " + str(maxRe) + "%")pass

运行截图:

D:\python\content\python.exe D:/PythonProject/demo/main.py
样本:[1, 1.01, 1.02, 0.98, 1.0, 0.97]
当前数组下标 1 回测值 : 1.0000000000000009%
当前数组下标 2 回测值 : 0.990099009900991%
当前数组下标 3 回测值 : -3.9215686274509887%
当前数组下标 4 回测值 : -1.9607843137254943%
当前数组下标 5 回测值 : -4.90196078431373%
最大回测 : -4.90196078431373%Process finished with exit code 0

换上面注释后的数据:

D:\python\content\python.exe D:/PythonProject/demo/main.py
样本:[1.0, 1.01, 1.05, 1.1, 1.11, 1.07, 1.03, 1.03, 1.01, 1.02, 1.04, 1.05, 1.07, 1.06, 1.05, 1.06, 1.07, 1.09, 1.12, 1.18, 1.15, 1.15, 1.18, 1.16, 1.19, 1.17, 1.17, 1.18, 1.19, 1.23]
当前数组下标 1 回测值 : 1.0000000000000009%
当前数组下标 2 回测值 : 3.960396039603964%
当前数组下标 3 回测值 : 4.761904761904767%
当前数组下标 4 回测值 : 0.9090909090909038%
当前数组下标 5 回测值 : -3.603603603603611%
当前数组下标 6 回测值 : -7.207207207207212%
当前数组下标 7 回测值 : -7.207207207207212%
当前数组下标 8 回测值 : -9.009009009009016%
当前数组下标 9 回测值 : -8.108108108108114%
当前数组下标 10 回测值 : -6.3063063063063085%
当前数组下标 11 回测值 : -5.405405405405405%
当前数组下标 12 回测值 : -3.603603603603611%
当前数组下标 13 回测值 : -4.504504504504503%
当前数组下标 14 回测值 : -5.405405405405405%
当前数组下标 15 回测值 : -4.504504504504503%
当前数组下标 16 回测值 : -3.603603603603611%
当前数组下标 17 回测值 : -1.8018018018018056%
当前数组下标 18 回测值 : 0.9009009009008917%
当前数组下标 19 回测值 : 5.357142857142838%
当前数组下标 20 回测值 : -2.5423728813559365%
当前数组下标 21 回测值 : -2.5423728813559365%
当前数组下标 22 回测值 : 0.0%
当前数组下标 23 回测值 : -1.6949152542372947%
当前数组下标 24 回测值 : 0.8474576271186418%
当前数组下标 25 回测值 : -1.6806722689075682%
当前数组下标 26 回测值 : -1.6806722689075682%
当前数组下标 27 回测值 : -0.8403361344537785%
当前数组下标 28 回测值 : 0.0%
当前数组下标 29 回测值 : 3.3613445378151363%
最大回测 : -9.009009009009016%Process finished with exit code 0

Python笔记-最大回测计算相关推荐

  1. python 量化策略回测_在python中创建和回测对交易策略

    python 量化策略回测 Pairs trading is one of the many mean-reversion strategies. It is considered non-direc ...

  2. 5、Python量化交易-回测收益计算

    目录 前言 一.回测的主方法 二.回测实现 1 - 获取回测数据ticks 2 - 运行回测 3 - 为回测数据添加生成方法 4 - sell中添加订单的pnl收益计算 5 - 策略执行中调整买卖ma ...

  3. Python应用之回测基金定投,选周几收益最高?

    今天我用Python做了定投回测实验,想从历史数据上看,什么时候定投获得的收益最大. 先上结论: 对于沪深300/中证500,周定投的话,周5定投收益最高,但由于周5申购下周一才确认,因此会多占用2天 ...

  4. 【交易回顾】没用Python做量化回测,少赚100w | 股指期货妙用案例

    最近发现自己做了一件很傻逼的事情. 是年初做的一笔投资.当时对这笔交易思考的不够全面,没用历史数据做详细的回测. 导致现在让我至少少赚了100万. 这种事情大家肯定都喜闻乐见,比如之前一篇文章< ...

  5. 量化交易入门笔记-策略回测与评估

    首先,编写一个简单的"双均线量化策略" 代码如下: def initialize(context):"""双均线量化策略的初始化函数"&qu ...

  6. 《机械交易系统》读书笔记:回测指标

    1.总的净盈 这是对系统盈利能力的衡量,但它并没有考虑其中所蕴涵的风险.这个限制,这只能当作一个比较粗略的指标.但是,当我们需要比较不同的交易策略时,因为每个交易策略都可能包含若干交易系统,使用这个指 ...

  7. 手把手教你python实现量价形态选股知乎_【手把手教你】Python实现基于事件驱动的量化回测...

    01引言 使用矢量化方法(pandas)建立的基于研究的量化回测框架,不考虑交易的委托成交行为,与真实市场情况差距比较大.今天为大家介绍的是基于事件驱动的回测框架,这是一种十分复杂的回测系统,力图模拟 ...

  8. 【Python数据科学 | 11】应用实战:我的第一个开源项目-基金定投回测工具

    这是机器未来的第60篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127712752 <Python数据科学快速入 ...

  9. Python backtrader回测之布林带策略

    在做量化分析时,我们有很多种策略,这些策略的好坏如何去评价,那就是用过往数据进行测试.这里就需要用到量化分析的回测系统了.由于刚入门,就使用了Python中的backtrader.由于自己Python ...

最新文章

  1. SpringBoot--Druid多数据源配置
  2. chrome调试的JavaScript官方技巧
  3. Java Review - LinkedList源码解读
  4. 01_学习java WEB涉及到的相关技术
  5. 世界粮农组织五大健康食品_粮农组织的完整形式是什么?
  6. 用户空间和内核空间通讯之【Netlink 中】
  7. java笔记--查看和修改线程名称
  8. linux-推荐两款好用的录屏软件
  9. 《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.4节识别在线设备...
  10. mysql的动态建表_mysql数据库动态创建表的实例分享
  11. vue程序中组件间的传值方式
  12. 小程序直播送礼物svga展示
  13. STM32USB虚拟串口驱动 支持win10下载
  14. IE6 浏览器常见兼容问题 大汇总(23个)
  15. 【计算机图形学】几何
  16. 【SEED Labs 2.0】TCP Attacks Lab
  17. C语言循环语句的研究意义,C语言中循环语句的应用研究
  18. 基于微信小程序的校园信息共享平台 毕业设计-附源码211615
  19. 虚拟资源素材商品交易平台网站源码
  20. R语言查找data.frame里面是否包含某些变量。

热门文章

  1. php 如何获取文件类型,php怎么通过一个Url获得文件类型(后缀名)?
  2. 台式电脑win7计算机无法启动,台式电脑无法开机该如何解决
  3. Pod 原地垂直伸缩
  4. C语言/860.(柠檬水找零)Lemonade Change
  5. 基于STM32或STC的手势控制MP3语音播放器的设计
  6. 腾讯云人脸核身uniapp+后端代码
  7. vue省市区三级联动
  8. ABTO VoIP SIP SDK for Windows 4.21 Crack
  9. 用户账号绑定到微信公众号的方法分享
  10. 技术篇:关于EKT的一些设计