AI量化极简DeBug工具PySnooper

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的调试版本:
因为 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文档说明。

发表评论

电子邮件地址不会被公开。 必填项已用*标注