量化交易开发之函数API(四)
以前面策略代码为例进行讲解,如下:
def initialize(context):
run_daily(period, time = 'every_bar')
g.security = '000001.XSHE'
def period(context):
order(g.security, 100)
下面我们讲解一下python中的函数知识:
order(g.security, 100)
一、函数与API
- 函数是封装好的,可重复使用的,用来实现专一功能的代码段。函数能使代码易于维护和交流,提高编写策略的效率。
- 通俗的解释,把一系列代码指令包起来就是一个函数,起个名字就是函数名,之后用这个函数名,就知道这个名字包起来一系列的代码指令了。
- python语言自带了很多内建函数,比如之前见过的print()、type()都是python自带的函数,可以直接用。
- 你也可以自己创建函数自己用,这被叫做自定义函数。比如如下这段框架就是自定义一个名为period的函数,该函数内包了一个投研系统平台自带的函数order():
def period(context):
order(g.security, 100)
order()的准确称为API(application programming interface,应用程序编程接口)。
二、使用一个函数
- 在使用函数的时候,通常需要提供一些参数(也可能不需要),函数根据提供的参数,执行一系列函数设计者设计好的操作,往往也会根据提供的参数返回结果(也可能不返回)。
如下:
# 用法:函数名(参数,参数,...)
# 例子如下:
# 提供了两个参数g.security和100,执行买入g.security中的数据对应的security 100只的操作
order(g.security, 100)
# 提供了一个参数”你好“,执行了打印的操作
print("你好")
# 提供了一个参数”1“给type()参数,type函数执行识别了”1“数据类型的操作,并返回了”1“的数据类型为结果。
print(type("1"))
- 可见。函数的功能多种多样,需要参数、返回的结果亦不尽相同,具体如何使用,要看我们使用的投研平台提供的API说明文档。
接下来我们以order为例将一下,投研平台的说明文档如下,
细说一下order的各个参数
- security标的代码,数据类型要求是字符串。
- amount:交易数量,正数表示买入,负数表示卖出;
- style:none代表marketorder;
- side:'long/short',操作多单还是空单。默认多单,security、found暂不支持开空单;
- pindex:在使用set_subportfolios创建了多个仓位,比如0指定第一个subportfolio,1指定第二个subportfolio,默认为0。
- close_today:平今字段,仅对上海国际能源中心、上海期货交易所、中金所生效。
close_today = true,只平今仓
close_today = false,优先平昨仓
例如:
order('000001.XSHE', 100); #下一个市价单
order('000001.XSHE', 100, MarketOrderStyle()); #下一个市价单,功能同上(科创板市价需要指定保护价)
order('000001.XSHE', 100, LimitOrderStyle(10.0)); #以10块钱下一个限价单
三、自定义函数
python定义函数使用def关键字,一般格式如下:
def 函数名(参数列表):
函数体
函数名即为该函数起的名字,函数体即包在函数中的一系列操作的代码,参数列表即使用函数需要提供的参数,
比如一个根据圆半径求周长的函数如下:
# 根据圆半径r求周长
def circle(r):
p = 3.14
l = 2 * p * r
return l
你应该意识到,函数内部是相对独立的,数据想进来要通过参数传进来,想出去要通过返回值传出去,函数从获得参数到返回值的过程中所产生的数据与变量中没通过返回值传出去的。
在函数运行结束后(即返回值后)都将被计算机释放不再存储。如果想函数间通用某变量可以考虑用之前讲的全局变量。
在返回值的时候可以返回多个变量,例子如下:
# 根据圆半径r求出周长l和面积s
def circle(r, k=1):
p = 3.14
l = 2 * p * r
s = p * r * r
return l, k
四、常用的下单函数
参见使用的投研平台,常用的下单交易函数如下:
- order_target(security,amount),含义是通过买卖,将security仓位调整至一定数量(单位:股)。security是代码,amount是数量。
例子如下:
# 调整平安银行的持股数量至1000股
# 即,如果目前平安银行的持股数量低于1000股就买入,高于就是卖出,不高不低就不动。
order_target("000001.XSHE",1000)
- order_value(security,value),含义是买卖一定价值量(单位:元)security
。security是代码,value是价值量。value为负数时就是代表卖出了。
例子如下:
# 买入10000元的平安银行
# 如果当前security市价是10元,则代表买入1000股
# 如果除不开系统会自动调整成相近的合理数量。卖出时也会。
order_value("000001.XSHE",10000)
# 卖出10000元的平安银行
# 如果当前security市价是100元,则代表卖出100股
order_value("000001.XSHE",-10000)
- order_target_value(security,value),通过买卖,将security
仓位调整至一定价值量(单位:元)。security是代码,value是价值量。
例子如下:
# 调整平安银行的持股价值量至10000元
# 即,如果目前平安银行的持股价值量(按security市价算)低于10000元就买入,高于就是卖出,不高不低就不动。
order_target_value("000001.XSHE",10000)
下面我们跑一下下单API order_value,
五、未完待续
下章将继续介绍context中的数据和条件判断。
欢迎关注知乎:北京不北
获得免费答疑,长期技术交流。