精华内容
下载资源
问答
  • 通过保存的数据计算涨幅,并获取涨幅最大的股票 计算某段时间内的平均价格 实行买卖的判断 买操作 卖操作 画图,实现数据可视化 代码实现 做最开始的初始化 1. 输入参数的初始化 codes 传入所需要分析的代码 列表...
  • 基于JavaFPX的股票数据分析,图形化界面,动态展示股票的涨跌趋势,在该项目中绘制了八条数据进行比对参考
  • 股票数据分析

    千次阅读 2021-11-02 14:59:32
    股票数据分析 前面我们介绍了Spark 和 Spark SQL,今天我们就使用 Spark SQL来分析一下我们的数据,今天我们主要分析一下股票数据 数据准备 交易数据 我们拿到了最近几年的交易数据 下面是具体的数据格式,csv 文件...

    股票数据分析

    前面我们介绍了Spark 和 Spark SQL,今天我们就使用 Spark SQL来分析一下我们的数据,今天我们主要分析一下股票数据

    数据准备

    这里郑重申明,我们的全部数据来自tushare, tushare 是一个免费提供各类金融数据 , 助力智能投资与创新型投资的社区,也鼓励大家对社区多多支持和赞助。

    交易数据

    我们拿到了最近几年的交易数据

    image-20211102135832078

    下面是具体的数据格式,csv 文件,ts_code 对于的是一个股票代码

    image-20211102140032431

    股票详情数据

    image-20211102140145915

    日期数据

    因为股票市场不是天天开的,只有交易日才开门,下面就是我们的交易日数据

    image-20211102140309350

    数据分析

    当然这里我们的分析并不是教大家去怎么买卖股票,我们的目标是为了学习Spark ,所以我们下面就有一些例子,当然大家也可以自行去补充

    统计每天的成交额

    下面我们统计一下每天的成交额,这也是最简单的了

    def lastDaysamount(): Unit ={
        sql(
          """
            |select
            |   trade_date,sum(amount) as amount
            |from
            |   trade
            |group by
            |   trade_date
            |order by
            |   trade_date desc
            |limit
            |   20
            |""".stripMargin
        ).show(20,false)
    
      }
    

    统计结果

    +----------+---------------------+
    |trade_date|amount               |
    +----------+---------------------+
    |20211101  |1.2228828557399983E12|
    |20211029  |1.1381616219410015E12|
    |20211028  |1.1072842704220002E12|
    |20211027  |1.0765778557610035E12|
    |20211026  |1.0821421444879968E12|
    |20211025  |1.0145576773829996E12|
    |20211022  |1.0149981487659999E12|
    |20211021  |9.92753188046003E11  |
    |20211020  |1.0197585589460028E12|
    |20211019  |9.730877555890015E11 |
    |20211018  |1.0019797845380023E12|
    |20211015  |9.888019904729999E11 |
    |20211014  |8.606463289579985E11 |
    |20211013  |8.894112029519983E11 |
    |20211012  |9.962537488750033E11 |
    |20211011  |9.918985312839995E11 |
    |20211008  |1.0603440896720006E12|
    |20210930  |9.502251816350017E11 |
    |20210929  |1.0775000013559976E12|
    |20210928  |1.043524548934001E12 |
    +----------+---------------------+
    

    过去n天连续涨停的票

    这个分析是这样的,用户输入一个数字n则代表的是过去n天,我们要做的的是筛选出过去连涨停n天、连涨停n-1天、连涨停n-2天一直到n-(n-1)天连续涨停的票,其实这个实现起来还是有一定难度的,因为这里有个累积的效果,而且就是连续涨停n天的票一定是涨停n-1天的,但是我们需要将它算在n 天里而不是n-1天,还 有就是我们的连续涨停是相对昨天的,例如昨天前天就是连续两次涨停,昨天前天大前天就是连续三次涨停。

    数据准备
    def main(args: Array[String]): Unit = {
      // 股票交易数据
       val data=spark
         .read
         .option("header", true)
         .csv(path)
         .select("ts_code","trade_date","open","high","low","close","pre_close","change","pct_chg","vol","amount")
    
       // close 收盘价   pre_close 昨收价  change 涨跌额  pct_chg 	涨跌幅   vol 成交量 (手)  amount	 成交额 (千元)
       data.createOrReplaceTempView("trade")
       
      // 股票基本数据
       val stocks=spark
         .read
         .option("header", true)
         .csv(stocksPath)
       stocks.createOrReplaceTempView("stocks")
      
       // 连续涨停的方法 
       lastContinueDays(5)
    
    }
    
    for循环实现

    因为直接使用SQL很难实现,所以我们这里使用了混合编程的方式,也就是借助scala 的for 循环和SQL 来配合实现

    /**
     *
     * @param n 连续多少天
     */
    def lastContinueDays(n:Int): Unit ={
      // 因为我们的n 是指n个交易日的数据,这里为了方便所以我们直接多取了一段时间的数据,直接来了个2倍,好的做法是你取dates 里面查
      val startDate = LocalDate.now().plusDays(-2*n).format(DateTimeFormatter.ofPattern("yyyyMMdd"))
      
      // 创建了一个空的实图,后面需要把for 循环里面的数据放到这个试图里面
      sql(
        """
          |select
          |   0 as days,null as ts_code,null as name,null as industry,null as market
          |""".stripMargin
      ).createOrReplaceTempView("base")
      
      // 循环实现上面的效果
      for(i <- 1 to n){
        sql(
          s"""
            |select
            |  ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,rn
            |from(
            |   select
            |      ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,row_number() over(partition by ts_code order by trade_date desc) as rn
            |   from
            |      trade
            |   where
            |     -- 时间要换掉 大致的过滤条件
            |     trade_date>='${startDate}'
            |)tmp
            |where
            |   -- 过去多少天
            |   rn<=$i
            |""".stripMargin
        ).createOrReplaceTempView("continuedays")
        // 更新数据到试图里
        sql(
          s"""
            |select
            |   $i as days,a.ts_code,b.name,b.industry,b.market
            |from(
            |   select
            |      ts_code
            |   from(
            |     select
            				-- pct_chg >=9.8涨停的定义
            |        ts_code,count(if(pct_chg>=9.8,ts_code,null)) as cnt
            |     from
            |        continuedays
            |     group by
            |        ts_code
            |   )tmp
            |   where
            |      cnt>=$i
            |) a
            |inner join
            |   stocks b
            |on
            |  a.ts_code=b.ts_code
            |union
             -- 获取到上一次for 循环的结果 
            |select
            |   days,ts_code,name,industry,market
            |from
            |   base
            |""".stripMargin
        ).createOrReplaceTempView("base")
        // 展示最后的结果
         sql(
          """
            |select
            |   days,ts_code,name,industry,market
            |from(
            |   select
            |      days,ts_code,name,industry,market,row_number()over(partition by ts_code order by days desc) as rn
            |   from
            |      base
            |)tmp
            |where
            |  rn=1
            |  and days!=0
            |order by
            |   days
            |""".stripMargin
        ).show(2000,false)
        
      }
    

    我们看一下我们最终的效果,days 就是涨停的天数

    +----+---------+-----------+--------+------+
    |days|ts_code  |name       |industry|market|
    +----+---------+-----------+--------+------+
    |1   |603738.SH|泰晶科技   |元器件  |主板  |
    |1   |301018.SZ|申菱环境   |专用机械|创业板|
    |1   |300735.SZ|光弘科技   |通信设备|创业板|
    |1   |300438.SZ|鹏辉能源   |电气设备|创业板|
    |1   |603920.SH|世运电路   |元器件  |主板  |
    |1   |002454.SZ|松芝股份   |汽车配件|中小板|
    |1   |002463.SZ|沪电股份   |元器件  |中小板|
    |1   |300594.SZ|朗进科技   |运输设备|创业板|
    |1   |300365.SZ|恒华科技   |软件服务|创业板|
    |1   |002483.SZ|润邦股份   |工程机械|中小板|
    |1   |600295.SH|鄂尔多斯   |钢加工  |主板  |
    |1   |603505.SH|金石资源   |矿物制品|主板  |
    |1   |002610.SZ|爱康科技   |电气设备|中小板|
    |1   |688059.SH|华锐精密   |机械基件|科创板|
    |1   |603901.SH|永创智能   |专用机械|主板  |
    |1   |603665.SH|康隆达     |纺织    |主板  |
    |1   |600683.SH|京投发展   |区域地产|主板  |
    |1   |688789.SH|宏华数科   |专用机械|科创板|
    |1   |688518.SH|联赢激光   |专用机械|科创板|
    |1   |603115.SH|海星股份   |元器件  |主板  |
    |1   |603380.SH|易德龙     |元器件  |主板  |
    |1   |300681.SZ|英搏尔     |汽车配件|创业板|
    |1   |003043.SZ|华亚智能   |专用机械|中小板|
    |1   |300835.SZ|龙磁科技   |元器件  |创业板|
    |1   |600330.SH|天通股份   |元器件  |主板  |
    |1   |605338.SH|巴比食品   |食品    |主板  |
    |1   |688683.SH|莱尔科技   |化工原料|科创板|
    |1   |300170.SZ|汉得信息   |软件服务|创业板|
    |1   |001288.SZ|运机集团   |专用机械|主板  |
    |1   |002522.SZ|浙江众成   |塑料    |中小板|
    |1   |300990.SZ|同飞股份   |专用机械|创业板|
    |1   |300953.SZ|震裕科技   |机械基件|创业板|
    |1   |002701.SZ|奥瑞金     |广告包装|中小板|
    |1   |603105.SH|芯能科技   |电气设备|主板  |
    |1   |000931.SZ|中关村     |生物制药|主板  |
    |1   |002571.SZ|德力股份   |玻璃    |中小板|
    |1   |300617.SZ|安靠智电   |电气设备|创业板|
    |1   |002916.SZ|深南电路   |元器件  |中小板|
    |1   |603948.SH|建业股份   |化工原料|主板  |
    |1   |300260.SZ|新莱应材   |机械基件|创业板|
    |2   |688033.SH|天宜上佳   |运输设备|科创板|
    |2   |603348.SH|文灿股份   |汽车配件|主板  |
    |2   |300052.SZ|中青宝     |互联网  |创业板|
    |2   |688008.SH|澜起科技   |半导体  |科创板|
    |2   |603399.SH|吉翔股份   |小金属  |主板  |
    |2   |002837.SZ|英维克     |专用机械|中小板|
    |2   |603088.SH|宁波精达   |专用机械|主板  |
    |2   |603063.SH|禾望电气   |电气设备|主板  |
    |2   |603836.SH|海程邦达   |仓储物流|主板  |
    |2   |002824.SZ|和胜股份   |铝      |中小板|
    |2   |600742.SH|一汽富维   |汽车配件|主板  |
    |2   |601218.SH|吉鑫科技   |机械基件|主板  |
    |2   |605286.SH|同力日升   |运输设备|主板  |
    |2   |600696.SH|岩石股份   |区域地产|主板  |
    |3   |002805.SZ|丰元股份   |化工原料|中小板|
    |3   |002815.SZ|崇达技术   |元器件  |中小板|
    |3   |600556.SH|天下秀     |互联网  |主板  |
    +----+---------+-----------+--------+------+
    

    其实这里有一个问题,那就是我们认为每个股票不论涨跌它都应该出现在我们的数据里,其实实际情况不是这样的,可以有的股票被查封导致有一段时间是是没有它的交易数据的,所以我们上面使用row_number 排序取出来的数本身就是不连续的,例如下面的南岭民爆,我们发现它在20211019 号涨停之后一段时间没有数据,但是在20211103的时候又发生了一次涨停

    image-20211104140250156

    也就是说我们要把这样的数据过滤掉,这个逻辑我就不再去写了了,因为很简单,而且我们的重点是SQL 实现,总觉得这种代码实现有点不优雅

    SQL 实现

    这个实现方式是我后来在车上和少爷讨论的时候想到的,其实这里的连续涨停和我们前面说的最大连续登陆有点不一样,那就是我们的大A股市其实在时间上是不连续的,例如周末以及节假日,这里你可以先看一下Hive实战之最大连续登陆,所以说股票它的数据理论上是没办法连续的,而且我们也不是求一段时间的最大连续涨停,我们是计算截止到昨天的连续涨停,例如昨天前天就是连续两次涨停,昨天前天大前天就是连续三次涨停,也就是说我们的时间截至点是昨天。

    第一版

     sql(
          s"""
             |select
             |  ts_code,
             |  min_trade_date as start_date,
             |  max_trade_date as end_date,
             |  days as continuedays
             |from(
             |  select
             |    ts_code,
             |    min(trade_date) as min_trade_date,
             |    max(trade_date) as max_trade_date,
             |    -- 涨停天数
             |    count(1) as days
             |  from(
             |     select
             |       ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,rn
             |     from(
             |        select
             |           ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,row_number() over(partition by ts_code order by trade_date desc) as rn
             |        from
             |           trade
             |        where
             |          -- 时间要换掉 大致的过滤条件
             |          trade_date>='${startDate}'
             |     )tmp
             |     where
             |        -- 过去多少天
             |        rn<=10
             |        -- 涨停的数据
             |        and pct_chg>=9.8
             |  )
             |  group by
             |    ts_code
             |)where
             |  -- 截止到昨天也是涨停的,这个日期要换成业务真实日期
             |  max_trade_date='20211103'
             |  -- 判断是不是连续的
             |  and datediff(to_date(max_trade_date,'yyyymmdd'),to_date(min_trade_date,'yyyymmdd'))=days-1
             |order by
             |  days,ts_code desc
             |""".stripMargin
        ).show(2000,false)
    

    其实这里是有问题的,那就是判断是不是连续的条件上,这种判断方式其实是要求时间是真实连续的,也就是如果出现节假日我们这里就不算它是连续涨停,但是我们知道对于股票数据这是要算的,所以这里的我们要重新判断一下这个连续条件。

    前面我们说了,我们有一个交易日期的数据表,这个里面记录了每一次的交易日数据,如果我们的days 和我们的交易日数据一致的话,那我们就可以认为它是连涨的

    第二版

    有了第一版之后,我们很容易改进这个实现

      sql(
          s"""
             |select
             |  ts_code,
             |  start_date,
             |  end_date,
             |  cal_dates as continuedays,
             |  days
             |from(
             |select
             |  ts_code,
             |  max(min_trade_date) as start_date,
             |  max(max_trade_date) as end_date,
             |  max(days) as days,
             |  count(dates.cal_date) as cal_dates
             |from(
             |  select
             |    ts_code,
             |    min_trade_date,
             |    max_trade_date,
             |    days
             |  from(
             |    select
             |      ts_code,
             |      min(trade_date) as min_trade_date,
             |      max(trade_date) as max_trade_date,
             |      -- 涨停天数
             |      count(1) as days
             |    from(
             |       select
             |         ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,rn
             |       from(
             |          select
             |             ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,row_number() over(partition by ts_code order by trade_date desc) as rn
             |          from
             |             trade
             |          where
             |            -- 时间要换掉 大致的过滤条件
             |            trade_date>='${startDate}'
             |            and ts_code='600556.SH'
             |       )tmp
             |       where
             |          -- 过去多少天
             |          rn<=10
             |          -- 涨停的数据
             |          and pct_chg>=9.8
             |    )
             |    group by
             |      ts_code
             |  )where
             |    -- 截止到昨天也是涨停的
             |    max_trade_date='20211103'
             |) stocks
             |inner join
             |  dates dates
             |on
             |  dates.cal_date>=stocks.min_trade_date
             |  and dates.cal_date<=stocks.max_trade_date
             |  -- 是否是交易日
             |  and dates.is_open=1
             |group by
             |  ts_code
             |)
             |order by
             |  days,ts_code desc
             |""".stripMargin
        ).show(2000,false)
    

    这个SQL 的确跑出来数据,这个的实现原理就是我们首先拿到最大的涨停日期,和最小的日期,然后判断这两个日期之间的交易日的个数和我们的涨停数据的个数,如果相等那就说明涨停是连续的,否则不连续但是我后来发现它还是不对的,它会遗漏一些情况下的数据,举个例子来看一下,

    例如在最近5天内,“1、2 号是连涨停的,3号没有 ,4、5号是连续涨停的”

    这个时候,我们发现最大和最小之间是有5个交易日的,所以1号到5号是不连续的,但是4号和5号是连续的,上面的计算逻辑就会导致我们忽略掉4号和5号的数据。

    第三版

    这是我第二天想到的,其实第一版和第二版都是在昨天早上想到的,第三版是我在昨天晚上江边散步的时候想到的,

    既然我们找到了问题所在,我们可以这样做,来解决问题,我们构造这样的一个表,这里都是涨停的数据构造的,所以没有3号的数据

    ts_codestart_dateend_date
    300835.SZ15
    300835.SZ25
    300835.SZ45
    300835.SZ55

    有了这张表之后,我们再在这个基础上,计算两个东西,一个就是我们前面计算过的涨停天数,另外一个就是交易日期的个数,计算的范围就是我们的start_date和end_date

    ts_codestart_dateend_date涨停天数交易天数
    300835.SZ1545
    300835.SZ2534
    300835.SZ4522
    300835.SZ5511

    有了这个表格之后我们筛选出涨停天数和交易天数相等的记录,然后我们再筛选出涨停天数最大的即可

      // 每次拿特定日期的过去10天的数据 这里我们为了避免因为节假日的原因,拿了过去一个月的数据,然后通过排序的方式再筛选出10天
        val startDate = LocalDate.now().plusDays(-30).format(DateTimeFormatter.ofPattern("yyyyMMdd"))
        val lastDate = LocalDate.now().plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd"))
    
        // 首先选出涨停的票,因为这张表我们要多次用到,所以我们单独创建了一个试图,你以可以使用with 语法和下面的的sql 整合
        sql(
          s"""
            |select
            |  ts_code,trade_date,$lastDate as end_date
            |from(
            |   select
            |      ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,row_number() over(partition by ts_code order by trade_date desc) as rn
            |   from
            |      trade
            |   where
            |     -- 时间要换掉 大致的过滤条件
            |     trade_date>='${startDate}'
            |)tmp
            |where
            |   -- 过去10条记录(这里注意一下不一定是过去10天的)
            |   rn<=10
            |   -- 涨停的数据
            |   and pct_chg>=9.8
            |""".stripMargin
    
        ).createOrReplaceTempView("zhangting")
        
        sql(
          """
            |select
            | ts_code,trade_date,end_date,zt_cnt
            |from(
            | select
            |  ts_code,
            |  trade_date,
            |  end_date,
            |  zt_cnt,
            |  row_number()over(partition by ts_code order by zt_cnt desc) as rn
            | -- 筛选出 zt_cnt最大的记录
            | from(
            |  select
            |    a.ts_code,
            |    a.trade_date,
            |    a.end_date,
            |    count(distinct b.trade_date) as zt_cnt
            |  from
            |   zhangting a
            |  left join
            |   zhangting b
            |  on
            |   a.ts_code=b.ts_code
            |   and a.trade_date<=b.trade_date
            |   and a.end_date>=b.trade_date
            |  left join
            |    dates dates
            |  on
            |    dates.cal_date>=a.trade_date
            |    and dates.cal_date<=a.end_date
            |    -- 是否是交易日
            |    and dates.is_open=1
            |  group by
            |   a.ts_code,a.trade_date,a.end_date
            |  having
            |   count(distinct b.trade_date)=count(distinct dates.cal_date)
            | )t
            |)t
            |where
            | rn=1
            |order by
            | zt_cnt
            |""".stripMargin
        ).show(2000,false)
    

    下面就是我们的计算结果

    image-20211105113614670

    而且这里我把第一版和第三版的计算结果进行了对比,完全对的上,这也说明我们的计算是正确的

    image-20211105113721884

    总结

    今天我们通过使用 Spark SQL来分析股票数据,但是分析的目的不是为了买股票,而是为了学习和掌握Spark SQL。

    在逻辑的实现上我们可以看到Spark SQL非常的灵活,可以使用混合编程,来完成我们复杂的业务逻辑。

    还有就是过去n天连续涨停的票,其实整个计算还是很有难度的,因为股票的交易数据日期本来就不连续。

    展开全文
  • 对时间序列聚类方法做了相关的理论知识简介,进而进行时间序列股票数据聚类分析,在此基础上,对本文设计的基于时间序列聚类分析的股票数据分析系统进行需求分析、架构设计及实现,进而从系统功能和性能上进行了测试...
  • 本仓库包括一个基于python和flask框架开发的股票分析平台,该平台利用tushare库获取股市的实时行情、历史行情以及个股相关财务数据,结合scrapy爬取雪球的个股年报财务数据,通过pandas库对数据进行统计分析,得到...
  • 基于粗糙集聚类算法的股票数据分析方法研究.pdf
  • 数据科学(十三)功能分析波动幅度对复权收盘价进行重采样增长曲线增长倍数最高增长倍数最大年均复合增长率当前...# 股票数据分析 ## 分析波动幅度 print('1.分析波动幅度') datadir = 'yahoo-data' fname = '002001.c
  • Python股票数据分析

    千次阅读 2021-01-14 23:41:29
    数据挖掘入门与实战 公众号: datadwpython版本:3.4最近在学习基于python的股票数据分析,其中主要用到了tushare和seaborn。tushare是一款财经类数据接口包,国内的股票数据还是比较全的,官网地址:...

    数据挖掘入门与实战 公众号: datadw

    python版本:3.4

    最近在学习基于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'))

    数据挖掘入门与实战

    教你机器学习,教你数据挖掘

    公众号: weic2c

    据分析入门与实战

    展开全文
  • 股票趋势预测报告-股票数据分析[亚丁].pdf 股票趋势预测报告,附件中是我很久前做的分析报告
  • 目录:23.1 使用Matplotlib绘制图表23.1.1 安装Matplotlib23.1.2 图表基本构成要素23.1.3 绘制折线图23.1.4 绘制柱状图23.1.5 绘制饼状图23.1.6 绘制散点图23.1.7 绘制子图表项目实战:纳斯达克股票数据分析
  • 利用python进行股票数据分析

    千次阅读 2020-12-13 13:22:22
    个人觉得这问题问的不太对,说句不好的话,你是来搞编程的还是做股票的。当然,如果题主只是用来搜集资料,看数据的话那还是可以操作一波的,至于python要怎么入门,个人下面会推荐一些入门级的书籍,通过这些书籍,...

    个人觉得这问题问的不太对,说句不好的话,你是来搞编程的还是做股票的。

    当然,如果题主只是用来搜集资料,看数据的话那还是可以操作一波的,至于python要怎么入门,个人下面会推荐一些入门级的书籍,通过这些书籍,相信楼主今后会有一个清晰的了解(我们以一个完全不会编程的的新手来看待)。

    《Learn Python The Hard Way》,也就是我们所说的笨办法学python,这绝对是新手入门的第一选择,里面话题简练,是一本以练习为导向的教材。有浅入深,而且易懂。

    《Python学习手册》这也是本入门书籍,不过会偏理论化些,里面有很多关于学习Python的一些前提知识。建议新手可以读一下,粗略了解一些即可。

    《利用 Python 进行数据分析》,这本应该就是题主要深刻研究的书籍了,如果真想要用其炒股,这本就是必备的了。在里面你可以真正学习到怎么用Python编程进行数据分析。

    其它的像什么,《Python源码剖析》,《集体智慧编程》,《Python核心编程(第二版)》等题主都可以适当的选择参读下,相信都会对题主有所帮助。

    最后,还是要重复上面的话题,炒股不是工程学科,它有太多的变数,对于现在的智能编程来说,它还没有办法及时的反映那些变数,所以,只能当做一种参考,千万不可过渡依赖。

    结语:pyhton相对来说是一种比较高端的学科,需要有很强的逻辑能力。所以入门是非常困难的,如果真的要学习,是需要很大的毅力去坚持下去的,而且不短时间就能入门了,要有所心理准备。

    展开全文
  • Python3 量化投资,股票数据分析
  • 基于Pandas的股票数据分析

    千次阅读 2021-01-11 18:24:34
    以云南白药作最近5年的数据作为分析对象,股票代码:000538 数据获取 通过 Tushare 获取数据数据接口地址 获取最近5年交易数据,格式如图 clouse 表示收盘价,pre_close 表示前一日收盘价 open 表示开盘价,high...

    以下分析纯属自娱自乐

    云南白药作最近5年的数据作为分析对象,股票代码:000538

    数据获取

    通过 Tushare 获取数据,数据接口地址

    在这里插入图片描述

    1. 获取最近5年交易数据,格式如图
    2. clouse 表示收盘价,pre_close 表示前一日收盘价
    3. open 表示开盘价,high 表示当日最高价, low 表示当日最低价
    4. pct_chg 表示当日的涨跌幅度,由收盘价与前一日收盘价计算获得

    增加数据

    由于上面的数据缺少当天最低价的百分比,需要自己加上,效果如下:
    在这里插入图片描述

    1. 增加了 pct_low 列,表示当日最低时股价下跌的幅度

    涨跌分布

    收盘涨跌分布图:
    在这里插入图片描述
    在这里插入图片描述

    1. round(0) 表示四舍五入到个位,方便统计
    2. 从图上可以看到,跌幅超过 4% 的概率就非常小了

    分析

    先来看看如果在跌到 %5 时进行买入并在当日收盘时卖出的策略: 在这里插入图片描述

    1. 可以看到,当股价跌到 %5 时买入,并在盘尾卖出的的策略并没有产生正的收益
    2. mean() 表示求这一列的平均值

    再来试试 %4
    在这里插入图片描述
    虽然收益正了,但也并不多

    结论

    对于云南白药来说,当股价跌到 %5 时买入,并在盘尾卖出的的策略并不能取得好的收益

    展开全文
  • 股票数据分析公司网页模板
  • Python数据分析:股票数据分析案例

    万次阅读 多人点赞 2019-05-01 15:54:26
    Python数据分析:股票数据分析案例 步骤: 准备数据 可视化数据、审查数据 处理数据 根据ACF、PACF定阶 拟合ARIMA模型 预测 import pandas as pd import pandas_datareader import datetime import matplotlib....
  • 用python进行yahoo股票数据分析一文中所用的的代码
  • 一、简介 结合市场经验自己开发的股市数据抓取与分析工具,可以大幅提高市场跟踪效率。...9、自动抓取权威机构股票分析数据,包括资金流向、综合评分、持仓建议等。 10、基于权威模型进行量化分析,助您感知多空情绪。
  • 摘要:金融领域一向都是与数学...特别是近年来大数据和计算机技术的发展,算法成为投资领域的重要决策手段之一,算法交易也成为重要的股票交易技术,特别是高频交易(HFT),量化投资等依赖机器算法的模型越来越流行。...
  • 小白的股票数据分析

    千次阅读 2017-04-09 09:08:33
    小白的数据分析之路
  • 2. 允许⽤户通过模糊查询股票名,⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3. 允许按股票价格、涨跌幅、换⼿率这⼏列来筛选信息,⽐如输⼊“价格>50”则把价格⼤于50的股票 都打印,输⼊...
  • R语言:医药股票数据分析

    千次阅读 2020-06-13 23:21:22
    本篇文章从我国医药行业中选取四只较为典型的股票数据作为背景,使用R语言进行分析。文章主要包括以下几部分内容: 1. 加载相关程序包 2. 获取股票数据 3. 绘制股票k线图 4. 股票对数收益率 5. 绘制布林线指标 6. ...
  • 使用R语言基于新浪股票数据分析金融数据的 统计常识
  • 金融业使用高等数学和统计已经有段时日。早在八十年代以前,银行业和金融业被认为是“枯燥”的;...(一份赋予股票持有者以一定的价格从股票发行者手中买入和卖出的合同)。但是,不好的统计模型,包括布莱克-
  • python之股票数据分析

    千次阅读 2018-02-25 17:08:11
    一、初识PandasPandas 是基于 NumPy 的一个非常好用的库,它有两种自己独有的基本数据结构Series (一维)和 DataFrame(二维),它们让数据操作更简单...在金融数据分析领域,Pandas更是起到了非常重要的作用,比如...
  • 基于ICA的时间序列聚类方法及其在股票数据分析中的应用.pdf
  • 基于Python和PyQt5的股票数据分析系统

    千次阅读 多人点赞 2020-03-26 16:32:10
    一个简单的股票数据分析系统,实现了对A股所有个股的查询和分析,技术指标主要是MA和MACD。 因为我刚开始学不久,用到的Python技术只是一点皮毛,里面有很多不懂的地方,所以制作出来的系统很简单,功能也很少。 ....
  • R语言--股票数据分析

    千次阅读 2017-08-08 17:23:02
    (本实验是以股票数据作为分析背景,股票数据如何从雅虎财经板块上获取,观察股票每日价格和成交量数据开始,接着计算某一支股票数据中比较重要的日度收益率。然后通过各种股票线图进行技术分析,最后在一支股票的...
  • 主要实现对股票等金融数据数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,689
精华内容 23,075
关键字:

股票数据分析