zoukankan      html  css  js  c++  java
  • [转]Python金融量化

    本文转自:https://www.cnblogs.com/ttrrpp/p/6949861.html

    Python股票数据分析

    最近在学习基于python的股票数据分析,其中主要用到了tushare和seaborn。tushare是一款财经类数据接口包,国内的股票数据还是比较全的

    官网地址:http://tushare.waditu.com/index.html#id5。seaborn则是一款绘图库,通过seaborn可以轻松地画出简洁漂亮的图表,而且库本身具有一定的统计功能。

      导入的模块:

    import matplotlib.pyplot as plt

      import seaborn as sns

      import seaborn.linearmodels as snsl

    from datetime import datetime

      import tushare as ts

    代码部分:

      股票收盘价走势曲线

      sns.set_style("whitegrid")

      end = datetime.today() #开始时间结束时间,选取最近一年的数据

      start = datetime(end.year-1,end.month,end.day)

      end = str(end)[0:10]

      start = str(start)[0:10]

    stock = ts.get_hist_data('300104',start,end)#选取一支股票

      stock['close'].plot(legend=True ,figsize=(10,4))

      plt.show()

    股票日线

    同理,可以做出5日均线、10日均线以及20日均线

      stock[['close','ma5','ma10','ma20']].plot(legend=True ,figsize=(10,4))

    日线、5日均线、10日均线、20日均线

    股票每日涨跌幅度

      stock['Daily Return'] = stock['close'].pct_change()

      stock['Daily Return'].plot(legend=True,figsize=(10,4))

    每日涨跌幅

    核密度估计

      sns.kdeplot(stock['Daily Return'].dropna())

    核密度估计

    核密度估计+统计柱状图

      sns.distplot(stock['Daily Return'].dropna(),bins=100)

    核密度+柱状图

    两支股票的皮尔森相关系数

      sns.jointplot(stock['Daily Return'],stock['Daily Return'],alpha=0.2)

    皮尔森相关系数

    多只股票相关性计算

      stock_lis=['300113','300343','300295','300315`] #随便选取了四支互联网相关的股票

      df=pd.DataFrame()

      for stock in stock_lis: closing_df = ts.get_hist_data(stock,start,end)['close'] df = df.join(pd.DataFrame({stock:closing_df}),how='outer')

      tech_rets = df.pct_change()

      snsl.corrplot(tech_rets.dropna())

      相关性

    简单地计算股票的收益与风险,衡量股票收益与风险的数值分别为股票涨跌的平均值以及标准差,平均值为正则说明收益是正的,标准差越大则说明股票波动大,风险也大。

      rets = tech_rets.dropna()

      plt.scatter(rets.mean(),rets.std())

      plt.xlabel('Excepted Return')

      plt.ylabel('Risk')

      for label,x,y in zip(rets.columns,rets.mean(),rets.std()):#添加标注 plt.annotate( label, xy =(x,y),xytext=(15,15), textcoords = 'offset points', arrowprops = dict(arrowstyle = '-',connectionstyle = 'arc3,rad=-0.3'))

    声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。

     

     

    用Python分析公开数据选出高送转预期股票

    根据以往的经验,每年年底都会有一波高送转预期行情。今天,米哥就带大家实践一下如何利用tushare实现高送转预期选股。

    本文主要是讲述选股的思路方法,选股条件和参数大家可以根据米哥提供的代码自行修改。

    1. 选股原理

    一般来说,具备高送转预期的个股,都具有总市值低、每股公积金高、每股收益大,流通股本少的特点。当然,也还有其它的因素,比如当前股价、经营收益变动情况、以及以往分红送股习惯等等。

    这里我们暂时只考虑每股公积金、每股收益、流通股本和总市值四个因素,将公积金大于等于5元,每股收益大于等于5毛,流通股本在3亿以下,总市值在100亿以内作为高送转预期目标(这些参数大家可根据自己的经验随意调整)。

    2. 数据准备

    首先要导入tushare:

    import tushare as ts

    调取股票基本面数据和行情数据

    # 基本面数据
    basic = ts.get_stock_basics()
    
    # 行情和市值数据
    hq = ts.get_today_all()

    3. 数据清洗整理

    对获取到的数据进行清洗和整理,只保留需要的字段。(其它字段及含义,请参考 http:// tushare.org 文档)

    #当前股价,如果停牌则设置当前价格为上一个交易日股价
    hq['trade'] = hq.apply(lambda x:x.settlement if x.trade==0 else x.trade, axis=1)
    
    #分别选取流通股本,总股本,每股公积金,每股收益
    basedata = basic[['outstanding', 'totals', 'reservedPerShare', 'esp']]
    
    #选取股票代码,名称,当前价格,总市值,流通市值
    hqdata = hq[['code', 'name', 'trade', 'mktcap', 'nmc']]
    
    #设置行情数据code为index列
    hqdata = hqdata.set_index('code')
    
    #合并两个数据表
    data = basedata.merge(hqdata, left_index=True, right_index=True)

    4. 选股条件

    根据上文提到的选股参数和条件,我们对数据进一步处理。

    将总市值和流通市值换成亿元单位
    data['mktcap'] = data['mktcap'] / 10000
    data['nmc'] = data['nmc'] / 10000

    设置参数和过滤值(此次各自调整)

    #每股公积金>=5
    res = data.reservedPerShare >= 5
    #流通股本<=3亿
    out = data.outstanding <= 30000
    #每股收益>=5毛
    eps = data.esp >= 0.5
    #总市值<100亿
    mktcap = data.mktcap <= 100

    取并集结果:

    allcrit = res & out & eps & mktcap
    selected = data[allcrit]

    具有高送转预期股票的结果呈现:

    以上字段的含义分别为:股票名称、收盘价格、每股公积金、流通股本、每股收益(应该为eps,之前发布笔误)、总市值和流通市值。

    https://zhuanlan.zhihu.com/p/23829205

     

     

     

    Python 金叉判定

     View Code

    Python 过滤次新股、停牌、涨跌停

     View Code

    Python 按平均持仓市值调仓

     View Code

    Python PCA主成分分析算法

    Python主成分分析算法的作用是提取样本的主要特征向量,从而实现数据降维的目的。

     View Code

    经过主成分降维的数据如红色图案所示,蓝色的是恢复的原始数据。可以看到经过降维的数据样本差异更加明显。

    Python KNN最近邻分类算法

    KNN最近邻算法:利用向量之间的距离来分类。
    步骤:
    第一步:计算新样本与已知分类样本之间的距离。
    第二步:将所求距离按从小到大排列。
    第三步:选取距离最近的k个样本。
    第四步:将新样本归为以上k个样本大多数中的一类。
    以下为KNN最近邻分类算法的python代码:
    第一部分:KNN分类代码
     View Code

    第二部分:KNN测试代码

     View Code

    Python 决策树算法(ID3 &C4.5)

    决策树(Decision Tree)算法:按照样本的属性逐步进行分类,为了能够使分类更快、更有效。每一个新分类属性的选择依据可以是信息增益IG和信息增益率IGR,前者为最基本的ID3算法,后者为改进后的C4.5算法。

    以ID3为例,其训练过程的编程思路如下:

    (1)输入x、y(x为样本,y为label),行为样本,列为样本特征。

    (2)计算信息增益IG,获取使IG最大的特征。

    (3)获得删除最佳分类特征后的样本阵列。

    (4)按照最佳分类特征的属性值将更新后的样本进行归类。

    属性值1(x1,y1)    属性值2(x2,y2)    属性值(x3,y3)

    (5)分别对以上类别重复以上操作直至到达叶节点(递归调用)。

    叶节点的特征:

    (1)所有的标签值y都一样。

    (2)没有特征可以继续划分。

    测试过程的编程思路如下:

    (1)读取训练好的决策树。

    (2)从根节点开始递归遍历整个决策树直到到达叶节点为止。

    以下为具体代码,训练后的决策树结构为递归套用的字典,其是由特征值组成的索引加上label组成的。

     View Code

    Python K均值聚类

    Python K均值聚类是一种无监督的机器学习算法,能够实现自动归类的功能。

    算法步骤如下:

    (1)随机产生K个分类中心,一般称为质心。

    (2)将所有样本划分到距离最近的质心代表的分类中。(距离可以是欧氏距离、曼哈顿距离、夹角余弦等)

    (3)计算分类后的质心,可以用同一类中所有样本的平均属性来代表新的质心。

    (4)重复(2)(3)两步,直到满足以下其中一个条件:

        1)分类结果没有发生改变。

        2)最小误差(如平方误差)达到所要求的范围。

        3)迭代总数达到设置的最大值。

    常见的K均值聚类算法还有2分K均值聚类算法,其步骤如下:

    (1)将所有样本作为一类。

    (2)按照传统K均值聚类的方法将样本分为两类。

    (3)对以上两类分别再分为两类,且分别计算两种情况下误差,仅保留误差更小的分类;即第(2)步产生的两类其中一类保留,另一类进行再次分类。

    (4)重复对已有类别分别进行二分类,同理保留误差最小的分类,直到达到所需要的分类数目。

    具体Python代码如下:

     View Code

    Python股票历史涨跌幅数据获取

    股票涨跌幅数据是量化投资学习的基本数据资料之一,下面以Python代码编程为工具,获得所需要的历史数据。主要步骤有:

    (1) #按照市值从小到大的顺序活得N支股票的代码;

    (2) #分别对这一百只股票进行100支股票操作;

    (3) #获取从2016.05.01到2016.11.17的涨跌幅数据;

    (4) #选取记录大于40个的数据,去除次新股;

    (5) #将文件名名为“股票代码.csv”。

    具体代码如下:

     View Code

    Python Logistic 回归分类

     Logistic回归可以认为是线性回归的延伸,其作用是对二分类样本进行训练,从而对达到预测新样本分类的目的。
    假设有一组已知分类的MxN维样本X,M为样本数,N为特征维度,其相应的已知分类标签为Mx1维矩阵Y。那么Logistic回归的实现思路如下:
    (1)用一组权重值W(Nx1)对X的特征进行线性变换,得到变换后的样本X’(Mx1),其目标是使属于不同分类的样本X’存在一个明显的一维边界。
    (2)然后再对样本X’进一步做函数变换,从而使处于一维边界两测的值变换到相应的范围之内。
    (3)训练过程就是通过改变W尽可能使得到的值位于一维边界两侧,并且与已知分类相符。
    (4)对于Logistic回归,就是将原样本的边界变换到x=0这个边界。
    下面是Logistic回归的典型代码:

     View Code

    Python 朴素贝叶斯(Naive Bayes)分类

    Naïve Bayes 分类的核心是计算条件概率P(y|x),其中y为类别,x为特征向量。其意义是在x样本出现时,它被划分为y类的可能性(概率)。通过计算不同分类下的概率,进而把样本划分到概率最大的一类。

    根据条件概率的计算公式可以得到:

    P(y|x) = P(y)*P(x|y)/P(x)。

          由于在计算不同分类概率是等式右边的分母是相同的,所以只需比较分子的大小。并且,如果各个样本特征是独立分布的,那么p(x

    |y)等于p(xi|y)相乘。

          下面以文本分类来介绍Naïve Bayes分类的应用。其思路如下:

    (1)建立词库,即无重复的单词表。

    (2)分别计算词库中类别标签出现的概率P(y)。

    (3)分别计算各个类别标签下不同单词出现的概率P(xi|y)。

    (4)在不同类别下,将待分类样本各个特征出现概率((xi|y)相乘,然后在乘以对应的P(y)。

    (5)比较不同类别下(4)中结果,将待分类样本分到取值最大的类别。

    下面是Naïve Bayes 文本分类的Python代码,其中为了方便计算,程序中借助log对数函数将乘法转化为了加法。

     View Code

    Python股票历史数据预处理(一)

    在进行量化投资交易编程时,我们需要股票历史数据作为分析依据,下面介绍如何通过Python获取股票历史数据并且将结果存为DataFrame格式。处理后的股票历史数据下载链接为:http://download.csdn.net/detail/suiyingy/9688505。

    具体步骤如下:

    • (1) 建立股票池,这里按照股本大小来作为选择依据。
    • (2) 分别读取股票池中所有股票的历史涨跌幅。
    • (3) 将各支股票的历史涨跌幅存到DataFrame结构变量中,每一列代表一支股票,对于在指定时间内还没有发行的股票的涨跌幅设置为0。
    • (4) 将DataFrame最后一行的数值设置为各支股票对应的交易天数。
    • (5) 将DataFrame数据存到csv文件中去。

    具体代码如下:

     View Code

    Python股票历史数据预处理(二)

    从网上下载的股票历史数据往往不能直接使用,需要转换为自己所需要的格式。下面以Python代码编程为工具,将csv文件中存储的股票历史数据提取出来并处理。处理的数据结果为是30天涨跌幅子数据库,下载地址为:http://download.csdn.net/detail/suiyingy/9688605。

    主要步骤有(Python csv数据读写):

    • #csv文件读取股票历史涨跌幅数据;
    • #随机选取30个历史涨跌幅数据;
    • #构建自己的数据库;
    • #将处理结果保存为新的csv文件。

    具体代码如下:

     View Code

    http://blog.sina.com.cn/s/articlelist_6017673753_0_1.html

  • 相关阅读:
    转载高效的MySQL分页 枫
    [笔记]NFC笔记——WUP_REQ 和 WUP_RES 消息结构
    [笔记]NFC笔记——PSL_REQ 和 PSL_RES 消息结构
    [笔记]C语言中二级指针简单例子
    [笔记]NFC协议规范学习笔记汇总
    [笔记]C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
    [笔记]如何限制用户在5分钟之后才能重复同样操作
    [笔记]NFC笔记——ATR_RES 消息结构
    简单的具备自动检测行为的文本框控件
    多重AutoComplete的Textbox
  • 原文地址:https://www.cnblogs.com/freeliver54/p/15378960.html
Copyright © 2011-2022 走看看