zwPython.com研习社

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1374|回复: 0

AI量化极简DeBug工具PySnooper

[复制链接]

233

主题

240

帖子

5501

积分

超级版主

Rank: 8Rank: 8

积分
5501
发表于 2020-8-5 11:00:40 | 显示全部楼层 |阅读模式
AI量化极简DeBug工具PySnooper 2019年5月11日  zw
AI量化极简DeBug工具PySnooper

通常,程序员都喜欢用 print 函数,调试,在关键部分打印某个或某组变量的值、形状、类型等信息。
这是因为,debug工具的调用,往往过于复杂,繁琐。
相比之下,极简DeBug工具PySnooper,让你能快速地获得这些信息,且相比之下它不需要细致地写 print 函数,只需要向感兴趣的函数增加一个装饰器就行了。
我们会得到该函数的详细 log,包含哪行代码能运行、什么时候运行以及本地变量变化的确切时间。
大部分从事大数据、金融量化的一线人员,都不是专业程序员,这类工具,可以节约大量的时间成本。

与函数调用图工具 pycallgraph类似 ,PySnooper 也属于内置式的调试工具。



PySnooper,属于少见的内置式debug工具,使用非常简单:
通常只需两个步骤:
#1,import导入 PySnoope 模块库
import pysnooper

#2,定义函数,并在函数名称前加上修饰符号:
@pysnooper.snoop()
def fun001(syb):




然后直接调用fun001函数即可。
以下案例,是根据Top极宽《backtrader课件-F系列》,第一个案例btr001,改写,PySnooper的调试版本:
课件目录参见:http://www.topquant.vip/btr-f2019.htm

因为 pysnooper 是基于函数的debug工具,使用我们把btr001 的主流程代码,改写为一个函数btr001.
案例核心代码如下:
#
import pysnooper
#----------------------
@pysnooper.snoop()
def btr001(syb):
#1.1
rs0='data/' #rs0='/TQData/'
rsyb0,rbas0=rs0+'stk/',rs0+'inx/'
syblst=[syb]
#baslst=['000001'] #上证
tim0str,tim9str='2018-01-01','2018-12-31'
#1.2
qx=tq.tq_init('f01',tim0str=tim0str,tim9str=tim9str)
#
tq.pools_get4flst(qx,rsyb0,syblst,fgInx=False,fgXed=True)
#tq.pools_get4flst(qx,rbas0,baslst,fgInx=True,fgXed=True)
#
#---------
#2
qx=tq.bt_set(qx,tq.log_nor)
#
#3
qx.cb.addstrategy(tqedu.ma)
#
qx.bt_results= qx.cb.run()
#
#4.1
ds=tq.bt_anz(qx)
print('\n@ds\n',ds)
#4.2
#qx.cb.plot()
#----------------------
#
syb='002046'
#
btr001(syb)
#------------
print('\n@zok')


以下是运行后,对应debug调试信息:
Starting var:.. syb = '002046'
08:17:55.277091 call 35 def btr001(syb):
08:17:55.279092 line 38 rs0='data/' #rs0='/TQData/'
New var:....... rs0 = 'data/'
08:17:55.281096 line 39 rsyb0,rbas0=rs0+'stk/',rs0+'inx/'
New var:....... rbas0 = 'data/inx/'
New var:....... rsyb0 = 'data/stk/'
08:17:55.284096 line 40 syblst=[syb]
New var:....... syblst = ['002046']
08:17:55.286097 line 42 tim0str,tim9str='2018-01-01','2018-12-31'
New var:....... tim0str = '2018-01-01'
New var:....... tim9str = '2018-12-31'
08:17:55.289100 line 45 qx=tq.tq_init('f01',tim0str=tim0str,tim9str=tim9str)
New var:....... qx = <topquant2019.TQ_bar object at 0x00000153FB8BFC88>
08:17:55.292102 line 47 tq.pools_get4flst(qx,rsyb0,syblst,fgInx=False,fgXed=True)
[08:17:55] @pools_get4flst:data/stk/,['002046']
08:17:55.324124 line 52 qx=tq.bt_set(qx,tq.log_nor)
08:17:55.326127 line 55 qx.cb.addstrategy(tqedu.ma)
08:17:55.327127 line 57 qx.bt_results= qx.cb.run()
2018-12-28, (策略参数 Period=15) ,最终资产总值: 99797.01,tim:0.19 s
08:17:55.608325 line 60 ds=tq.bt_anz(qx)


更多资料,请参看pysnooper文档说明。


【极宽QQ群】
群号:1057170501 ,zwPython.com学习QQ群,面向py初学者和大众小白用户。
群号:124134140,TOP极宽金融量化,三千人超大QQ群,面向专业金融实盘用户。
群号:699266891,TFB极宽足球大数据QQ群
群号:790548107,FASTAI智能量化QQ群。
【微信公众号】
请大家关注TOP极宽量化公众号,大量原创Python量化技术
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|zwPython.com研习社

GMT+8, 2022-5-25 04:54 , Processed in 0.021940 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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