❶ 如何用优矿Quartz Signal快速实现Worldquant 101 Alpha
importnumpyasnp
start='2012-01-01'#回测起始时间
end='2016-01-01'#回测结束时间
benchmark='HS300'#策略参考标准
universe=set_universe("HS300",end)#证券池,支持股票和基金
capital_base=100000#起始资金
freq='d'#策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate=5#调仓频率,表示执行handle_data的时间间隔,若freq='d'时间间隔的单位为交易日,若freq='m'时间间隔为分钟
deffoo(data,dependencies=['closePrice','highPrice','lowPrice'],max_window=9):
today=(2*data['closePrice'].ix[-1]-data['lowPrice'].ix[-1]-data['highPrice'].ix[-1])/(data['closePrice'].ix[-1]-data['lowPrice'].ix[-1])
day_9=(2*data['closePrice'].ix[-9]-data['lowPrice'].ix[-9]-data['highPrice'].ix[-9])/(data['closePrice'].ix[-9]-data['lowPrice'].ix[-9])
returnday_9-today
definitialize(account):#初始化虚拟账户状态
a=Signal("worldquant_53",foo)
account.signal_generator=SignalGenerator(a)
defhandle_data(account):#每个交易日的买入卖出指令
weight=account.signal_result['worldquant_53']
weight=weight[weight>0]
weight=weight.replace([np.inf,-np.inf],np.nan).dropna()
weight=weight/weight.sum()
buy_list=weight.index
sell_list=account.valid_secpos
forstkinsell_list:
ifstknotinbuy_list:
order_to(stk,0)
total_money=account.referencePortfolioValue
prices=account.referencePrice
forstkinbuy_list:
ifstknotinprices:
continue
ifnp.isnan(prices[stk])orprices[stk]==0:#停牌或是还没有上市等原因不能交易
continue
order_num=int(total_money*weight[stk]/prices[stk]/100)*100
iforder_num<100:
order_num=100
order_to(stk,order_num)
❷ 为什么优矿的策略跑起来都很成功,是因为哪些因素没有考虑到
题主说的量化学堂中的策略是一个小市值而且回测区间比较短,所以曲线看着还行,这个初衷是为了让矿友对因子选股有个概念,没有做更多精细的处理。
至于其他的疑问我简单的回答一下
上面有提到手续费和滑点等,优矿的回测框架中都是有考虑的。
交易税费 commission
滑点 slippage
在真实的证券成交环境下,下单的点位和最终成交的点位往往有一定的偏差,订单下到市场后,往往会对市场的走向造成一定的影响。比如买单会提高市场价格,卖单会降低市场价格。
优矿为了更真实地模拟策略在真实市场的表现,增加了滑点模式,用于处理市场冲击问题。
默认为slippage = Slippage(value=0.0, unit='perValue')
为了保障这些数据的连续性,优矿上已做前复权处理,在回测框架中使用回测框架提供的行情数据(比如 account.get_history)、回测框架在成交撮合时使用的行情数据,都已做前复权处理。
还有幸存者偏差、前视偏差、极端情况我们都提供了函数或者例子帮忙处理。
上面温如提到了数据的问题,我司有100多人的数据队伍在进行数据的生产及清洗,这些数据在优矿上大多是不收费提供使用的,也许我们不是最好,但我们一直在力求变的更好。
投资从来不是件容易的事,只希望通过自己的努力能帮助大家提升研究效率、降低运营成本,找寻alpha的路上能更加顺畅一些。
❸ 怎么学习python量化交易
下面教你八步写个量化交易策略——单股票均线策略
1 确定策略内容与框架
若昨日收盘价高出过去20日平均价今天开盘买入股票
若昨日收盘价低于过去20日平均价今天开盘卖出股票
只操作一只股票,很简单对吧,但怎么用代码说给计算机听呢?
想想人是怎么操作的,应该包括这样两个部分
既然是单股票策略,事先决定好交易哪一个股票。
每天看看昨日收盘价是否高出过去20日平均价,是的话开盘就买入,不是开盘就卖出。每天都这么做,循环下去。
对应代码也是这两个部分
definitialize(context):
用来写最开始要做什么的地方
defhandle_data(context,data):
用来写每天循环要做什么的地方
2 初始化
我们要写设置要交易的股票的代码,比如 兔宝宝(002043)
definitialize(context):
g.security='002043.XSHE'#存入兔宝宝的股票代码
3 获取收盘价与均价
首先,获取昨日股票的收盘价
#用法:变量=data[股票代码].close
last_price=data[g.security].close#取得最近日收盘价,命名为last_price
然后,获取近二十日股票收盘价的平均价
#用法:变量=data[股票代码].mavg(天数,‘close’)
#获取近二十日股票收盘价的平均价,命名为average_price
average_price=data[g.security].mavg(20,'close')
4 判断是否买卖
数据都获取完,该做买卖判断了
#如果昨日收盘价高出二十日平均价,则买入,否则卖出
iflast_price>average_price:
买入
eliflast_price<average_price:
卖出
问题来了,现在该写买卖下单了,但是拿多少钱去买我们还没有告诉计算机,所以每天还要获取账户里现金量。
#用法:变量=context.portfolio.cash
cash=context.portfolio.cash#取得当前的现金量,命名为cash
5 买入卖出
#用法:order_value(要买入股票股票的股票代码,要多少钱去买)
order_value(g.security,cash)#用当前所有资金买入股票
#用法:order_target(要买卖股票的股票代码,目标持仓金额)
order_target(g.security,0)#将股票仓位调整到0,即全卖出
6 策略代码写完,进行回测
把买入卖出的代码写好,策略就写完了,如下
definitialize(context):#初始化
g.security='002043.XSHE'#股票名:兔宝宝
defhandle_data(context,data):#每日循环
last_price=data[g.security].close#取得最近日收盘价
#取得过去二十天的平均价格
average_price=data[g.security].mavg(20,'close')
cash=context.portfolio.cash#取得当前的现金
#如果昨日收盘价高出二十日平均价,则买入,否则卖出。
iflast_price>average_price:
order_value(g.security,cash)#用当前所有资金买入股票
eliflast_price<average_price:
order_target(g.security,0)#将股票仓位调整到0,即全卖出
现在,在策略回测界面右上部,设置回测时间从20140101到20160601,设置初始资金100000,设置回测频率,然后点击运行回测。
7 建立模拟交易,使策略和行情实时连接自动运行
策略写好,回测完成,点击回测结果界面(如上图)右上部红色模拟交易按钮,新建模拟交易如下图。 写好交易名称,设置初始资金,数据频率,此处是每天,设置好后点提交。
8 开启微信通知,接收交易信号
点击聚宽导航栏我的交易,可以看到创建的模拟交易,如下图。 点击右边的微信通知开关,将OFF调到ON,按照指示扫描二维码,绑定微信,就能微信接收交易信号了。
❹ python量化哪个平台可以回测模拟实盘还不要钱
Python量化投资框架:回测+模拟+实盘
Python量化投资 模拟交易 平台 1. 股票量化投资框架体系 1.1 回测 实盘交易前,必须对量化交易策略进行回测和模拟,以确定策略是否有效,并进行改进和优化。作为一般人而言,你能想到的,一般都有人做过了。回测框架也如此。当前小白看到的主要有如下五个回测框架: Zipline :事件驱动框架,国外很流行。缺陷是不适合国内市场。 PyAlgoTrade : 事件驱动框架,最新更新日期为16年8月17号。支持国内市场,应用python 2.7开发,最大的bug在于不支持3.5的版本,以及不支持强大的pandas。 pybacktest :以处理向量数据的方式进行回测,最新更新日期为2个月前,更新不稳定。 TradingWithPython:基于pybacktest,进行重构。参考资料较少。 ultra-finance:在github的项目两年前就停止更新了,最新的项目在谷歌平台,无奈打不开网址,感兴趣的话,请自行查看吧。 RQAlpha:事件驱动框架,适合A股市场,自带日线数据。是米筐的回测开源框架,相对而言,个人更喜欢这个平台。 2 模拟 模拟交易,同样是实盘交易前的重要一步。以防止类似于当前某券商的事件,半小时之内亏损上亿,对整个股市都产生了恶劣影响。模拟交易,重点考虑的是程序的交易逻辑是否可靠无误,数据传输的各种情况是否都考虑到。 当下,个人看到的,喜欢用的开源平台是雪球模拟交易,其次是wind提供的模拟交易接口。像优矿、米筐和聚宽提供的,由于只能在线上平台测试,不甚自由,并无太多感觉。 雪球模拟交易:在后续实盘交易模块,再进行重点介绍,主要应用的是一个开源的easytrader系列。 Wind模拟交易:若没有机构版的话,可以考虑应用学生免费版。具体模拟交易接口可参看如下链接:http://www.dajiangzhang.com/document 3 实盘 实盘,无疑是我们的终极目标。股票程序化交易,已经被限制。但对于万能的我们而言,总有解决的办法。当下最多的是破解券商网页版的交易接口,或者说应用爬虫爬去操作。对我而言,比较倾向于食灯鬼的easytrader系列的开源平台。对于机构用户而言,由于资金量较大,出于安全性和可靠性的考虑,并不建议应用。 easytrader系列当前主要有三个组成部分: easytrader:提供券商华泰/佣金宝/银河/广发/雪球的基金、股票自动程序化交易,量化交易组件 easyquotation : 实时获取新浪 / Leverfun 的免费股票以及 level2 十档行情 / 集思路的分级基金行情 easyhistory : 用于获取维护股票的历史数据 easyquant : 股票量化框架,支持行情获取以及交易 2. 期货量化投资框架体系 一直待在私募或者券商,做的是股票相关的内容,对期货这块不甚熟悉。就根据自己所了解的,简单总结一下。 2.1 回测 回测,貌似并没有非常流行的开源框架。可能的原因有二:期货相对股票而言,门槛较高,更多是机构交易,开源较少; 去年至今对期货监管控制比较严,至今未放开,只能做些CTA的策略,另许多人兴致泱泱吧。 就个人理解而言,可能wind的是一个相对合适的选择。 2.2 模拟 + 实盘 vn.py是国内最为流行的一个开源平台。起源于国内私募的自主交易系统,2015年初启动时只是单纯的交易API接口的Python封装。随着业内关注度的上升和社区不断的贡献,目前已经一步步成长为一套全面的交易程序开发框架。如官网所说,该框架侧重的是交易模块,回测模块并未支持。 能力有限,如果对相关框架感兴趣的话,就详看相关的链接吧。个人期望的是以RQAlpha为主搭建回测框架,以雪球或wind为主搭建模拟框架,用easy系列进行交易。
❺ 用优矿做量化交易可以吗
量化交易是不挑期货品种的,只是你量化交易的模型和交易对象是否匹配。 量化交易不是永动机,不是印钞机,最终还是要看人对期货的理解。
❻ 如何用quartz signal快速实现worldquant 101 alpha
优矿的500万实盘在如火如荼地进行中,我们已经看到有矿友利用经典的机器学习算法和新的Quartz Signal模块对于优矿上现有因子的利用进行探索,但是对于大多数信号/因子研究者来说,寻找新的Alpha依然是其孜孜以求的目标。
如何去寻找新的Alpha因子的灵感成为摆在量化研究者面前无法回避的问题。
我们注意到,Zura Kakushadze 等人最新发表的论文101 Formulaic Alpha(http://papers.ssrn.com/sol3/papers.cfm?abstra…) 里提到了很多基于价量数据构建的"Alpha"因子,为我们提供了很多新的灵感。
本文将先简单介绍论文中提到的Alpha因子表达式语法以及含义,之后会介绍如何用Quartz Signal便捷地实现这些Alpha,最后会提供2个在论文中出现并且效果不错的Alpha因子供大家参考。
Formulaic Alpha简介
研读过上文提到的论文,我们发现,论文中提到的Formulaic Alpha就是用一个表达式来表示一个Alpha因子:
· 写出的表达式是在每一个调仓日对每一支股票按照该表达式进行计算
· 例如:1/close; 对universe中每一支股票,计算1/closePrice,然后此向量被标准化,即除以其数值的总和(所有数值相加的结果为 1)。这将为所有股票创建了一个基于“权重”的向量,每个权重代表投资组合中投资于该股票的资金比例
· 其支持的数据有:open(开盘价)/close(收盘价)/high(最高价)/low(最低价)/vwap(日内交易量加权价格)/returns(单日收益率)等等
我们认为这种Formulaic Alpha的表达形式有以下特点:
· 表达简洁,但隐藏了太多细节,用户无法看到具体的调仓信息
· 受限于表达式表达能力的不足,提供了丰富的内置函数,帮助用户完成了cross-sectional信息的处理
内置函数
· 可分为横截面函数和时间序列函数两大类,其中时间序列函数名多为以ts_开头
· 大部分函数命名方式较为直观
· abs(x) log(x)分别表示x的绝对值和x的自然对数
· rank(x)表示某股票x值在横截面上的升序排名序号,并将排名归一到[0,1]的闭区间
· delay(x,d)表示x值在d天前的值
· delta(x,d)表示x值的最新值减去x值在d天前的值
· correlation(x,y,d) covariance(x,y,d)分别表示x和y在长度为d的时间窗口上的Pearson相关系数和协方差
· ts_min(x,d) ts_max(x,d) ts_argmax(x,d) ts_argmin(x,d) ts_rank(x) sum(x,d) stddev(x,d)等均可以通过函数名称了解其作用
· 更多地函数解释可以参考论文的附录
Quartz Signal模块简介
正如API帮助文档中提到的,Signal模块是优矿为方便因子/信号研究者提供的工具,将用户从与信号研究无关的数据获取、下单逻辑中抽离出来,用户可以将精力集中于按照自己的思路开发新的信号。
使用Signal自定义信号的通用实现过程如下:
def foo(data, dependencies=['PE 39;], max_window=4):
return data['PE 39;].mean()
# in initialize(account)
a = Signal("signal_a", foo)
account.signal_generator = SignalGenerator(a)
# in handle_data(account)
account.signal_result['signal_a']
我们可以将Quartz Signal的使用过程分为四个步骤:
定义实现信号逻辑的函数(在上例中即为foo函数)
在initialize函数中定义Signal,在实例化Signal类时将信号名字和描述函数作为参数传入
在initialize函数中将需要使用的信号注册到account.signal_generator中,可以注册多个信号
在handle_data中通过account.signal_result获取计算好的信号值
我们重点介绍一下用户需要完成的信号描述函数:
信号描述函数实际上是用户在每一个调仓日对于可以获得数据的处理逻辑
信号描述函数名可以按照Python函数的命名规范任意定义,但其参数必须为一个非关键字参数data,两个关键字参数dependencies和max_window
dependencies的参数格式必须为str构成的list,list的元素为该函数中需要使用的因子名称,具体支持因子列表参考帮助文档
max_window的参数格式为int,表示用户希望用到过去max_window天的因子数据
data则是根据dependencies和max_window,Quartz Signal模块帮助用户取到的数据,其格式为一个dict,key为因子名称,value为max_window*universe_length的Pandas DataFrame
信号描述函数的返回值必须为一个长度与data中每一元素列数相同的Pandas Series
如下图所示:
上图描述的就是data的结构,其中data只有一个元素,其key为"PE",value就是上图表格所示的Pandas DataFrame,具体地,其columns为universe的secID,其index为%Y%m%d格式的日期字符串
Quartz Signal v.s. Formulaic Alpha
由上述描述可见,使用Quartz Signal模块可以便捷地实现Formulaic Alpha,同时相比Formulaic Alpha表达式有以下优势:
更加直观:
o用户在预先定义信号描述函数时,就可以明晰地定义自己需要的因子数据和时间窗口
o用户可以在Quartz框架中灵活定义自己的调仓频率和下单逻辑,并可以直观地看到每次调仓的股票列表
更加灵活:
oFormulaic Alpha限制了表达式的计算结果必须代表相应股票在投资组合中的权重,而Quartz Signal并没有此限制,用户可以在handle_data中按照自己的想法任意处理信号值
o信号描述函数的data是以Pandas DataFrame的格式传入的,这样用户就可以在函数中同时看到横截面数据和时间序列数据,为用户提供了更多可能
更加强大:信号描述函数的data是以Pandas DataFrame的格式传入的,Pandas丰富的内置函数可以帮助我们完成较复杂Formulaic Alpha表达式才能完成的任务(见最后一个示例)
更多数据:Quartz Signal不仅支持openPrice/closePrice/highPrice/lowPrice/turnoverVol等价量信息,还支持PE、RSI等更丰富的因子
下面我们就用Quartz Signal模块实现了一个论文中提到的Formulaic Alpha:
用Quartz Signal实现一个Formulaic Alpha
以WebSim论文中alpha 53为例,其原始表达式为:
(−1∗delta((((close−low)−(high−close))/(close−low)),9))
化简可得,((close - low) - (high - close)) / (close - low)的9日之前值-当前值
继续化简可得:(2∗close−low−high)/(close−low)
我们深入研究该因子可以发现:
(2∗close−low−high)/(close−low)=1−(high−close)/(close−low)
前面的常数1可以通过delta消掉,其实可以简化为(high−close)/(close−low)的现值-9天之前的值
而(high−close)/(close−low)本身则代表了收盘价在日内波动中的位置,可以看做是买入意愿的一种体现
我们强烈建议大家在实现这些Formulaic Alpha因子之前先花一些精力去理解其经济含义,不仅可以加深对其原理的理解,在某些时候还可以简化实现。
我们以论文中的Alpha 26为例,其原始表达式为:
−1∗ts_max(correlation(ts_rank(volume,5),ts_rank(high,5),5),3)
我们当然可以按照其原始表达式一步步地先对过去5天的成交量和最高价进行排名,再取相关系数;但是较熟悉Pandas DataFrame内置函数或者统计知识较丰富的研究者可以发现,correlation(ts_rank(volume,5),ts_rank(high,5),5) 其实就是在计算Spearman Rank Correlation Coefficient,使用DataFrame内置的corr(method="spearman")函数就可以完成计算,可以大大提高开发效率。
在我们的模拟的过程中发现,如果按照原公式进行计算,无论是long还是short的结果都跑不赢大盘,同时对于成交量和最高价相关性较高的股票将会是市场追逐的热点股票,应该分配更大的权重。
所以在上述代码中我们将原Formulaic Alpha前面的负号去掉。
当然,对于论文中出现的某些因子可能较难于理解其经济学意义,我们鼓励大家用Quartz Signal将其实现之后发到社区上与大家一起讨论。
对于Quartz Signal模块有哪些不尽如人意的地方也可以反馈给我们,帮助我们持续改进。
❼ 优矿可以做实盘交易吗
量化投资是以计算机技术为工具的投资运算方式,Btcliving是“定性思想的量化应用”,更强调数据。我知道这个应该不是很难。
❽ 优矿怎么获取同一天所有股票的开盘价
想要获取同一天所有股票的开盘价的话,直接在你的交易软件上就可以直接看的,就有开盘价一栏,而且还可以智能排序,很方便的,不知道的话可以教你。
❾ 通联数据股份公司的经营内容
主要产品介绍
通联数据商城
将多渠道获取的权威源数据,通过国际领先的大数据和云计算技术,建立完整的金融大数据采集、处理、存储、深度挖掘、分析、服务和展现平台;将海量金融大数据的可得性、分析和处理能力以最快速度提供给客户。
通联智能量化投研平台
1、 雅典娜―智能事件研究
雅典娜是基于自然人机交互的智能事件策略研究与分析平台;是针对中国A股市场事件驱动型策略,提供分析研究服务的专业化服务产品;用户可以使用自然语言,研究影响证券价格变动的政经社会事件库,进行股票筛选以及自定义交易策略回测配置。
2、优矿―量化实验室
优矿以大数据和云计算为依托为个人量化投资者提供海量免费的金融数据和量化因子、稳定加密可扩展的私有云平台、高效快速的金融计算工具和回测框架。让用户可以轻松做研究、跑回测、跟实盘。
3、 通联策略研究
通联策略研究是以先进的分布式计算方式为基础,为金融投资团队提供高速一体化的策略分析、优化与管理的专业化服务平台;功能包括策略信号的复合加工与Alpha提纯处理、收益风险效率优化组合的构建与生成、策略回测表现的归因分析等。
4、 通联智能研报
通联智能研报是利用多元化的智能学习技术实现实时跟踪市场热点,迅速捕捉市场情绪,系统解读投资价值的个股研究平台;它聚合了规模庞大的因子、新闻、研究报告等数据,通过数据挖掘和文本语义分析技术,为用户提供最新最全面反应市场动态的个股研究信息。
通联多资产投资管理平台
1、通联算法交易
通联算法交易提供跨市场、多资产的交易订单管理和交易执行管理方案;并通过提供交易算法,帮助用户降低交易成本。
2、通联组合管理
通联组合管理提供全球化的多资产、多策略的投资组合管理方案;功能包括实时监控组合盈亏的板块分布,对组合收益和风险进行归因分析。
3、通联资产证券化
提供国内首个专业针对RMBS、ABS、CMBS、CLO等资产证券化产品的定价分析平台。采用高效分布式计算,以及自助研发的Payoff Engine,实现快速建模,灵活设计交易结构,自由检验回报预期。
通联金融移动办公平台
1、 通联办公社交
通联办公社交提供社会化沟通方式,加强组织扁平化管理。
2、通联流程管理
通联流程管理帮助金融企业快速搭建企业流程管控体系,提高管理效率。
3、通聊
金融企业移动办公即时通讯工具;微信构筑生活友情,通聊实现办公高效。