Pandas & Numpy: 策略与回测系统 ; 数据分析
一、OHLCV:
当天的开盘价(Open)、最高价(High)、最低价(Low)和收盘价(Close)。如果再加上这一个小时总的成交量(Volumn),就得到了 OHLCV 数据。
使用 Zipline 进行策略回测,或者用 Pyfolio 进行投资组合分析。
Quantopian,就提供了基于 Zipline 的标准回测环境。
国内也有诸如 BigQuant、果仁网等类似平台,提供不同市场和金融产品的交易。
二、回测框架
回溯测试(Back testing),即回测,是用历史数据验证策略。
常见的回测框架有两类。
一类是向量化回测框架,它通常基于 Pandas+Numpy 来自己搭建计算核心;后端则是用 MySQL 或者 MongoDB 作为源。这种框架通过 Pandas+Numpy 对 OHLC 数组进行向量运算,可以在较长的历史数据上进行回测。不过,因为这类框架一般只用 OHLC,所以模拟会比较粗糙。
另一类则是事件驱动型回测框架。这类框架,本质上是针对每一个 tick 的变动或者 orderbook 的变动生成事件;然后,再把一个个事件交给策略进行执行。因此,虽然它的拓展性很强,可以允许更加灵活的策略,但回测速度是很慢的。
我们想要学习量化交易,使用大型成熟的回测框架,自然是第一选择。
比如 Zipline,就是一个热门的事件驱动型回测框架,背后有大型社区和文档的支持。
PyAlgoTrade 也是事件驱动的回测框架,文档相对完整,整合了知名的技术分析(Techique Analysis)库 TA-Lib。在速度和灵活方面,它比 Zipline 强。不过,它的一大硬伤是不支持 Pandas 的模块和对象。
显然,对于我们 Python 学习者来说,第一类也就是向量型回测框架,才是最适合我们练手的项目了。那么,我们就开始吧。
首先,我先为你梳理下回测流程,也就是下面五步:
1. 读取 OHLC 数据;
2. 对 OHLC 进行指标运算;
3. 策略根据指标向量决定买卖;
4. 发给模拟的”交易所“进行交易;
5. 最后,统计结果。
三、NumPy
NumPy是SciPy、Pandas 等数据科学的基础库。
为什么要用 NumPy 数组结构而不是 Python 本身的列表 list?
这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。
这样数组计算遍历所有的元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。
避免采用隐式拷贝,而是采用就地操作的方式。
Eg:用 x*=2,而不用 y=x*2。
四、数据分析及用户画像
Apriori算法
商业智能 BI、数据仓库 DW、数据挖掘 DM
一般来说数据可以划分为训练集和测试集。
训练集是用来给机器做训练的,通常是人们整理好训练数据,以及这些数据对应的分类标识。
通过训练,机器就产生了自我分类的模型,然后机器就可以拿着这个分类模型,对测试集中的数据进行分类预测
“用户消费行为分析”。
1、用户标签:它包括了性别、年龄、地域、收入、学历、职业等。这些包括了用户的基础属性。
2、消费标签:消费习惯、购买意向、是否对促销敏感。这些统计分析用户的消费习惯。
3、行为标签:时间段、频次、时长、访问路径。这些是通过分析用户行为,来得到他们使用 App 的习惯。
4、内容分析:对用户平时浏览的内容,尤其是停留时间长、浏览次数多的内容进行分析,分析出用户对哪些内容感兴趣,比如,金融、娱乐、教育、体育、时尚、科技等。
我们可以从用户生命周期的三个阶段来划分业务价值,包括:获客、粘客和留客。
1、获客:如何进行拉新,通过更精准的营销获取客户。
2、粘客:个性化推荐,搜索排序,场景运营等。
3、留客:流失率预测,分析关键节点降低流失率。
在获客上,我们可以找到优势的宣传渠道,如何通过个性化的宣传手段,吸引有潜在需求的用户,并刺激其转化。
在粘客上,如何提升用户的单价和消费频次,方法可以包括购买后的个性化推荐、针对优质用户进行优质高价商品的推荐、以及重复购买,比如通过红包、优惠等方式激励对优惠敏感的人群,提升购买频次。
在留客上,预测用户是否可能会从平台上流失。在营销领域,关于用户留存有一个观点——如果将顾客流失率降低 5%,公司利润将提升 25%~85%。可以看出留存率是多么的重要。用户流失可能会包括多种情况,比如用户体验、竞争对手、需求变化等,通过预测用户的流失率可以大幅降低用户留存的运营成本。