# CPrograming_FinalProject
是我大一时候的c语言程序设计的课程大作业,主要是关于股票交易数据处理的
# 作业描述
**stock_data_sample.csv**和**sample_sh_sz_A.csv**两个csv文件:为某个阶段中国股市的cvs格式数据,从左开始的列名依次是日期、开盘价、最高价、最低价、收盘价、调整后收盘价、成交量、股票代码、价格上涨、价格上涨百分比),请你编写程序对其进行分析处理并完成以下几个子函数:
## int LoadStockData(char *filename);//读入数据
实现函数LoadStockData,并对补齐缺失数据,具体要求如下:
- 加载cvs格式的股票数据,保存在适当的数据结构中
- 加载成功,返回总的记录条数;否则返回-1
- 数据中有些缺失(例如,某只股票某天停盘会缺失开盘价、最高价、最低价、收盘价等信息)
- 对于这些有缺失的数据,请将所有价格(包括开盘、收盘等等)用数据缺失前离这个数据最近“调整后收盘价(Adj Close)”调整后收盘价替代
## int Query(char * para_str);//查询类任务:查询某只股票的信息
**函数参数**:
para_str 表示查询的参数语句,具体格式为:
<br>
-C “code”-d “date” -o -c -a -h -l
<br>
其中:
- -C后面跟一个股票代码,形如:-C 000001.SZ
- -d后面跟一个具体的日期,例如:-d 2017-01-03
- -o 表示查询开盘价
- -c 表示查询收盘价
- -a 表示查询调整后的收盘价
- -h 表示查询最高价
- -l 表示查询最低价
<br>
注意:
- 一个查询语句中一定包含查询参数C和 -d,其他查询参数-o, -c, -a, -h, -l至少出现一个
- 查询参数的顺序可随意, 例如 -C 000001.SZ -h -d 2017-01-03
**函数返回值**:
<br>
查询失败时,该函数的返回-1;查询成功时,返回0,并需要向标准输出设备输出一行查询结果,输出的格式如下:
<br>
一行,以code date开头,code表示查询的股票代码,date表示查询的日期;后面按照查询语句中的信息代码顺序输出查询参数和查询的结果。
<br>
例如:Query(“C 000001.SZ -h -d 2017-01-03 -a”)表示查询股票000001.SZ 2017年1月3日的最高价和调整后收盘价,查询结果输出应为:000001.SZ 2017-01-03 -h 3.18 -a 9.02
## int TopK(char *date, char *data, int k, int desc);//查询类任务:按日期的Top K查询
查询复合条件的前(后)k条记录
**函数参数**:
- date:表示日期
- data:表示查询的数据指标,可能为取值为”Volumn”、”Range”、”AdjClose”,分别对应查询成交量、波动(考虑股票价格波动值(即最高价–最低价)与开盘价百分比)、调整后收盘价的Top k
- k:表示要查询前k项或者后k项(根据第4个参数desc决定是前k项还是后k项),1\lek\le10
- desc: 0或者1,0表示查询前k项,1表示查询后k项
**函数返回值**:
<br>
查询失败时,函数返回-1;查询成功时,函数返回值为符合条件的记录条数,并同时按照顺序输出查到的k条记录,每条记录输出的格式如下:
<br>
股票代码 日期 开盘价 收盘价 调整后收盘价 股票价格波动百分比 成交量
注意事项:
- 有小数的,保留2位小数(调整后收盘价保留6位小数)
- 如果2条记录的查询指标(成交量、波动、调整后收盘价)一样,则股票代码小的排在前面
<br>
例如:TopK(“2017-01-03”, “Volumn”, 3, 1) 是查询2017年1月3日成交量最小3支股票
## double Calculate(char *para_str);//计算类任务:股票数据的基本统计指标
统计计算某只股票在给定时间段内某项数据指标的均值或标准差
**函数参数**:
para_str:表示统计计算的参数语句,具体格式类似股票基本信息查询中的规定:
<br>
-C “code”-d “start_date” -d “end_date” -o -v
<br>
其中:
- -C后面跟一个股票代码
- -d后面跟一个具体的日期,第1个表示开始日期,第2个表示结束日期
- -o 表示开盘价
- -c 表示收盘价
- -h 表示最高价
- -l 表示最低价
- -v 表示计算平均值
- -s 表示计算标准偏差,其计算公式采用![](http://latex.codecogs.com/svg.latex?\sigma=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_i-\mu)^2),其中![](http://latex.codecogs.com/svg.latex?x_i)表示数据项,![](http://latex.codecogs.com/svg.latex?\mu)表示均值
注意事项:
- 指定股票代码及起止日期的参数为固定参数选项
- 四个关于数据字段的参数 -o, -c, -h, -l 为其中之一
- 计算指标参数 -v -s 为二选一。各类参数的先后顺序保持不变
**函数返回值**:
- 如果查询统计成功,返回一个计算所得的双精度数,并保留4位小数,输出到标准设备
- 如果失败,返回-1.0,并输出-1
## void CalcMacd(char *code, char *start_date, char *end_date);//计算类任务:计算某支股票在指定日期范围内的MACD指标
**函数参数**:code表示股票的代码,start_date表示开始日期,end_date 表示结束日期
**函数返回值**:函数无返回值。按行输出如下表所示的从指定日期开始的计算过程(无需输出标题行),数据项之间以空格分隔,数据项的顺序不变,浮点数除股价外(2位小数),保留4位输出
注意事项:本函数可进一步自定义调用的其它子函数形式
**相关知识**:
MACD指数平滑移动平均线Moving Average Convergence and Divergence=指数离差指标:是移动平均线原理的进一步发展。这一技术分析工具自1971年由查拉尔德拉徘尔创造出来之后,一直深受股市投资者的欢迎。MACD的原理是运用短期(快速)和长期(慢速)移动平均线聚合和分散的征兆加以双重平滑运算,用来研判买进与卖出的时机,在股市中这一指标有较大的实际意义
<br>
| Code | Date | Close | Volume | EMA_12 | EMA_26 | DIF | DEA | MACD |
| ---- | ---- | ----- | ------ | ------ | ------ | --- | --- | ---- |
| 002765.SZ | 2016-07-21 | 17.02 | 144470645 | 18.01466 | 18.12856 | -0.1139 | 0.376717 | -0.98124 |
| 002765.SZ | 2016-07-22 | 17.39 | 233970928 | 17.91856 | 18.07385 | -0.1553 | 0.270315 | -0.85122 |
| 002765.SZ | 2016-07-25 | 17.7 | 235433919 | 17.88493 | 18.04616 | -0.16123 | 0.184007 | -0.69047 |
| 002765.SZ | 2016-07-26 | 17.78 | 149319656 | 17.86879 | 18.02645 | -0.15765 | 0.115674 | -0.54666 |
| 002765.SZ | 2016-07-27 | 17.42 | 147648626 | 17.79975 | 17.98152 | -0.18178 | 0.056184 | -0.47592 |
<br>
如上表所示,要得到MACD指标,需要分别计算如下指标:
<br>
1. 长、短周期对应的每日指数平均数EMA_N(i) = P*2/(n+1) + EMA(i-1)*(n-1)/(n+1),其中P表示当日收盘价,n为移动平均线周期的天数。常用的长、短周期的天数分别用26、12天
2. 离差值DIF(i),为短周期的EMA减去长周期的EMA,如:DIF(i) = EMA_12 (i) - EMA_26(i)
3. 离差值的M天移动平均值DEA,M参数常用9天,则:DEA(i) = DEA(i-1) × 0.8 + DIF(i) × 0.2
4. 计算MACD值时,可以采取不同的方式,一种是MACD(i) = (DIF(i) - MACD(i-1)) × 0.2 + MACD(i-1);另一种是 MACD(i) = 2 × (DIF(i) - DEA(i))。本次作业如上表示例采用第二种
注:新股上市第一天,其DIF、DEA以及MACD都为0,因为当天不存在前一天,无法做迭代运算,计算新股上市第二天的EMA时,第一天的EMA需要用收盘价(而非0)来计算。本作业不必从上市第1天开始计算,在给定日期范围之前一段时间(本题可假定在给定日期范围之前30天才上市)开始迭代计算即可
## int MACDTopK(char *start_date, char *end_date, int k);//股票筛选类任务:按技术指标筛选股票
此函数针对某一明确时间段(起始时间到终止时间的闭区间),计算出所有股票金叉点和死叉点的个数,并按照金叉点越多约优先;金叉点
生瓜蛋子
- 粉丝: 3886
- 资源: 6956
最新资源
- situation.zip
- 基于灵敏度分析的同步调相机
- Statcom:基于MATLAB Simulink的静止无功补偿器仿真模型,负载端加入断路器模拟断路故障 仿真条件:MATLA
- 可靠性灵敏度分析的一种新方法.pdf
- Python+AI的课程资料(源码+案例)
- 全局灵敏度分析的支持向量机方法.pdf
- 万门大学-人工智能,觉得是很好的人工智能学习视频,仅供资源分享学习,如有侵权,请联系下架
- 基于粒子群的ieee30节点优化、配电网有功-无功优化 软件:Matlab+Matpowre 介绍:对配电网中有功-无功协调优化
- 信捷XC PLC与3台西门子V20变频器通讯程序 原创可直接用于生产的程序,程序带注释,并附送触摸屏程序,有接线方式和设置,通讯
- JDK下载安装的步骤与环境配置
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈