关键词搜索

源码搜索 ×
×

Python笔记-最大回测计算

发布2022-01-24浏览1590次

详情内容

例子

初始资金是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完成上述例子:

代码:

  1. #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]
  2. price = [1, 1.01, 1.02, 0.98, 1.0, 0.97]
  3. maxValueList = []
  4. reList = []
  5. if __name__ == '__main__':
  6. print("样本:" + str(price))
  7. maxValueList.append(price[0])
  8. for i in range(1, len(price)):
  9. maxValue = price[i]
  10. #获取最大值
  11. for j in range(0, i):
  12. if price[j] > maxValue:
  13. maxValue = price[j]
  14. pass
  15. maxValueList.append(maxValue)
  16. revalue = (price[i]/maxValueList[i - 1] - 1) * 100
  17. print("当前数组下标 " + str(i) + " 回测值 : " + str(revalue) + "%")
  18. #获取存在的回撤
  19. reList.append(revalue)
  20. pass
  21. #算最大回撤
  22. maxRe = 0
  23. for i in range(0, len(reList)):
  24. maxRe = reList[i]
  25. for j in range(0, i):
  26. if maxRe > reList[j]:
  27. maxRe = reList[j]
  28. print("最大回测 : " + str(maxRe) + "%")
  29. pass

运行截图:

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

换上面注释后的数据:

  1. D:\python\content\python.exe D:/PythonProject/demo/main.py
  2. 样本:[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]
  3. 当前数组下标 1 回测值 : 1.0000000000000009%
  4. 当前数组下标 2 回测值 : 3.960396039603964%
  5. 当前数组下标 3 回测值 : 4.761904761904767%
  6. 当前数组下标 4 回测值 : 0.9090909090909038%
  7. 当前数组下标 5 回测值 : -3.603603603603611%
  8. 当前数组下标 6 回测值 : -7.207207207207212%
  9. 当前数组下标 7 回测值 : -7.207207207207212%
  10. 当前数组下标 8 回测值 : -9.009009009009016%
  11. 当前数组下标 9 回测值 : -8.108108108108114%
  12. 当前数组下标 10 回测值 : -6.3063063063063085%
  13. 当前数组下标 11 回测值 : -5.405405405405405%
  14. 当前数组下标 12 回测值 : -3.603603603603611%
  15. 当前数组下标 13 回测值 : -4.504504504504503%
  16. 当前数组下标 14 回测值 : -5.405405405405405%
  17. 当前数组下标 15 回测值 : -4.504504504504503%
  18. 当前数组下标 16 回测值 : -3.603603603603611%
  19. 当前数组下标 17 回测值 : -1.8018018018018056%
  20. 当前数组下标 18 回测值 : 0.9009009009008917%
  21. 当前数组下标 19 回测值 : 5.357142857142838%
  22. 当前数组下标 20 回测值 : -2.5423728813559365%
  23. 当前数组下标 21 回测值 : -2.5423728813559365%
  24. 当前数组下标 22 回测值 : 0.0%
  25. 当前数组下标 23 回测值 : -1.6949152542372947%
  26. 当前数组下标 24 回测值 : 0.8474576271186418%
  27. 当前数组下标 25 回测值 : -1.6806722689075682%
  28. 当前数组下标 26 回测值 : -1.6806722689075682%
  29. 当前数组下标 27 回测值 : -0.8403361344537785%
  30. 当前数组下标 28 回测值 : 0.0%
  31. 当前数组下标 29 回测值 : 3.3613445378151363%
  32. 最大回测 : -9.009009009009016%
  33. Process finished with exit code 0

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载