Python 函数在量化策略中的运用

2017-11-24 15:06:35 +08:00
 a499492580

原创 2017-11-24 mindgo MindGo 量化平台

关注 MindGo 量化平台微信公众号,获取量化投资教材视频

读懂量化策略的运行机制,只需要看懂这四个 Python 函数!

一般而言,量化策略的运行机制:1.账户➔2.时间➔3.数据获取及分析➔.条件判断并下单交易。

那么每一点的核心分别是什么?搞懂这四段话!(配四个案例)

1.账户

量化策略运行的第一步:账户初始化。它就如同是开户操作,任何人想要进入股市交易,他必须先到证券公司去开户,如果没有资金账户,是无法交易股票的。那么量化策略主要通过函数来实现账户初始化,也就是完成开户,并只需要一次即可。

初始化函数:def initialize(account):,该函数只有唯一一个参数 account,也就是说,量化策略在初始化函数中需要对账户信息初始化,账户信息包括账户持仓、账户可用资金、账户使用资金等等,除此之外,account 作为对象还可能存放变量,但一旦初始化后,都会全部清空,回归到最开始的时候。

在简单双线策略中,其在 account 对象中设置了 security 变量,也就是贵州茅台的股票代码。 #初始化账户
def initialize(account):
#设置要交易的证券(600519.SH 贵州茅台)
account.security = '600519.SH'

2.时间 量化策略运行的第二步:时间。中国的上海证券交易所和深圳证券交易所都是有对应的交易时间规定的,那么量化策略在运行过程中也必须尊重这个时间规定,比如:集合竞价时间为 9 点 15 分至 9 点 25 分、股票竞价交易时间为 9 点 30 分至 11 点 30 分和 13 点至 15 点。

量化策略通过函数来实现准时运行,最常见的是 def handle_data(account,data):函数,该函数可以设置两种模式:日级和分钟级。日级模式下,该函数会定时在每日 9 点 30 分准时运行一次。分钟级模式下,该函数会在竞价交易时间内的每个分钟定时运行一次,也就是一个交易日时长四小时,运行 240 次。 #设置买卖条件,每个交易频率(日 /分钟 /tick )调用一次
def handle_data(account,data):

在简单双线策略中,整个策略都是在 def handle_data 函数中运行,函数参数为 account 和 data,其中 account 是账户信息对象,而 data 是储存数据的对象。

3.据获取及分析

量化策略运行的第三步:数据获取及分析。行情、财务等等数据都是经过人工清洗整理后储存下来的,具有标准的格式,主要就是为了用户能够方便、统一的去获取这些数据,通过一系列的获取数据函数,用户可以获取到策略所需要的数据,然后进行数据分析,作出买卖决定。

数据获取函数与初始化函数和时间函数不同,因为数据获取函数是将储存的数据提取,因此其一般的格式:函数名(参数)。

简单双均线策略中:close = data.attribute_history(account.security, ['close'], 20, '1d'),其中就是运用 data.attribute_history()这个获取数据的函数来获取相应数据,用户只需要填写 4 个关键参数,分别是获取数据的标的、数据类型、数据长度、数据步长。成功获取到数据后,赋值到 close 上,进行数据分析,也就是前一章节的 Python 数学函数做简单数据分析。

#设置买卖条件,每个交易频率(日 /分钟 /tick )调用一次
def handle_data(account,data):
#获取证券过去 20 日的收盘价数据
close = data.attribute_history(account.security, ['close'], 20, '1d') #计算五日均线价格
MA5 = close.mean().values()
#计算二十日均线价格
MA20 = close.values.mean()
#如果五日均线大于二十日均线

4.条件判断并下单交易

量化策略运行的第四步:条件判断并下单交易。量化策略在完成对数据分析后,往往是需要进行判断,然后下单交易。就如同简单双均线中,策略获取到数据,然后计算 5 日、20 日均线,判断均线金叉则买入,死叉则卖出。

下单交易往往通过下单函数实现,常用的下单函数有根据资金下单、根据目标股数下单。其中 order_value()函数是根据资金下单交易的函数,内置两个参数,交易标的和交易金额。order_target()函数是根据目标股数下单,内置两个参数,交易标的和目标股数。

在简单双均线策略中,运用了这两个函数进行下单交易。 #如果五日均线大于二十日均线
if MA5 > MA20:
#使用所有现金买入证券
order_value(account.security,account.cash)
#如果五日均线小于二十日均线,并且目前有头寸
if MA5 < MA20 and account.positions_value > 0:
#卖出所有证券
order_target(account.security,0)

1888 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409235

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX