python回测代码_只用3行Python回测你的交易策略

python回测代码_只⽤3⾏Python回测你的交易策略
作者|Lorenzo Ampil
编译|VK
来源|Towards Data Science
⾃从我开始学习投资,我接触了不同的股票分析⽅法-技术分析和基本⾯分析。我甚⾄读过很多关于这些技巧的书和⽂章。
简⾔之,技术分析认为,你可以根据股票的历史价格和成交量的变动来确定买卖股票的正确时间。另⼀⽅⾯,基本⾯分析认为,你可以根据公司财务报表中的基本信息来衡量股票的实际内在价值。
这两种类型的分析对我来说都是有意义的,我希望⽤它们来为我的交易提供信息;然⽽,我总是对⼀件主要的事情感到沮丧:
有许多可能的策略可以采取,但没有系统的⽅法来选择⼀个。实际上,⼤多数交易最终仍然是“直觉”决策,⽽不是由数据驱动的。
那么我们如何评估这些策略呢?我们可以通过⽐较从每种⽅法中获得的预期投资回报率(ROI)来做到这⼀点。最好的⽅法是使⽤⼀种称为回测的⽅法来评估⼀种策略,即通过模拟过去使⽤它的情况来评估它的表现。
延胡索酸
现在,已经有很多回测框架,但是其中⼤多数都需要⾼级的编码知识。⼀个简单的helloworld实现通常需要多达30⾏代码。
为了填补这个空⽩,我决定创建fastquant,⽬标是尽可能简单地将回测进⾏引⼊。使⽤fastquant,我们只需3⾏代码就可以对交易策略进⾏回测!
在本⽂的其余部分,我将指导你如何通过Jollibee Food Corp.(JFC)的历史数据来回测⼀个简单的移动平均值交叉(SMAC)策略。
我们开始吧!
回测我们的第⼀个策略
安装fastquant
它就像使⽤pip安装⼀样简单!
# 在你的终端上运⾏这个
pip install fastquant
# 或者,你可以这样从jupyter运⾏这个
!pip install fastquant
获取股票数据
从fastquant导⼊get_stock_data函数,⽤于拉取Jollibee Food Corp.(JFC)2018年1⽉1⽇⾄2019年1⽉1⽇的库存数据。注意,我们有⽇期(dt)列和收盘价(close)的列。
from fastquant import get_stock_data
jfc = get_stock_data("JFC", "2018-01-01", "2019-01-01")
print(df.head())
萨奇尔
# dt close
# 2019-01-01 293.0
# 2019-01-02 292.0
# 2019-01-03 309.0
# 2019-01-06 323.0
# 2019-01-07 321.0
回测你的交易策略
利⽤fastquant的回测功能和Jollibee Food Corp.(JFC)的历史股票数据,对⼀种简单的移动平均交叉策略(SMAC)进⾏回测。
在SMAC策略中,fast_period指⽤于快速移动平均值的时段,⽽slow_period指⽤于慢速移动平均值的时段。
当快速移动平均线从下⽅越过慢速移动平均线时,这被认为是⼀个“买⼊”信号,⽽如果它从上⽅越过到下⽅,这被认为是“卖出”信号。
⾸先,让我们分别将快周期和慢周期初始化为15和40。
河北医科大学图书馆
你应该在⽇志底部看到下⾯的最终投资组合价值。这个值可以解释为你的投资组合在回测期结束时的价值(这⾥是2019年1⽉1⽇)。
你得到的“最终投资组合价值”和“初始投资组合价值”之间的差额,这将是基于回测的预期收益(在本例中为PHP 411.83)。
gdp平减指数from fastquant import backtest
backtest('smac', jfc, fast_period=15, slow_period=40)
# 起始价值: 100000.00
# 最终价值: 100411.83
把所有代码放在⼀起-⽤3⾏Python进⾏回测
下⾯的代码展⽰了如何在3⾏python中执⾏上述所有步骤:
from fastquant import backtest, get_stock_data
jfc = get_pse_data("JFC", "2018-01-01", "2019-01-01")
backtest('smac', jfc, fast_period=15, slow_period=40)
# 起始价值: 100000.00
# 最终价值: 100411.83
改进SMAC策略
增加快周期和慢周期
这将说明了⼩的改变可以很快地将⼀个成功的策略变成⼀个失败的策略。在快速增长期和缓慢增长期分别增加到30和50之后,我们的最终投资组合价值从100412 PHP下降到83947 PHP(减少16465 PHP)
backtest('smac', jfc, fast_period=30, slow_period=50)
# 起始价值: 100000.00
# 最终价值: 83946.83
减少慢周期,同时保持快周期不变
在这种情况下,我们的策略的性能实际上得到了改善!我们的最终投资组合价值从100412 PHP上升到102273 PHP(增加1861 PHP),之后将慢周期减少到35,并将快速周期保持在15。
backtest('smac', jfc, fast_period=15, slow_period=35)
# 起始价值: 100000.00
# 最终价值: 102272.90
下表⽐较了我们3种SMAC策略的性能:
克服测试的局限性
现在,这是否意味着我们应该⽤最好的SMAC策略交易?也许还没有。
回测有相当多的局限性,克服这些局限性通常需要额外的步骤来增加我们对回测结果和建议可靠性的信⼼。
以下是回测的两个限制,以及克服这些限制的保障措施:
过拟合工业萘
这指的是你导出的“最佳参数”与前⼀个时间段的模式太吻合的情况。这意味着,当你决定使⽤该策略时,你的策略预期盈利能⼒不会转化为实际盈利能⼒。
防⽌这种情况最好是从样本中测试你的策略,这类似于在机器学习中使⽤“测试集”。这样做的⽬的是,当你想评估你的交易策略的盈利能⼒时,你需要保留⼀个测试数据。这样,就很难过拟合参数,因为你没有基于该数据集优化策略。
前瞻性偏差
这是由于在回测期间利⽤在测试期间不可⽤的信息⽽产⽣的偏差。例如,你可以在JFC上测试⼀个策略的有效性,假设你在JFC真正公开前⼀个⽉就已经知道它的财务表现(例如净收⼊)。这会给你不可靠的信⼼,你的战略可能会损失你很多钱。
在这种情况下,要避免这种偏差,最好的⽅法之⼀就是彻底验证在回测策略时所做的假设。严格评估你的战略,以及正确执⾏战略所需的信息是值得的。
这些只是回测所带来的众多限制中的两个。我确实打算写⼀篇⽂章,在将来更详细地讨论这些,所以请继续关注!
在解决了上述局限性之后,我们应该对我们选择的战略更有信⼼;但是,请记住,虽然我们可以对我
们的战略更有信⼼,但它在看不见的现实世界中的表现永远不会百分之百确定。
我建议,⼀旦你在现实世界中采⽤了⼀种策略,那么就从相对较少的资⾦开始,并且只在该策略显⽰出更为⼀致的成功时增加它;否则,准备好在现实世界中证明它效果不佳的情况下杀死它。
为fastquant提供更多策略
请记住,fastquant拥有与现有策略库中相同数量的策略。到⽬前为⽌,有8种策略可供选择——包括简单移动平均交叉(SMAC)、相对强度指数(RSI),甚⾄是基于情绪分析的策略!
正如我在本⽂介绍中提到的,有⼤量不同的策略可以应⽤于交易。感谢你阅读本⽂
>河北御捷马

本文发布于:2024-09-21 03:27:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/365944.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:策略   回测   投资
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议