在系列第一篇《跟着分析师炒股系列(一)》里,信谁大数据科学团队以分析师研报推荐的股票池,建立了一套股票组合轮动的交易策略,发掘出累积收益最高的一票分析师,其中最牛的招商证券分析师刘荣的累积收益竟达80倍!

不过,累积收益还可能包含运气成分,比如大牛市下推荐股票都大涨,还不能算真英雄。这一次我们来看看相对收益,看能不能找出穿越牛熊的分析师,尤其是最近一年熊市震荡下他们的表现如何。

延续上一篇的交易策略,筛选分析师评级为买入和增持的股票,形成股票池。
调仓周期为3个月。
选取分析师评级为“买入、增持”的股票。实现3个月一轮换。
具体在每三个月的月末,选取最近发表三篇研报推荐的股票:

  • 若三只股票与前三个月推荐的完全一样,则继续持有;
  • 若三只股票都不一样,则卖掉所有持仓,买入新推荐的三只股票;
  • 若三只股票有一到两只不同,则卖掉收益率最高的持仓股票,买入新推荐的一到两只股票。

一,年化相对收益率排名TOP10

我们挑选最近活跃的分析师(在1年内有发表研报),并且其交易周期≥1年。共747名分析师,先看结果:

阅读全文 »

上一回,我们利用大数据展示了分析师研报预测与个股真实涨跌的对比情况,发现了不少“高言值”分析师,说明专业研究的价值。点击回顾《大数据教你挑选分析师
那么,结合个人实际持仓操作情况,如果我们就跟着分析师的推荐构建买卖组合,能取得怎样的成绩呢?
信谁大数据科学团队这次就以分析师研报推荐的股票池,建立了一套股票组合轮动的交易策略,来看看结果如何。
技术男的方法依然简单直接:
一名普通分析师每个月发表的研报数量大多数在5篇以上,但选股在精不在多,实际也不可能买入分析师推荐的所有股票。而短线投资对时间精力要求高,仍提倡中长期投资为主。信谁数据科学实验室制定了一个简单有效的交易策略:

1) 挑选分析师评级为“买入”的股票;
2) 策略的调仓周期定为3个月;
3) 具体在每三个月的月末,选取最近发表三篇研报推荐的股票:

  • 若三只股票与前三个月推荐的完全一样,则继续持有;
  • 若三只股票都不一样,则卖掉所有持仓,买入新推荐的三只股票;
  • 若三只股票有一到两只不同,则卖掉收益率最高的持仓股票,买入新推荐的一到两只股票。

注:本交易策略没考虑交易费用。

阅读全文 »

每个证券公司都有一个分析师团队,不定期发布投资研究报告。分析师的研报准吗?分析师的“言值”究竟有多高?
“信谁”的大数据科学团队对这个问题也很好奇。究竟准不准,我们信数据不信故事。
技术男的方法非常简单暴力:

  1. 把分析师发布的研报预测与相关股票最后涨跌的结果作对比,判断该研报预测的准确性
  2. 把分析师发布的所有研报汇总起来,就得到分析预测的正确率,即“言值”,“言值”可以是从0-100分。
  3. 汇总所有分析师的数据,就可以得到全部分析师的“言值”分布。

我们从“信谁”平台收集了几乎全部证券公司的3022名分析师、45万条研报数据进行分析。通过大数据挖掘和提取,总结了一些有意思的数据与大家分享。


一、中国分析师分布情况

国内的机构分析师基本集中在北京、上海、深圳等地。与国内的财富聚集地区一致。

阅读全文 »

最近需要根据已有的数据计算这样一组数据:

  • 股票名称
  • 股票代码
  • 推荐人数
  • 平均分数
  • 最大幅度

看到这样的需求,首先想到的是利用pandas的groupby功能。

一、获取数据

1
2
3
4
5
6
7
8
9
10
11
sql = "select ID, CODE, NAME, SCORE, Target from table_info"
df = pd.read_sql(sql, engine)

df.head()
Out[44]:
ID CODE NAME SCORE Target
0 {00044A0F-3D2A-49E9-B2FD-C42890B10C10} 002285 世联行 0.933333 0.020588
1 {001F206E-341A-4613-8AD5-BF9BFD3BB731} 002285 世联行 0.928571 0.147228
2 {002C6D88-A011-4E55-93F1-F13CA5B0ACD4} 000058 深 赛 格 0.800000 0.029838
3 {0036D69B-32FB-4D07-B23B-93181A573749} 300095 华伍股份 1.000000 0.071705
4 {003DEFB1-3664-4F51-B867-A0D31C63A7EE} 002588 史丹利 0.911504 0.000000

二、GroupBy处理

1, 获取推荐人数

1
2
3
4
5
6
7
8
9
10
11
12
grouped = df.groupby(['CODE','NAME'])
df_count =grouped['ID'].count()

df_count.head()
Out[48]:
CODE NAME
000001 平安银行 17
000006 深振业A 2
000018 神州长城 3
000023 深天地A 1
000026 飞亚达A 6
Name: ID, dtype: int64
阅读全文 »

一、GroupBy技术

GroupBy技术是Hadley Wickham(热门R语言包作者)创造的,用于表示分组运算,“split-apply-combine”(拆分 - 应用 - 合并)。

二、分组键

分组键可以有多种形式,且类型不必相同

  • 列表或数组,其长度与待分组的轴一样。

  • 表示DataFrame某个列名的值。

  • 字典或Series,给出带分组轴上的值与分组名之间的对应关系。

  • 函数,用于处理轴索引或索引中的各个标签。

阅读全文 »

在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。

文本相似度计算的需求始于搜索引擎,搜索引擎需要计算“用户查询”和爬下来的众多“网页”之间的相似度,从而把最相似的排在最前,返回给用户。

一、基本概念

TF-IDF

  • TF:term frequency,词频

$$ 词频(TF) = 某个词在文章中的出现次数 $$

$$ 词频(TF) = \frac{某个词在文章中的出现次数}{文章的总次数} $$

$$ 词频(TF) = \frac{某个词在文章中的出现次数}{该文出现次数最多的词的出现次数} $$

  • IDF:inverse document frequency,逆文档频率

$$ IDF = log(\frac{语料库的文档总数}{包含该词的文档数+1}) $$

  • TF-IDF

$$ TF-IDF = 词频(TF) \times逆文档频率(IDF) $$

主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

阅读全文 »

基于用户的协同过滤

我们将一个用户和其他所有用户进行对比,找到相似的人。这种算法有两个弊端:

  1. 扩展性 随着用户数量的增加,其计算量也会增加。这种算法在只有几千个用户的情况下能够工作得很好,但达到一百万个用户时就会出现瓶颈。

  2. 稀疏性 大多数推荐系统中,物品的数量要远大于用户的数量,因此用户仅仅对一小部分物品进行了评价,这就造成了数据的稀疏性。比如亚马逊有上百万本书,但用户只评论了很少一部分,于是就很难找到两个相似的用户了。

鉴于以上两个局限性,我们不妨考察一下基于物品的协同过滤算法。

基于物品的协同过滤

假设我们有一种算法可以计算出两件物品之间的相似度,比如Phoenix专辑和Manners很相似。如果一个用户给Phoenix打了很高的分数,我们就可以向他推荐Manners了。

需要注意这两种算法的区别:

  • 基于用户的协同过滤是通过计算用户之间的距离找出最相似的用户,并将他评价过的物品推荐给目标用户;

  • 而基于物品的协同过滤则是找出最相似的物品,再结合用户的评价来给出推荐结果。

  • 基于用户的协同过滤又称为内存型协同过滤,因为我们需要将所有的评价数据都保存在内存中来进行推荐。

  • 基于物品的协同过滤也称为基于模型的协同过滤,因为我们不需要保存所有的评价数据,而是通过构建一个物品相似度模型来做推荐。

    阅读全文 »

协同型过滤 ( Collaborative filtering)
一个协作型过滤算法通常的做法是对一大群人进行搜索,并从中找出与我们品味相近的一小群人。算法会对这些人所偏爱的其他内容进行考查,并将它们组合起来构造出一个经过排名的推荐列表。

一、相似度评价方法

0,数据集

本文中的数据集都是以嵌套字典的形式出现,如下:
字典的key为用户名,value为对各个物品的评价分数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
users={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,
'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,
'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,
'The Night Listener': 4.5, 'Superman Returns': 4.0,
'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}


critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5,
'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5,
'Superman Returns': 4.0, 'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0,
'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0,
'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,
'Superman Returns':4.0}}

1,曼哈顿距离

最简单的距离计算方式是曼哈顿距离。在二维模型中,每个人都可以用(x, y)的点来表示,这里我用下标表示不同的人,(x1,y2)表示艾米,(x2,y2)表示神秘的X先生,那么他们之间的曼哈顿距离就是



阅读全文 »

第一章 金融、资产管理与投资基金

1,金融资产

一般分为债券类金融资产和股权类金融资产。

债券类金融资产以票据、债券等契约型投资工具为主,股权类金融资产以各类股票为主。

2,投资基金的主要类别

主要按照所投资的对象的不同进行区分:

  1. 证券投资基金
    基金所投资的有价证券主要是在证券交易所或银行间市场上公开交易的证券,包括股票、债券、货币、金融衍生工具等。
    可分为公募证券投资基金和私募证券投资基金等种类。

  2. 私募股权基金
    私募股权基金(private equity,PE)指通过私募形式对私有企业,即非上市企业进行的权益性投资。

  3. 风险投资基金
    风险投资基金(venture capital,VC),又叫创业基金,它以一定的方式吸收机构和个人的资金,投向与那些不具备上市资格的初创期的或者是小型的新型企业,尤其是高新技术企业,帮助所投资的企业尽快成熟,取得上市资格,从而使资本增值。

  4. 对冲基金(hedge fund),意为“风险对冲过的基金”,它是基于投资理论和极其复杂的金融市场操作技巧,充分利用各种金融衍生产品的杠杆作用,承担高风险、追求高收益的投资模式。

  5. 另类投资基金
    是指投资于传统的股票、债券之外的金融和实物资产的基金,如房地产、证券化资产、对冲基金、大宗商品、黄金、艺术品等。

阅读全文 »

scrapy爬虫框架在业内大大有名,自己写过静态网页和动态网页的爬虫,一直没拿scrapy来写,近来看了scrapy的官方文档,了解了大致的流程,故拿来练手实践了一个项目。

本文主要抓取股吧的文章,内容包括:

  • 定义抓取Spider

  • 数据字段的定义

  • 内容解析

  • 数据存储到mysql

  • PyCharm调试scrapy

一、定义抓取Spider

创建一个新的Spider

1
2
scrapy startproject tutorial
scrapy genspider guba_spider eastmoney.com

默认创建的Spider是继承与BaseSpider,一般我们继承功能更多的CrawlSpider。

1
2
3
4
5
6
7
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class GubaSpider(CrawlSpider):
name = 'guba'
allowed_domains = ['eastmoney.com']

定义好GubaSpider类后,然后要指定开始网页start_urls和rules抓取网页规则。

1
2
3
4
5
6
7
8
9
10
start_urls = [
'http://guba.eastmoney.com/default_%d.html' % index for index in range(1, 100)
]

rules = (
# 提取匹配 文章 的链接并使用spider的parse_article方法进行分析
Rule(LinkExtractor(allow=(r'^http://guba.eastmoney.com/news.', )), callback='parse_article'),

Rule(LinkExtractor(allow=(r'^http://iguba.eastmoney.com/\d+.',)), callback='parse_auther')
)
阅读全文 »