十分钟学会写量化策略 您所在的位置:网站首页 量化策略模型稳定性分析 十分钟学会写量化策略

十分钟学会写量化策略

2023-09-10 18:37| 来源: 网络整理| 查看: 265

本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门、创建自己的量化策略代码。

难易度:入门级

那么以下我们就先从 [单股票均线策略] 的代码实现及进行日级别回测讲起吧。

1 确定框架:

[单股票均线策略] 的主要策略框架: 5 日均线高于 30 天均线,则全仓买入股票 5 日均线低于 30 天均线,则卖出所持股票

从我们日常交易的角度,一般交易者的行为可以拆分以下两部分:

1 选择标的(初始化):

在交易之前,我们通常会先选定要交易的股票池或者单个股票

2 交易(每天盯盘)

我们会观察该股票的五日均线和 30 日均线,并进行比较 如果该股票的五日均线在 30 天均线以上,则全仓买入股票 如果该股票的五日均线在 30 天均线以下,则全仓卖出(空仓)

那么程序中,我们是怎么做的呢?

先看看 Ricequant 平台中对应的代码框架会是怎么样的吧:

def init(context): #程序的初始化,预设股票池、设置参数和变量。 只运行一次

def handle(context, bar_dict): #从回测的开始日期至结束日期,根据选择的频率(日、分钟)循环运行

对照策略思路 及 Ricequant 代码框架,你会发现我们可以很轻松地把 两者结合起来

以上框架也是 Ricequant 平台的最基本也最主要的框架,也就是

初始化循环 - 根据选择的频率(日、分钟)循环运行 2 初始化:

选择标的:本策略的交易股票设定为 300059 ”东方财富“。

def init(context): context.stock = “300059.XSHE” # 存入目标股票 [东方财富 ]

延伸阅读:

1 在 init 中实现程序的初始化,例如存入目标股票池,设置滑点、基准等参数以及设置其它变量。 context 是一个全局的容器,你可以通过它设置任何全局变量并初始化:如 context.stock 将会在后面代码所被调用到。

2 代码中 # 代表注释,作为代码说明,执行时会被跳过而不为程序所运行。

3 如何填写股票代码:你会发现策略代码中 股票代码后带有后缀,那么它们分别代表什么呢?

后缀为

XSHE 代表在深交所上市交易的股票XSHG 在上交所上市交易的股票

例子:

300059.XSHE 为深交所上市的东方财富600000.XSHG 为上交所上市的浦发银行

我们的代码编辑器还提供了非常便利的股票代码自动寻找和补全功能,在 Windows 中你可以用 ctrl+i , Mac 系统你可以用 cmd+i 激活证券代码自动补全功能。如下图:

3 获取均价:

我们分别获取该股票 5 日和 30 日的均价

# 用法:变量 = bar_dict[股票代码].mavg(天数, frequency=‘day’) # 获取近五日股票收盘价均价,命名为 fast fast = bar_dict[context.stock].mavg(5, frequency=‘day’) # 同上,获取近二十日的收盘价均价,命名为 slow : slow = bar_dict[context.stock].mavg(30, frequency=‘day’) 4 判断买卖条件:

获得均价数据之后,我们就可以进行一个判断决定是否买卖了:

if fast>slow: # 若快线在慢线之上则用所有现金买入该股票 #买入操作 elif fastslow: #判定买入条件         order_value(context.stock, cash) #买入目标股票     elif fastslow: order_value(context.stock, cash) elif fast < slow: order_target_percent(context.stock, 0) # 设置 fired 等于 1 ,表示执行完毕 context.fired = 1

可以看到这里改动并不多,这里需要介绍到框架中常用到的函数 before_trading :

# 每日开盘前运行一次,可以进行选股、设置参数等行为 def before_trading(context):

我们在 before_trading 中设置一个变量命名为 fired ,赋值为 0

# 设定并重置 context.fired 的值为 0 context.fired = 0

由于 before_trading 是每天开盘前运行一次,所以 context.fired 会被每天重置为 0。在 handle 函数中,我们加入了判断,如 context.fired 为 0 ,则继续执行下面的代码,否则本次循环结束。

# 判定今日是否有下过单,若未下单则进行下列代码的操作 if (context.fired == 0):

并在执行完判断和买卖操作之后,设定 context.fired 的值等于 1 ,使得当日余下的分钟循环操作均被跳过。

# 设置 fired 等于 1 ,表示今天已下过单 context.fired = 1

在完成以上代码后,我们开始进行分钟回测吧: 在策略编辑页面右上方,选择从 2015 年 1 月 4 日至 2016 年 10 月 4 日,用资金 100 万元进行分钟回测吧,更新策略后点击运行回测 。

8 模拟交易:

模拟交易通过实时的分钟切片数据进行撮合,也就是 handle 函数会每分钟被触发一次循环。在开启你的策略的模拟交易之前,你必须要对它进行一次分钟回测,才可以开启模拟交易。 在上面分钟回测之后,你可以在策略回测详情页面点击 开启模拟交易。

9 开启微信通知,接收交易信号:

点击导航栏中的 [我的交易] ,可以在 [模拟交易] 一栏看到创建的模拟交易,如下图:

点击右边的微信通知开关,将 OFF 调至 ON ,并按照指示扫描二维码,绑定微信,就能通过微信接收交易信号了。

当该策略进行买卖操作,你的微信会收到类似下图的信号提醒。微信推送的延迟非常小,使得你能根据信号进行及时的下单操作。

是不是很轻松,数行代码就可以把你的投资策略变成代码,大家都来试试吧!

收益图风险指标源代码运行信息克隆策略 +202股票策略 回测收益 回测年化收益 基准收益 Alpha Beta Sharpe 最大回撤 58.224% 30.180% -8.810% 0.3527 0.3824 0.7160 45.669% Created with Highcharts 7.1.0 累计收益


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有