数据分析编程从到:股票连涨分析

"本文讨论股票连涨问题,为了避免歧义,这里约定:股票连涨天数包括起始的 1 天,比如连涨 5 天意味着这 5 天内股票都在上涨,实际上只有从第 2 天开始的 4 次上涨。 数据结构和样例数据: .."

本文讨论股票连涨问题,为了避免歧义,这里约定:股票连涨天数包括起始的 1 天,比如连涨 5 天意味着这 5 天内股票都在上涨,实际上只有从第 2 天开始的 4 次上涨。

数据结构和样例数据:

其中 CODE 是股票代码,DT 是交易日期,CL 是收盘价。

以代码是 100046 的股票为例,写出 SQL 语句:

这个语句使用窗口函数后仍然有多层嵌套,读懂都很困难,编写、调试的过程就更困难了。

其实,这个问题并不难,容易想出符合自然思维的解题步骤:将该股票的数据按日期排序,上一条记录就是上一个交易日的数据。再准备一个变量存储连涨天数,初值为 1。用每条记录的收盘价和上一条记录的收盘价比较,如果涨了则将该变量加 1,未涨则将其重置为 1。我们把每条记录对应的这个变量值记入一个新的 UP 列中,即可得到下面的表:

当所有记录都遍历过后,UP 列的最大值就是最长的连涨天数。

但 SQL 对过程式计算的支持力度太弱,不用存储过程很难实现这个思路。上面那句 SQL 实际上是换了一种方法:累计从初始日期到当日的未上涨天数。对于连续上涨的交易日,对应的累计未上涨天数都相同。那么按这个累计未上涨天数分组就能得到一些连续上涨的区间,再求分组计数的最大值,即可得到结果。

这个方法的关键在于把数据分组,每个组都是连涨的日期区间,但 SQL 没有直接提供有序分组,只能借助累计未上涨天数将有序分组转换成普通的等值分组,整个过程非常绕。判断上涨和计算累计值都需要窗口函数配合子查询才能实现,结果就是两个窗口函数且嵌套四层的情况,代码难写难懂。

SPL 有和常规程序语言一样的过程式计算能力,可以轻松实现前面讲的自然思路。SPL 特有的循环函数还可以避免编写多句循环结构代码:

=1

A1 从 excel 文件中读入股票数据。SPL 的 IDE 有很好的交互性,可以单步执行并随时在右边的面板中直观地查看到每一步的结果:

B1 过滤出代码为 100046 的股票数据,A2 按照交易日期排序,B2 用作前面说的变量,初值是 1。

A3 就是实现上面讲过的思路,计算出 UP 列。这里 derive 就是一个循环函数,直接针对集合实施循环处理,不必再写 for…next 这样的多条语句块。SPL 在循环函数中支持跨行引用,简单用 CL>CL[-1] 就可以判断出是否上涨,其中 CL[-1] 就是上一行的收盘价。

A4 计算 UP 的最大值,得到最长连涨的天数。

熟悉 SPL 编程后,可以把关键计算逻辑写到一起,省略生成 UP 列:

=1

SPL 还有很强的有序计算能力,即使实现前面那句 SQL 的思路也更简单:

A3 中 group@i 是 SPL 特有的有序分组函数,它会在参数表达式 CL<=CL[-1] 为真时,也就是股票没有涨价的情况下,产生新的分组。可以利用日期的有序性,直接把连续上涨的记录分到同一组,避免了像 SQL 那样先算累计值,再用累计值等值分组来凑出有序分组的复杂计算。

类似地,光标落在 A3 时,可以在右边面板中看到其计算结果:

其中的成员是连涨记录构成的分组子集,比如第三个成员,双击可以查看详细情况:

A4 中计算各组的长度,求最大值即可得到最长连涨的天数,不需要用临时变量来计数了。

这些代码中的关键逻辑也可以拼成一句:

从统计连涨区间的天数改成返回区间的起止日期,看起来仅仅多了一步,但 SQL 会麻烦很多,要先计算最长连涨的天数,再找对应的起止日期:

因为要复用其中的子查询,不适合再写成嵌套结构,这里改用 CTE 语法写出,代码更长了。

SQL 分组时必须强制聚合,不能保留分组子集,汇总出最长的连涨天数后,还要再重新查询出对应的明细数据,从而得到起止日期,以至于代码变得更复杂也更难懂。

SPL 能保持分组子集,在上个问题基础上简单增补就可以了:

A2 用 maxp@a 代替原来的 max,计算出所有最长连涨区间。maxp 会返回取到最大值的成员而不是最大值本身,这也是 SPL 特有而 SQL 没有的聚合函数,@a 表示如果有多个成员都能取到最大值则全部返回,SPL 到处都能体现出集合特征。

A3 用 new 生成目标结果集,其中 ~.m(1) 和 ~.m(-1) 分别取其中集合的第一个和最后一个成员,SPL 的集合都有序,可以用位置访问。

比任务 1 多了一步,先计算出每支股票的最长连涨天数再过滤。用 SQL 要在窗口函数中增加分区字段 CODE:

前面代码理解后,增加这一步倒不是很难,但代码显得更繁琐了。

SPL 可以保持分组子集而不必强制在分组时聚合,只要将数据按股票代码分组后,对每组执行前面的动作就可以了:

A2 按照股票代码分组,然后对每个分组子集执行前面讲过的算法,计算出这支股票连涨天数。A2 中第一个 ~ 是按 CODE 分组的子集,第二个 ~ 则是 group@i 有序分组的子集。

A3 过滤出最长连涨天数大于 5 的记录。

SQL 分组时必须强制聚合,不能保留分组子集,找到连涨 5 天的股票后,要和任务 2 重新查询出这些股票的交易数据,代码太复杂也更难懂,这里就不再写了。

SPL 能保持分组子集,很容易解决这个问题:

A2 分组条件的意思是股票代码和上一条不同或价格不涨时分新组。CODE[-1] 和 CL[-1] 类似,表示上一条记录的股票代码。由于数据整体上是对 CODE 有序的,这样可以保证不同的股票不会分到同一组。

A2 只做分组,不做聚合,保留了分组子集:

双击其中的成员,可以看到一次连涨区间内的所有记录。比如第 4 个成员:

A3 过滤出长度大于 5 的分组,再将这些分组子集合并起来,就得到了期望的结果。

THE END
0.python数据分析Pandas案例之股票分析pandas股票python数据分析Pandas案例之股票分析 本案例总结涉及Pandas重要知识点如下: 需求如下: 1.使用tushare包获取某股票的历史行情数据。 2.输出该股票所有收盘比开盘上涨3%以上的日期。 3.输出该股票所有开盘比前日收盘跌幅超过2%的日期。 4.收益计算 5.双均线策略制定 必备概念 要求如下: 1.计算该股票历史数据的5日均线和30日jvzquC41dnuh0lxfp0tfv8Rcikijcwdnkw5bt}neng5eg}fknu5269:47988
1.京东美股盘前涨超3%京东美股盘前涨超3%。 文章来源:东方财富Choice数据 责任编辑:98 郑重声明:东方财富发布此内容旨在传播更多信息,与本站立场无关,不构成投资建议。据此操作北交所顶格打新居然只能中碎股 湾芯展开幕式暨半导体产业发展峰会 一键关注财经大咖 热点推荐 央行:前十个月社会融资规模增量累计为30.9万亿元 人民币贷款jvzquC41hktbplj0gcyuoxsg{0ipo8f142863:6557<48=95474ivvq
2.#读取股票代码601668,20170101至201801从股票交易数据表trd_data中读取股票代码为601668,时间在2017-01-01至2018-01-01的交易数据。 将读取的数据按日期升序排序(从早到晚)。 计算涨跌趋势指标:对于每一天,用下一日的收盘价减去当日的收盘价,如果大于0则标记为1(上涨),否则标记为-1(下跌)。 jvzquC41ygtlw7hufp4og}4cpu}ft8}2je86py{|
3.近期呈现强势上涨趋势,近20日股价从5.96元快速拉升至15.2元,累计$海峡创新(300300)$近期呈现强势上涨趋势,近20日股价从5.96元快速拉升至15.2元,累计涨幅超155%,期间多次出现单日10%以上涨幅,显示强劲多头动能。价格已突破前期高点12.97元,当前阻力位上看16元附近,短期支撑位位于13.3元(11月13日收盘价)。K线组合显示连续阳线伴随跳空缺口,短期均线呈多头排列,技术形态偏强。鉴于近期jvzquC41ecogwqfq0ggtvvtpg{4dqv4pgyy0497733764<9246697<955;6
4.条件选股今日股票涨幅大于3%小于5%; 不要ST股及不要退市股; 量比大于1;换手率大于5%小于10%; 流通市值介于50亿-200亿 4.00% 11022 总市值大于等于30亿小于等于100亿;归母净利润>0;扣非净利润>0;连涨天数大于等于1天小于等于20天;每股净资产>0 1.64% jvzquC41zwgoi~3gcuznqwj{0eun1
5.双轮驱动的历史性交汇点。12只股票收获“20cm”涨停板今日(11截至收盘,今日共12只股票收获“20cm”的涨停板,包括红相股份、中富通、江龙船艇、容百科技、中孚信息、海峡创新、博睿数据、宣亚国际等。 最早封住涨停的是中富通(300560),该股早间开盘即涨停,开盘后股价有所回落,在9:34很快封住涨停。至此,该股已连续录得2个涨停板,最新收盘价创近3年来新高。 jvzquC41zwkrk~3eqo572A>2358488883;977A;Aawmda|twtek>wphdckjvejwf
6.0603练习题小猿取经林海峰老师1、使用tushare包获取某股票的历史行情数据。2、输出该股票所有收盘比开盘上涨3%以上的日期。3、输出该股票所有开盘比前日收盘跌幅超过2%的日期。4、假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何? 答案: Copy importnumpyasnpimportpandasaspdjvzquC41yy}/ewgnqiy/exr1zkgp{~fpswpjpp4r13776@>3;0nuou
7.#量化投资股票分析、双均线策略、人口分析项目、消费记录分析 数据分析项目案例股票分析小结: 需求:使用tushare包获取某股票的历史行情数据。输出该股票所有收盘比开盘上涨3%以上的日期。输出该股票所有开盘比前日收盘跌幅超过2%的日期。# 需求四:假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出jvzquC41dnuh0>6evq4dqv4vqrod1uncpinvc}tw|k7/j}rn
8.百度美股盘前涨3%百度美股盘前涨3% 专业金融数据,下一代智能终端 每经AI快讯,11月18日,百度美股盘前涨3%,三季度,百度首次披露AI业务收入,显示同比增长超50%。jvzquC41hktbplj0gcyuoxsg{0ipo8f142863:6:57<88<=:634ivvq
9.数据港11月13日快速上涨  11月13日,数据港盘中快速上涨,5分钟内涨幅超过2%,截至14点35分,报30.88元,成交3.73亿元,换手率1.72%。 注:以上信息仅供参考,不对您构成任何投资建议。 文章来源:东方财富Choice数据 郑重声明:本信息来源于东方财富Choice数据,相关数据仅供参考,不构成投资建议。东方财富网力求但不保证数据的完全准确,如有jvzquC41hktbplj0gcyuoxsg{0ipo8f142863:6557<46?<:;24ivvq
10.全球要闻:美股齐反弹芯片股跑赢大盘获美银逆市看好苹果涨超3%美东时间周四(1月19日),受科技股普涨推动,美股三大股指集体收涨,纳指涨超1%抹平年内跌幅,纳指100指数首创历史新高。 截至收盘,道指上涨201.94点,涨幅为0.54%,报37468.61点。纳指上涨200.03点,涨幅为1.35%,报15055.65点。标普500小幅上涨41.73点,涨幅为0.88%,报4780.94点。 jvzquC41uvudm762lsqb0lto0et0w|xvqeq04976237:1l;764;68=80ujznn
11.002309股票分析重点简报日期:2025年11月13日|当前价:4.22元当前在东方财富看资讯行情,选东方财富证券一站式开户交易>> 002309股票分析重点简报 日期:2025年11月13日 | 当前价:4.22元 图表使用说明: 1. 实时监控:将图表中的关键价位(如4.50元、4.00元、3.85元)设为股价预警。 2. 按图操作:当价格触发某个条件时,直接参照对应路径下的指令行动,避免情绪干扰。 3. 核心:本策略的关键在于纪律,尤其是在下jvzquC41ecogwqfq0ggtvvtpg{4dqv4pgyy0497733744<7;72<8;=89:66
12.红利量化策略的优化1.前言昨天写《我的投资实盘20250622》中按照每月最后一个交易日来调仓,而调仓测算的价格是收盘价。 这是一个理想化的数据回测,假设最后一个交易日快收盘时计算并快速调仓。 实际操作中,我往往是在每月初第一个交易日开盘时进行调仓,虽说跟前一交易日收盘价会有一定的出入,但考虑到这么多只股票、这么多次操作,因此长期而言影响几乎可以忽略。 jvzquC41zwkrk~3eqo582A86;:=35885;8;49A9
13.R汇车1(400245)股票价格行情全球股市 上证:- - - -(涨:- 平:- 跌:-)深证:- - - -(涨:- 平:- 跌:-) 数据中心 新股申购新股日历资金流向AH股比价主力排名板块资金个股研报行业研报盈利预测千股千评年报季报龙虎榜单限售解禁大宗交易期指持仓融资融券 jvzquC41swuug7jcuvsppn~0eqs0s85062636>3jvor
14.HarbourVestGlobal(HVPD)股票历史数据:历史行情,价格,走势图表历史数据 拆股历史 所属股指 HVPD历史数据 时间范围 1日 下载 2025-10-14 - 2025-11-14 日期 收盘 开盘 高 低 交易量 涨跌幅 2025年11月14日 37.90 38.20 38.10 37.90 0.46K -2.45% 2025年11月13日 38.85 38.70 38.85 38.65 0.58K -0.77% 2025年11月12日 39.15 39.30 39.30 38.85 0.16K -0.06% jvzquC41ep4jpjuvkth0lto1gwvk}ngu1nbtktwtxktv6lnqdgm/ywkxczf/nvwkv.jrxvqtodcu2fcvg@eri?33773=5
15.【红相股份:股票连续三个交易日收盘价格涨幅偏离值累计超过30%【红相股份:股票连续三个交易日收盘价格涨幅偏离值累计超过30%】金十数据11月18日讯,红相股份公告,公司股票连续三个交易日内收盘价格涨幅偏离值累计超过30%。经核实,公司2025年前三季度营业收入为1.91亿元,比上年同期增长78.65%;2025年前三季度归属于上市公司股东的净jvzquC41hngtj7okp36/exr1fgzbku4424;23:=3:7>6597::26
16.BankofKhyber(BOK)股票历史数据:历史行情,价格,走势图表历史数据 拆股历史 所属股指 BOK历史数据 时间范围 1日 下载 2025-10-13 - 2025-11-12 日期 收盘 开盘 高 低 交易量 涨跌幅 2025年11月11日 33.17 33.91 33.91 33.01 8.49K -1.10% 2025年11月10日 33.54 33.00 33.99 33.00 18.25K +0.12% 2025年11月07日 33.50 33.99 33.99 31.52 18.23K -0.42% jvzquC41ep4jpjuvkth0lto1gwvk}ngu1hbpt2qh/qi{kjt/jotvxwkecr.fjyc
17.帝科股份(300842)股票历史数据:历史行情,价格,走势图表历史数据 拆股历史 所属股指 300842历史数据 时间范围 1日 下载 2025-10-13 - 2025-11-12 日期 收盘 开盘 高 低 交易量 涨跌幅 2025年11月12日 67.21 66.66 69.50 65.50 9.87M -0.74% 2025年11月11日 67.71 66.90 70.99 66.00 13.16M +1.29% 2025年11月10日 66.85 63.01 70.23 63.01 15.80M +10.95jvzquC41ep4jpjuvkth0lto1gwvk}ngu1}vzr2fm/kmglytqpod/vfvgtobn|2eq/ruf6mkuvusklfn/fguc
18.数据分析实战②——股票买卖收益分析df.info()#查看数据的基本信息 df['date'] = pd.to_datetime(df['date'])#将字符串转换为时间类型 print(df.head(10))#查看前10行 df.set_index("date",inplace=True)#设置索引 inplace=True表示在原数据上修改 print(df.head(10)) #输出该股票所有收盘比开盘上涨3%以上的日期 jvzquC41dnuh0lxfp0tfv87523e8::>7;2>0c{ykenk0fnyckny03<897586;