【金字塔Python量化学习笔记】:API基本方法

it2023-02-07  45

一、init(必须实现)

init(context)

context对象是全文对象,我也不懂是啥意思,以前学掘金量化也有这个,大概是连接上下文通用的意思吧。

用法是context.xx,整个函数都可以调用这个东西,可以是对象,方法,属性。

 按金字塔的话说这个是各种初始化配置,方便算法中所有方法之间传递。

注意事项:

1、在回测模式backtest和实盘模式paper_trading中回测和实时交易都只会在启动时触发一次,仅一次!

2、pel_call被pel公式调用时,在公式初次加载时被触发一次。

例子:

def init(context):

      context.cash.limit = 5000

你可以定义各种初始对象,属性,方法。

反正记住这个基本方法是初始化用的就行。

 

二、handle_bar(必须实现)

bar数据更新,就会自动触发这个方法的调用。

策略的具体逻辑就在这个方法内实现,在实时交易中,该函数在交易时间内会更具选择运行模式被触发。

注意事项:

尽量不要在这个方法底下放入查询类函数,因为可能会不断被触发,我的理解是有bar更新就会触发。

api说查询类逻辑尽量在init()中执行

总的来说,把策略整体比作文章,那这个方法底下写的就是主段落,写的是策略本身逻辑。

必须实现的基本方法就两个,一个是init(context),另一个就是handle_bar(context)

其他的方法都可以选择实现,可选。

 

三、before_trading(选择实现)

before_trading(context)

这个函数在基准合约开盘前30分钟会被调用,不能在这个函数中发送订单。

注意事项:

这个函数的触发时间取决于用户当前基准合约的交易时间。只有在交易状态下有效,如backtest和paper_trading下。

我不太懂基准合约是指什么,可能是要交易的那个合约。后面再看吧。

这个方法,可以在开盘前调用,但是不能发订单,也就是不能用交易指令,应该可以用来算一些东西吧。我也不懂

啊!

例子:

def before_trading(context):

      #获取平安银行EPS财务字段数据

      detaval = fin_indicator('SZ000001','EPS',1,0,0)

      #将查询的财务数据保存到context对象中

      context.eps = dataval

看了这个例子,大概知道,可以用这个函数,在开盘前调取一些数据,做一些初始化,或者属性更新。

原来context.xx这个函数,在全文都是可以用的,无论什么基本方法下,但是应该有先后顺序吧。

后面再看。

 

四、after_trading(选择实现)

after_trading(context)

这个函数,不用看就知道了吧!

意思是在交易后实现。字面意思哈哈哈,怎么用还没看,现在我们来看看。

这个基本方法呢,每天在基准合约收盘后5分钟被调用。那就是说3点收盘,15:05被触发。

同样的,不能在这个函数中发送订单,也就是不能用交易函数。

它说我可以在这个方法下进行当日收盘后的一些计算。也只能在回测backtest和paper_trading下能用。

这个函数下没有例子。一脸懵逼。

大概知道就行了吧。这个函数当日只会被调动一次。我不理解,早盘收盘算不算呢?再看吧。

 

五、order_status(选择实现)

order_status(context,order)

这个函数,除了context外,还有一个order,第一次见哦,啥意思呢。

它说当委托下单,成交,撤单等与下单有关动作时,该方法就会被调用。仅在回测backtest和paper_trading下可以。

context对象我们知道了,那么order对象是什么呢。这里说用于捕获处理交易过程中产生的各种下单动作,根据捕获的信息,进行相应的处理。

不懂,我们先看看例子。

def order_status(context,order):

       #判断柜台汇报信息,是否为全部成交。

       if order.status == 'filler':

           pring('全部成交')

原来这个是成交状态,下单状态的意思哦。

这个order对象有很多属性,这里不列出来,我看了一下。

order.status属性有7个:

submitted  订单状态,已报单但是未成交

tradeing  已成交(ps:妈的怎么这样写单词呢,直接加个ing,秀啊!)

filled  全部成交

cancelled  已撤单

inactive  无效单(可能是不在开盘时间,资金不足之类的导致无效)

connected  已连接(应该是连接柜台)

disconnected  连接断开

 

六、order_action(选择实现)

order_action(context,type,account,datas)

第二次看到属性方法超过一个的了。

注意事项:

这个函数只在融资融券,新股申购操作刷新动作时才会触发,一般账户无效。

也就是股票账户才有的。

type是int类型,这里返回的是数字

type  = 1 表示科荣券品种查询完成

type = 2 表示当日可申购新股查询完成

type = 3 表示中签查询完成

account是str,输入的是账户名

datas是int,type=1时是可融券品种数量,2是新股数量,3是中签新股数量

这个没有例子,不懂怎么用。

 

七、exit(选择实现)

exit(context)

用户可以在这个函数中处理一些退出后需要做的事情,比如记录一些变量到硬盘等。

注意事项:

1、backtest回测模式下,当评测结束时,这个函数被调用

2、paper_trading下,停止策略运行是,该函数被调用

3、pel_call被pel公式调用时,在pel公式关闭时被调用

我看了一个策略,这个函数的作用可以画图,在这个方法下,画曲线图啊,分布图之类的。高级哦!

def exit(context):     test_report_none()     #读取数据文件     #data = pd.read_csv(r'C:\a\201808.csv')     data = context.data     data.drop(data.columns[0], axis=1,inplace=True)     plt.figure(figsize=(5,5))     plt.imshow(data.corr(), cmap=plt.cm.hot, vmin=0, vmax=1)     plt.xticks(np.arange(19),data.columns,rotation=60)     plt.yticks(np.arange(19),data.columns)     plt.colorbar()     plt.show()

我就不懂,反正用法是那样。

 

八、parameter(选择实现)

parameter()

最后一个基本方法了。

这个是参数定义区,这里定义的参数,可以直接在context对象中获取。(选择实现)

注意事项:

1、参数定义区定义的变量,可以用于策略运行中动态调整参数。(不懂)

2、必须使用iput_par函数,定义变量,并且此函数仅支持在parameter()方法内使用。

3、parameter方法仅对backtest回测和paper_trading模式有效。

第一点应该是说,可以在handle_bar之类的方法中修改这个参数区,或者获取参数区的参数。

例子:

def parameter():

      #使用input_par函数定义变量'myvalues1',默认值5,最小值1,最大值100,步长1

      input_par("myvalues1",5,1,20,1)   #玩我呢,这不是最大值20吗。它上面应该写错了

      # 使用input_par函数定义变量"myvalues2",默认值10,最小值1,最大值100,步长1。

       input_par("myvalues2",10,1,20,1)

……

def handle_bar(context):

       print(context.myvalues1+context.myvalues2)

噢,原来是可以在其他方法下调用呢,实际上就是设置参数的基本方法,牛哦。

应该在其他方法下也可以修改这些参数的。

 

九、模式说明

金字塔中的Python策略分为三类:Python策略、Python引用、Python模块

Python策略:Python运行策略(支持paper_trading,backtest)

Python引用:编写可用于PEL调用Python的模块(支持pel_call,仅此模式支持pel_history,log_debug_info,settimer,killltimer这四个函数的调用,其他的API函数均不可以)

Python模块:供Python调用的用户模块或供VBA调用的模块

不太懂,反正用第一个就行了。

 

 

 

 

我看到很多策略范例中都有自己写的函数,自己定义的函数,可是我不会写啊,Python没学完,一直停留在类似于学英语abandon的状态,就很离谱!

不打算又从头学了,因为大概率又是abandon。

就这样一边看一边学吧,学到不会的,什么迭代器,什么什么器之类的再去翻廖雪峰看看算了。

 

最新回复(0)