程序员学炒股(6) 让我们来看一下7月份A股的表现
有了前几天的数据准备,那让我们看一下7月份的股市是牛市还是熊市呢?
牛市和熊市主要就看股票的涨跌分布情况,虽然我们看大盘数据,但是不过中石油占的A股市值太大了,并且中石油95%的股票都是大股东控制的相当于非流通的股票。
我们这里看一下每天的股票涨跌数量占总的可交易股票数量的百分比。我们按照每涨跌1%为一个区间进行划分。
首先我们写一个存储过程,计算每天的股票涨跌情况。
CREATE PROCEDURE [dbo].[GetDistribution]
-- Add the parameters for the stored procedure here
@date smalldatetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; declare @days int
set @days=(select COUNT(*) from DayData Where 日期=@date) INSERT INTO dbo.Distribution
select @date AS 日期,* from
(select COUNT(*)*1.0/@days 幅度_9 from dbo.DayData
where 日期=@date AND 涨跌幅<-9) a,
(select COUNT(*)*1.0/@days 幅度_9_8 from dbo.DayData
where 日期=@date AND 涨跌幅>-9 AND 涨跌幅<-8) b,
(select COUNT(*)*1.0/@days 幅度_8_7 from dbo.DayData
where 日期=@date AND 涨跌幅>-8 AND 涨跌幅<-7) c,
(select COUNT(*)*1.0/@days 幅度_7_6 from dbo.DayData
where 日期=@date AND 涨跌幅>-7 AND 涨跌幅<-6) d,
(select COUNT(*)*1.0/@days 幅度_6_5 from dbo.DayData
where 日期=@date AND 涨跌幅>-6 AND 涨跌幅<-5) e,
(select COUNT(*)*1.0/@days 幅度_5_4 from dbo.DayData
where 日期=@date AND 涨跌幅>-5 AND 涨跌幅<-4) f,
(select COUNT(*)*1.0/@days 幅度_4_3 from dbo.DayData
where 日期=@date AND 涨跌幅>-4 AND 涨跌幅<-3)g,
(select COUNT(*)*1.0/@days 幅度_3_2 from dbo.DayData
where 日期=@date AND 涨跌幅>-3 AND 涨跌幅<-2)h,
(select COUNT(*)*1.0/@days 幅度_2_1 from dbo.DayData
where 日期=@date AND 涨跌幅>-2 AND 涨跌幅<-1)i,
(select COUNT(*)*1.0/@days 幅度_10 from dbo.DayData
where 日期=@date AND 涨跌幅>-1 AND 涨跌幅<0)j,
(select COUNT(*)*1.0/@days 幅度01 from dbo.DayData
where 日期=@date AND 涨跌幅>0 AND 涨跌幅<1)k,
(select COUNT(*)*1.0/@days 幅度12 from dbo.DayData
where 日期=@date AND 涨跌幅>1 AND 涨跌幅<2)l,
(select COUNT(*)*1.0/@days 幅度23 from dbo.DayData
where 日期=@date AND 涨跌幅>2 AND 涨跌幅<3)m,
(select COUNT(*)*1.0/@days 幅度34 from dbo.DayData
where 日期=@date AND 涨跌幅>3 AND 涨跌幅<4)n,
(select COUNT(*)*1.0/@days 幅度45 from dbo.DayData
where 日期=@date AND 涨跌幅>4 AND 涨跌幅<5)o,
(select COUNT(*)*1.0/@days 幅度56 from dbo.DayData
where 日期=@date AND 涨跌幅>5 AND 涨跌幅<6)p,
(select COUNT(*)*1.0/@days 幅度67 from dbo.DayData
where 日期=@date AND 涨跌幅>6 AND 涨跌幅<7)q,
(select COUNT(*)*1.0/@days 幅度78 from dbo.DayData
where 日期=@date AND 涨跌幅>7 AND 涨跌幅<8)r,
(select COUNT(*)*1.0/@days 幅度89 from dbo.DayData
where 日期=@date AND 涨跌幅>8 AND 涨跌幅<9)s,
(select COUNT(*)*1.0/@days 幅度9 from dbo.DayData
where 日期=@date AND 涨跌幅>9)t
END
然后我们统计一下今年的股票的分布情况,写入一个表中,代码如下:
declare cur Cursor scroll for
SELECT distinct 日期 FROM [dbo].[DayData]
open cur;
declare @date smalldatetime;
while @@FETCH_STATUS=0
begin
fetch next from cur into @date
exec dbo.GetDistribution @date
end
close cur
deallocate cur
接下来我们就要编写一个绘制柱状图的小工具啦,这里我们直接用.Net 的Chart控件,在VisualStudio 数据控件组中就有。
var xName = new String[] { "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "", "", "", "", "", "", "", "", "", "", "" };
var yValue=new Double[];
string connString = "Data Source=.;Initial Catalog=Stock;Integrated Security=True";
var list = new List<String>();
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
String SQL = "select distinct CONVERT(varchar(10),日期,23) from dbo.DayData";
SqlCommand CMD = new SqlCommand(SQL, connection);
SqlDataReader reader = CMD.ExecuteReader();
while (reader.Read())
{
list.Add(reader[].ToString().Trim());
}
} foreach (var date in list)
{
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
String SQL = "select * from dbo.Distribution where 日期='"+date+"'";
SqlCommand CMD = new SqlCommand(SQL, connection);
SqlDataReader reader = CMD.ExecuteReader();
while (reader.Read())
{
for (int i = ; i < ;i++ )
{
yValue[i] = Convert.ToDouble(reader[i+]);
}
}
}
Chart1.Series["Series1"].Points.DataBindXY(xName, yValue);
Chart1.SaveImage(@"C:\Users\20060737\Documents\Visual Studio 2013\WebSites\Distribution\"+date+".png");
}
这样我们就得到了每天的股票分布图,大家来看一下7月份的股票涨跌分布吧。
最左边代表的是下跌超9%的股票数占A股可交易股票数的比例,接下来是-8%,-7%直至上涨超9%的股票数量。
大家看了这张图,肯定和我一样不由得感叹,A股真是太刺激了!
程序员学炒股(6) 让我们来看一下7月份A股的表现的更多相关文章
- .Net程序员学用Oracle系列(11):系统函数(下)
1.聚合函数 1.1.COUNT 函数 1.2.SUM 函数 1.3.MAX 函数 1.4.MIN 函数 1.5.AVG 函数 2.ROWNUM 函数 2.1.ROWNUM 函数简介 2.2.利用 R ...
- .Net程序员学用Oracle系列(15):DUAL、ROWID、NULL
1.DUAL 表 2.ROWID 类型 2.1.利用 ROWID 查询数据 2.2.利用 ROWID 更新数据 3.NULL 值 3.1.NULL 与空字符串 3.2.NULL 与函数 3.3.NUL ...
- .Net程序员学用Oracle系列(8):触发器、作业、序列、连接
1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...
- 程序员学点xx 之 Redis
程序员学点xx 之 Redis 概述 其实程序员也要和操作系统打交道, 比如最常见的,部署自己电脑上的开发环境. 当然有时某些牛人, 觉得运维或基础部门的同事不够给力, 亲自上手部署服务器或线上环境, ...
- .Net程序员学用Oracle系列(1):导航目录
本人从事基于 Oracle 的 .Net 企业级开发近三年,在此之前学习和使用的都是 (MS)SQL Server.未曾系统的了解过 Oracle,所以长时间感到各种不习惯.不方便.怪异和不解,常会遇 ...
- .Net程序员学用Oracle系列(2):准备测试环境
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...
- .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...
- .Net程序员学用Oracle系列(7):视图、函数、过程、包
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...
- .Net程序员学用Oracle系列(8):触发器、任务、序列、连接
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.触发器 1.1.创建触发器 1.2.禁用触发器 & 启用触发器 & 删除触发器 2.任务 2.1.DBMS_ ...
随机推荐
- [Swift]字符串根据索引获取指定字符,依据ASCII实现字符和整数的相互转换
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧 ...
- django中多个app放入同一文件apps
新建一个apps文件夹 需要整理的app文件夹拖到同一个文件夹中,即apps.(弹出对话框,取消勾选Search for references) 在pycharm中,右键apps文件夹--选择mark ...
- 封装log4j支持记录到testng
一.初始方案 自动化中需要把日志通过testng的Reporter.log来记录日志在报告中展示.开始是新增了一个日志类: ReporterLog.class import org.slf4j.Log ...
- Golang开发环境搭建
1.下载golang安装包: 下载地址:https://golang.google.cn/dl/ 2.安装Eclipse 下载goclipse 插件 3.配置 Go 的编译器 4.写代码. packa ...
- 基础篇:6.2)形位公差-符号 Symbol
本章目的:了解定义形位公差的符号. 1.公差特征项目的符号(GM新标准) //形位公差共:5类14个,4,2,3,3,2. 2.附加符号(GM新标准) //①基本尺寸(理论尺寸)没有公差,无需检验(不 ...
- Python——免费观看全网视频小程序
说明,这个小程序是基于网站“全民解析”,调用该网站的接口,实现数据传输观看视频,若该网站凉凉,则此程序凉凉. 开始之前的分析: 进入全民解析网站,我们首先查看一下网页的html代码,发现该站观看视频的 ...
- VUE安装步骤
项目构建 项目推荐直接使用 Vue 官方提供的脚手架(Vue-cli),所以第一步首先是安装脚手架.在命令行或者 IDE 的 Terminal 窗口中输入以下命令即可自动安装: npm install ...
- Python - 三级菜单优化方法 (单层循环)
menu = {...... } current_layer = menu layers = [] while True: for k in current_layer: print(k) choic ...
- (转)haproxy启动故障:Starting proxy:cannot bind socke
haproxy启动时提示失败: [ALERT] 164/110030 (11606) : Starting proxy linuxyw.com: cannot bind socket 这个问题,其实就 ...
- MATLAB拟合和插值
定义 插值和拟合: 曲线拟合是指您拥有散点数据集并找到最适合数据一般形状的线(或曲线). 插值是指您有两个数据点并想知道两者之间的值是什么.中间的一半是他们的平均值,但如果你只想知道两者之间的四分之一 ...