我觉得一个好的课程就要像一个好的游戏一样,必须在半小时之内让人上手。本文讲的是在平台做“回测”,即自己制定一个策略,然后用真实的历史数据跑一下,看看自己能不能亏完1个亿。
首先,我们需要进入ricequant注册账号。
再是,进入平台.(有些朋友觉得平台的数据不好,策略不安全,但是,这不是新手应该关心的。)
新建策略
简单设置,A股的交易频率是1天
策略建立完成后,平台会自动给出注释基本完备的代码,本文为了介绍简洁又删了一些东西
#程序中的context类似于self,可以使用context.XXX定义全局变量
#init只在程序启动的时候运行一次
def init(context):
#在每天的交易前,都需要运行一次before_trading
def before_trading(context):
#交易算法与交易的确认要写在handle_bar里面
def handle_bar(context, bar_dict):
#在每天交易结束的时候会运行一次
def after_trading(context):
好了,我们现在使用追涨杀跌的策略买茅台股票,先上代码
def init(context):
# 定义s1为茅台股票代码,上交所股票代码后缀为 XSHG
# 按Ctrl+I,平台会有补全股票代码的功能
context.s1 = "600519.XSHG"
def before_trading(context):
#获取昨天和前天的茅台封盘价
context.close=history_bars(context.s1,2,'1d','close')
def handle_bar(context, bar_dict):
# 昨天涨了(昨天比前天的市值高),今天我就花99%的钱买入
# order_percent是按可用资金的比例买/卖指定股票
# 买的时候比例不能是100%,否则会因为手续费不够导致交易失败
if context.close[1]>context.close[0]:
order_percent(context.s1,0.99)
# 昨天跌了(昨天比前天的市值低),今天我就全卖
else:
order_percent(context.s1,-1)
def after_trading(context):
pass
涉及的API有:
history_bars(order_book_id, bar_count, frequency, fields=None, skip_suspended=True, include_now=False) 获取指定合约的历史行情
order_percent(id_or_ins, percent, style=OrderType) 发送一个等于目前投资组合价值(市场价值和目前现金的总和)一定百分比的买/卖单,正数代表买,负数代表卖(暂不支持卖空)。
程序写完后,我们设置一下时间,就可以进行编译和运行回测了,虽然编译的时候可以看到回测曲线了,但编译主要是验证程序,回测 能得到更多的统计值: