交易入门【零基础入门教程】(三)

天大地大妈咪最大 提交于 2020-04-23 10:33:57

经过前一篇的学习,我们开始系统的讲解策略框架,你需要注册一个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。


原文链接

Vitu.ai - 数据从不说慌 - 区块链的世界也不例外

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!