我们继续上一篇的策略代码进行详解,本篇将介绍下单,函数和API。
def initialize(context):
context.security = 'BTC/USDT.binance'
context.myaccount = context.get_account('myaccount')
def handle_data(context):
current_price = context.get_price(context.security)
context.myaccount.buy(context.security, current_price, 0.1)
(一)函数与API
函数是封装好的,可重复使用的,用来实现某一特定功能的代码段。函数使得代码易于维护与交流,提高编写策略的效率。
通俗的理解就是把一系列代码指令包起来就是一个函数,起个名字就是函数名,之后用这个函数名,就可以执行被包起来的一系列代码指令了。
Python语言自带了许多内建函数,比如print(),可以直接使用。你也可以创建自己的函数,这叫自定义函数。例如如下就是定义了一个自定义的名叫handle_data的函数,在这个函数里调用了vitu自带的函数get_price()和buy()
def handle_data(context):
current_price = context.get_price(context.security)
context.myaccount.buy(context.security, current_price, 0.1)
get_price()和buy()的准确称谓其实是API(application programming interface,应用程序编程接口),你可以理解为vitu基于python封装成的函数,你可以在“帮助”中看到其他的API。
(二)如何使用一个函数
在使用函数的时候,通常需要提供一些参数(也有可能不需要),函数根据参数执行一系列的函数作者写好的操作,也会根据提供的参数返回结果
提供了一个参数context.security,执行了返回当前价格的操作
current_price = context.get_price(context.security)
提供了三个参数context.security,current_price和0.1,执行了以当前价格买入0.1个context.security的操作
context.myaccount.buy(context.security, current_price, 0.1)
提供了一个参数"你好",执行了打印"你好"的操作
print("你好")
函数的功能多种多样,需要参数和返回的结果都不同,所以具体怎么用要看函数提供者的说明文档,vitu的API文档都在“帮助”里,接下来以buy为例讲一下文档怎么看
在“帮助”->“策略框架”->“下单函数用法”,找到buy函数的说明,如下:
可以看到buy函数可以接受的参数有3个,分别是symbol,price,qty,这三个参数的名字和含义是函数作者设计的。你在使用的时候,将按照顺序以此对应这三个参数,如果不按顺序则需要提供参数, 例如:
context.myaccount.buy(qty=0.1, symbol=context.security, price=current_price)
buy的各个参数说明
- symbol:标的代码,数据类型要求是字符串,在vitu里的规则为Base Currency/Quote Currency.Exchange,例如“BTC/USDT.binance”,一般Base/Quote Currency用大写,交易所为小写
- price:限价单需要提供的当前价格
- qty:交易数量
(三)自定义函数
Python定义函数使用def关键字,一般格式:
def 函数名称(参数列表):
函数体
例如, 我们设计一个计算收益率的函数,函数名称为ret,提供的参数是price和cost,返回收益率
def ret(price,cost):
return price/cost-1
你应该意识到,函数内部是相对独立的,数据想进来要通过参数传进来,想出去要通过返回值传出去,函数从获得参数到返回值的过程中所产生的数据与变量中没通过返回值传出去的,在函数运行结束后(即返回值后)都将被计算机释放不再存储。如果想函数间通用某变量可以考虑用之前讲的全局变量放到context里,还记得context.security的例子吗?
常用的下单函数
vitu里常用的下单函数有四个,我们分别介绍一下基本用法
buy
函数释义: 通过一个账户在指定价格买入指定数量的指定数字资产。
函数用法:
#先配置账户
context.account1 = context.get_account('account1')
#再用该账户买入
context.account1.buy(symbol,price,qty)
sell
函数释义: 通过一个账户在指定价格卖出指定数量的指定数字资产。
函数用法:
#先配置账户
context.account1 = context.get_account('account1')
#再用该账户卖出
context.account1.sell(symbol,price,qty)
buy_pct
函数释义: 通过一个账户在指定价格买入指定百分比的指定数字资产。
函数用法:
#先配置账户
context.account1 = context.get_account('account1')
#再用该账户买入
context.account1.buy_pct(symbol,price,pct)
sell_pct
函数释义: 通过一个账户在指定价格卖出指定百分比的指定数字资产。
函数用法:
#先配置账户
context.account1 = context.get_account('account1')
#再用该账户卖出
context.account1.sell_pct(symbol,price,pct)