经过前一篇的学习,我们开始系统的讲解策略框架,你需要注册一个Vitu账号以便使用“开始研究”功能
(一)从一个非常简单的交易策略开始
这个交易策略非常简单:
每天买0.1个比特币
如图把代码贴到编辑区,点击“运行"了让这个策略能让计算机执行,首先要使得策略符合“初始化+周期循环”框架,像这样:
初始化:选定要交易的标的为比特币,设置交易所为binance 每天循环:买0.1个比特币
(二)什么是“初始化+周期循环”框架?
为了将投资灵感高效地转化成计算机可执行的交易策略,必须基于一种模式来写,框架就是指这种模式。而vitu的框架包含两个部分即初始化与周期循环:
初始化(def initialize(context))即指策略最开始运行之前要做的事情,比如,准备好要交易的标的
周期循环(def handle_data(context) )即指策略开始运行后,随着时间一周期一周期地流逝时,每个周期要做的事。如例子中,周期为天,周期循环的则是每天买0.1个比特币。
其实“初始化+周期循环”框架是很容易理解的,人每天做交易就是符合这个框架的,初始化就是设定有多少现金,周期循环就是每天或者每分钟查看行情,判断,下单等行为。
(三)如何将策略写成代码?
我们来学习一下“初始化+周期循环”框架代码的写法:
def initialize(context)
这里是用来写初始化代码的地方,例子中就是选定要交易的标的为比特币
def handle_data(context)
这里是用来写周期循环代码的地方,例子中就是买0.1个比特币
def,context是什么意思?
其实是在调用vitu提供好的函数,不理解的话先记住,后面的学习内容会让你理解
代码应该往哪里写?
打开Vitu.AI后,通过“开始研究”->"新建“->"新建策略":

进入策略编辑页,右侧就是策略代码编辑区域,初始会默认给你提供代码模板,全删除后写入我们的代码就好了。

完整的例子该怎么写呢?
首先设置账户,我们设置交易所为binance,虚拟账户名为myaccount,初始资金为10000的USDT
from vitu import ai
ai.create_account(name='myaccount',
exchange='binance',
account_type='digital.spot',
position_base=[{'asset': 'USDT', 'qty': 10000}])
选定要交易的标的为比特币,并且获得之前初始化的账户:
context.security = 'BTC/USDT.binance'
context.myaccount = context.get_account('myaccount')
买0.1个比特币,使用刚才获得的账户:
current_price = context.get_price(context.security)
context.myaccount.buy(context.security, current_price, 0.1)
把完整的代码补上到“初始化+周期循环”框架里后:
from vitu import ai
ai.create_account(name='myaccount',
exchange='binance',
account_type='digital.spot',
position_base=[{'asset': 'USDT', 'qty': 10000}])
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)
那么现在这些代码就可以运行了吗?
等等,我们再配置一下策略的参数,例如基准,频率,回测起始时间,手续费等,如下:
universe = ai.create_universe(['BTC/USDT.binance'])
my_strategy = ai.create_strategy(initialize,handle_data,
universe=universe,
benchmark='csi5',
freq='d',
refresh_rate=1)
ai.backtest(strategy=my_strategy,
start='2018-12-10',
end='2019-08-10',
commission={'taker': 0.0002, 'maker': 0.0002} )
OK! 大功告成!完成代码如下:
from vitu import ai
ai.create_account(name='myaccount',
exchange='binance',
account_type='digital.spot',
position_base=[{'asset': 'USDT', 'qty': 10000}])
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)
universe = ai.create_universe(['BTC/USDT.binance'])
my_strategy = ai.create_strategy(initialize,handle_data,
universe=universe,
benchmark='csi5',
freq='d',
refresh_rate=1)
ai.backtest(strategy=my_strategy,
start='2018-12-10',
end='2019-08-10',
commission={'taker': 0.0002, 'maker': 0.0002} )
如图把代码贴到编辑区,点击“运行"

运行完成后就可以看到结果了

可以看到,如果你2018-12-10有初始资金10000美元,每个交易日尝试买入0.1个比特币,到2019-08-10,你的收益曲线将如图中黄线般增长,你的资金会是31982美元,图中灰线是基准收益(默认是csi5,代表市值前五币种的增长水平)
接下来,点击“回测详情”,可以看到更为详细的结果,包括下单记录,持仓记录等

回测,回测详情都是什么意思?
像刚刚那样,用一段时间内的历史的真实行情数据,来验证一个确定的交易策略在这段时间表现如何,这个过程叫回测。
回测详情会告诉你策略在这段时间表现的具体情况,比如收益率、年化收益率、最大回撤、夏普比率等指标,而且一般也会包括下单记录、持仓记录等。
周期循环具体是从什么时候开始的呢?
如果策略频率为天,是每个交易日UTC的零点(也即是北京时间早上8:00点)开始生效,所以例子中是每个交易日8:00开市循环就开始,一天一次地循环执行买入比特币的操作。
如果策略频率为分钟,是每个分钟开始时执行,所以例子中的买入比特币的操作是每个交易日从8:00:00开始,然后8:01:00,如此一分钟一次地循环执行的。
今天先介绍到这里。下一次,我们来讲下单,函数和API。
来源:oschina
链接:https://my.oschina.net/u/4298434/blog/3421014