准备工作
要使用 PythonLAB 回测功能,我们需要一个 QuantFair 模拟帐号 (opens in a new tab),如果没有的话可以去注册,否则无法使用回测功能。
有了 QuantFair 模拟帐号还不够,我们还需要去个人中心 (opens in a new tab)申请密钥。申请完成后会得到 AccessKey
和 AccessSecret
,后面我们会把密钥配置在回测程序中。
最后,在数据服务一栏中,申请免费试用即可。
注意事项
-
只支持新版 PythonGO
-
回测使用的历史数据是 Tick 数据
-
回测撮合模式使用简单的见价成交
-
回测结果仅供参考,不代表实盘结果
-
无法回测标准套利合约
-
没有线图窗口
-
如果策略依赖于定时器,则无法回测
编写代码
写代码之前需要使用编辑器打开正确的工作目录,具体操作方法可以参考教程 - 第一个策略 - 工作目录。
入口文件
我们需要创建回测入口文件 app.py
,该文件必须位于 pyStrategy
目录下,与 pythongo
目录同级,如下所示:
- app.py
注意:入口文件可以是任意文件名
导入
首先,我们需要导入我们自己写的策略类,以及参数映射模型,后续会把这两个类传递给运行回测
from demo.DemoDMA import DemoDMA, Params
然后我们再导入回测运行主函数 run
,和回测配置模型 Config
from pythongo.backtesting.engine import run
from pythongo.backtesting.models import Config
设置策略参数
除了导入代码以外,其余所有的代码,都必须写在 if __name == "__main__"
下
from demo.DemoDMA import DemoDMA, Params
from pythongo.backtesting.engine import run
from pythongo.backtesting.models import Config
if __name__ == "__main__":
params = Params(
exchange="SHFE",
instrument_id="ag2412",
fast_period=5,
slow_period=20
)
...
根据该参数映射模型定义的参数,我们只传入四个参数,其余参数使用默认值。
在自己编写代码的时候,实例参数请按照实际情况填写。
这一步相当于在无限易 PythonGO 窗口中的实例参数栏填写对应的参数值
设置回测参数
策略的参数设置好之后,我们需要设置回测的参数,其中必填的参数是 access_key
和 access_secret
,这两个参数,就是我们前面提到的申请后的密钥,请规范填写
from demo.DemoDMA import DemoDMA, Params
from pythongo.backtesting.engine import run
from pythongo.backtesting.models import Config
if __name__ == "__main__":
...
backtesting_config = Config(
access_key="",
access_secret=""
)
...
其余参数(例如手续费)请查看回测 - pythongo.backtesting - models,如有需要可自行设置。
设置运行参数
运行参数告诉回测程序运行所需的参数
-
config
传入上面定义的回测参数backtesting_config
-
策略类
strategy_cls
需要传入实例化后的类,也就是带上括号 -
strategy_params
传入上面定义的策略参数 -
start_date
和end_date
代表回测数据开始播放的日期和结束日期(不包含结束日期) -
initial_capital
设置初始资金,默认是 100 万
具体参数请查看回测 - pythongo.backtesting - engine
from demo.DemoDMA import DemoDMA, Params
from pythongo.backtesting.engine import run
from pythongo.backtesting.models import Config
if __name__ == "__main__":
...
run(
config=backtesting_config,
strategy_cls=DemoDMA(),
strategy_params=params,
start_date="2024-08-01",
end_date="2024-08-05",
initial_capital=100_0000
)
完整代码
回测上期所的 ag2408
合约,快均线周期 5
,慢均线周期 20
,Tick 数据从 2024-08-01
开始,到 2024-08-05
结束(不包含结束日期),初始资金 100 万。
from demo.DemoDMA import DemoDMA, Params
from pythongo.backtesting.engine import run
from pythongo.backtesting.models import Config
if __name__ == "__main__":
params = Params(
exchange="SHFE",
instrument_id="ag2408",
fast_period=5,
slow_period=20
)
backtesting_config = Config(
access_key="",
access_secret=""
)
run(
config=backtesting_config,
strategy_cls=DemoDMA(),
strategy_params=params,
start_date="2024-08-01",
end_date="2024-08-05",
initial_capital=100_0000
)
运行
回测的运行,实际上就和正常的 Python 脚本一样了,直接运行 .py
文件即可,这里简单写一下运行 Python 文件的两种方法,任选其一:
-
在 Visual Studio Code 编辑器中,确保当前正在编辑
app.py
,如果安装了 Python 的扩展(如没有,请查看教程 - 第一个策略 - 准备工作),直接右键代码区域,在右键菜单中找到Run Python
或者运行 Python
,在二级菜单中再点击Run Python File in Terminal
或者在终端中运行 Python 文件
,即可开始回测。 -
在命令行中切换到 PythonGO 的工作目录,执行
python app.py
即可开始回测,app.py
是回测入口文件。