来到优矿,您想要的所有金融研究都可在这里实现~
入门玩家:提供社区交流、python、quartz框架,轻松实现策略回测
进阶玩家:提供MFhandler、模拟交易(实盘交易),打通投资上下游
高级玩家:使用DataAPI,进行传统券商研究、灵感实现平台、知识共享平台。
本文主要介绍:
社区资源新手入门概览
如何在开始研究中用notebook进行数据研究
如何写策略进行回测、模拟交易
优矿社区旨在为广大量化爱好者提供交流分享平台。社区中的量化研究内容都可以一键克隆至研究环境获得源码,也可以从研究环境一键分享激荡思想。
您可以通过新手专栏
中的分享文档,快速的了解量化和优矿的信息:
量化分析师的Python入门,看看日记前6天就能轻松搞定:
量化分析师日记后续几篇,介绍了进阶研究方法,比如:
除此之外,社区上还有很多的牛人牛贴,分享了各种数据研究、策略源码。
Notebook是您量化研究的主要工具,支持Python2.7语言。
进入开始研究
页面,点击区域1中的Notebook,会出现区域2,显示每个Notebook文件的列表,点击上面的新建按钮,就会在区域3出现新建的Notebook。
本文字所处的页面就是Notebook,Notebook页面格局,以及每个区域的用途如下图所示:
在区域1单元中,可以满足您三个需求:
数据研究
将单元切换为 code
模式。
可以在这个模式下写任何形式的Python语言,并且调用优矿中提供的数据、定制函数库。
例如在您可以在以下code单元中输入代码,然后用ctrl+enter运行:
如果需要了解python相关的语法,可以参考社区——新手专栏中的量化分析师的Python日记:
单元中支持丰富的python基础库与三方扩展库:如数据分析方面的numpy
、pandas
、scipy
, 绘图方面的matplotlib
、seaborn
,机器学习方面的sklearn
等等,具体可以查看 帮助页面。
也可以去 数据页面 查找想要使用的数据,复制代码后,在这里运行,比如:
例如复制代码后,可以直接在code模式的单元中按ctrl+enter运行以下代码,就会返回相应的数据:
xxxxxxxxxx
DataAPI.SecIDGet(partyID=u"",assetClass=u"",ticker=u"000001,600000",cnSpell=u"",field=u"",pandas="1")
更多获取数据的帮助可以详见 如何获取数据帮助页面
写策略做回测
将单元切换为 strategy
模式
这里使用优矿定制的回测框架,对量化策略进行研究、回测并查看回测结果。
创建一个strategy单元后,会提供策略代码模板,代码模版分为三个部分:
xxxxxxxxxx
# 第一部分:策略参数
start = '2014-01-01' # 回测起始时间
end = '2015-01-01' # 回测结束时间
benchmark = 'HS300' # 策略参考标准
universe = ['000001.XSHE', '600000.XSHG'] # 证券池,支持股票和基金
capital_base = 100000 # 起始资金
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
# 第二部分:初始化策略,回测期间只运行一次,可以用于设置全局变量
# account是回测期间的虚拟交易账户,存储上述全局变量参数信息,并在整个策略执行期间更新并维护可用现金、证券的头寸、每日交易指令明细、历史行情数据等。
def initialize(account):
# account.i = 1
pass
# 第三部分:策略每天下单逻辑,执行完成后,会输出每天的下单指令列表
# 这个函数在每个交易日开盘前被调用,模拟每个交易日开盘前,交易策略会根据历史数据或者其他信息进行交易判断,生成交易指令
def handle_data(account):
# 这里编写下单逻辑
return
以上策略模版按照以下流程执行,图中红色框部分就是代码模版中的三个部分。
基于以上了解,现在让我们来看看策略是如何去下单的,运行以下代码,在输出中点击“策略详情”,就可以在“调仓记录”中看到策略每天下单的信息啦:
xxxxxxxxxx
start = '2014-01-01' # 回测起始时间
end = '2015-01-01' # 回测结束时间
benchmark = 'HS300' # 策略参考标准
universe = ['000001.XSHE', '600000.XSHG'] # 证券池
capital_base = 100000 # 起始资金
freq = 'd' # 用日线回测的策略
refresh_rate = 1 # 每天调一次仓,即每个交易日都会运行第三部分的handle_data函数
def initialize(account):
pass
def handle_data(account):
# account.universe:当前交易日的证券池,已经从全局变量universe中剔除了当天停牌、退市和数据缺失证券的证券池。
# 推荐您下单的股票都来自于account.universe
for stock in account.universe:
# order:用来模拟下达买卖指令,这里表示买入100股stock股票。
order(stock,100)
目前,写的策略尽管还很简陋,但这是走向各种复杂策略的第一步!
下面我们再举一个稍微复杂的 均线策略,策略思路为:
xxxxxxxxxx
# 均线策略
start = '2014-01-01' # 回测起始时间
end = '2015-01-01' # 回测结束时间
benchmark = 'SH50' # 策略参考标准
universe = ['510050.XSHG'] # 证券池,也可以在这里添加多个证券
capital_base = 10000 # 起始资金
freq = 'd' # 日线策略
refresh_rate = 1 # 每个交易日调仓
def initialize(account):
pass
def handle_data(account):
# account.get_attribute_history:表示获取所有证券过去20天的closePrice数据,返回数据类型为 dict,键为每个证券的secID
hist = account.get_attribute_history('closePrice', 20)
for stk in account.universe:
# 计算股票过去5天收盘平均值
ma5 = hist[stk][-5:].mean()
# 计算股票过去20天收盘平均值
ma20 = hist[stk][:].mean()
# 如果5日均线大于20日均线,并且该股票当前没有持仓,则买入100手
# account.valid_secpos:表示当前交易日持有数量大于0的证券头寸。数据类型为字典,键为证券代码,值为头寸。
if ma5 > ma20 and stk not in account.valid_secpos:
order(stk, 10000)
# 如果5日均线小于20日均线,则该股票全部卖出
elif ma5 <= ma20:
order_to(stk, 0)
模拟交易
以上策略回测成功后,您可以看到在单元输出中,有参加大赛按钮,参加大赛可以将策略提交到500万实盘大赛;
也可以点击参加大赛按钮旁边的下拉箭头,选择模拟交易功能,然后您的策略就可以去模拟交易每天自动运行了。
将单元切换为 markdown
模式后,可以编写文档。
您当前看到的文字就是用markdown语法写出来的,您将本文档克隆,双击本单元,就能看到对本文字进行编辑。
您如果不熟悉markdown可以直接写文字,写完按 ctrl+enter 运行即可。
联系客服