选 题
基于内地与香港金融平台的在线量化投资的数据原型系统的设计与开发__
论文结构
摘 要 II
Abstract III
目 录 V
第一章 绪论
1.1 引言
1.2 研究背景
1.3 研究现状
1.4 课题来源及意义
1.5 论文结构
第二章 数据原型系统开发环境和工具
2.1 Python爬虫
2.2 Django框架
2.3 设计模式
2.4 前端开发框架
2.5 开源图形库 ECharts
2.6 本章小结
第三章 数据原型系统架构设计
3.1 综合性金融系统架构设计
3.2 数据原型系统架构设计
3.3 功能接口设计
3.4 数据库设计
第四章 数据原型系统的实现
4.1从金融平台获取数据实现
4.2 数据库查询实现
4.3 数据可视化实现
4.4 Echarts 图形库渲染生成统计图表
4.5 数据下载接口实现
4.6 数据维护接口实现
第五章 数据原型系统的测试及结果
5.1 数据更新模块测试
5.2 数据下载模块测试
5.3 数据分析模块测试
5.4 数据维护模块测试
5.5 本章小结
第六章 结论
1.论文工作总结
2.工作展望
参考文献
致谢
数据准备
- 香港市场股票数据库的构建
- MySql数据库:股票、基金、期货
- 数据库表结构:参考旧论文/直接用东方财富网表头
- 用python爬虫爬取数据, 数据清洗, 爬取历史数据
- 获取香港期货代码 \spider\Get_Future_Info.py
- 数据库创建
1
2
3
4
5
6
7
8
9
10class CreateDatabase:
def __init__(self, new_database):
self.new_database = new_database
def create_new_database(self):
connection = pymysql.connect(host='127.0.0.1', user='root', password='078114', cursorclass=pymysql.cursors.DictCursor)
new_database_name = self.new_database
cursor = connection.cursor()
cursor.execute(f"CREATE DATABASE {new_database_name}")
cursor.close()
connection.close() - 数据库操作
1
2
3
4
5
6
7
8
9class Database:
def InsertFutureInfo(self, item): # 插入数据
mydb = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='078114', database='finance', charset='utf8')
cursor = mydb.cursor()
sql = "insert into futureinfo values(%s, %s)"
cursor.executemany(sql, item) # 要传入一个二维列表或元组的列表作为参数 item,每个子列表或元组应包含两个元素,对应着 SQL 语句中的两个 %s,用于插入数据库表中的两个字段的值
mydb.commit()
cursor.close()
mydb.close() - 爬虫操作
1
2
3
4
5
6
7
8
9
10
11
12
13# 获取期货列表:东方财富网今天期货市场中港交所的期货列表信息(??不确定是不是完整期货信息)
def getInfo(self):
url_base = 'https://futsseapi.eastmoney.com/list/HKSTOCKF?callback=aaa_callback&xx'
all_data = list()
for i in range(30): # 默认30页?
url = url_base.format(size=20, page=i)
data_str = requests.get(url).text
json_str = data_str[data_str.index('(') + 1:-1] # 去除 JSON 数据中的回调函数
data_list = json.loads(json_str)["list"]
for item in data_list:
tmp = [item['dm'], item['name']] # 期货代码,期货名称
all_data.append(tmp)
Database().InsertFutureInfo(all_data)1
2
3
4
5
6
7
8
9
10
11
12
13
14# 获取历史期货数据:通过之前获取的期货列表信息,根据期货代码获取其历史(日线)数据(??不确定完整)
def getHistory(self):
url_base = 'https://push2his.eastmoney.com/api/qt/stock/kline/get?secid=130.{secid}&xx'
all_data = list()
code_list = Database().GetCodeList() # 获取期货列表信息
for dm in tqdm(code_list):
url = url_base.format(secid=dm) # 日线数据
response = requests.get(url=url, timeout=15)
klines_data = json.loads(response.text)['data']['klines']
for data in klines_data:
res_data = data.split(',')
res_data = [dm] + res_data # 元组首位加上期货代码
all_data.append(res_data)
Database().InsertFutureHistory(all_data)
- 数据库创建
系统开发
- 系统架构
- 前端:Django+Template,Echarts
- 后端:Django,MySQL,定时任务
- 主要工作(原)
- 四大模块:数据更新、数据下载、数据分析、数据维护
- 一、香港数据
- 数据实时更新 (1.1 数据列表(香港股票,香港基金,香港指数,香港期货,香港交易所),1.2 基本信息数据(股票、基金、期货),1.3 基本信息, 1.4 财务报表, 1.5 香港历史交易数据(香港股票,香港基金,香港指数,香港期货), 1.6 当日交易数据(香港股票,香港基金,香港指数,香港期货))
- 数据下载 (2.1 列表数据下载(香港股票,香港基金,香港指数,香港期货,香港交易所),2.2 基本信息数据下载(股票、基金、期货),2.3 基本信息下载, 2.4 财务报表数据下载, 2.5 香港历史交易数据下载(大陆股票,大陆基金,大陆指数,大陆期货), 2.6 当日交易数据下载(香港股票,香港基金,香港指数,香港期货))
- 数据分析 (3.1 列表数据分析(香港股票,香港基金,香港指数,香港期货,香港交易所),3.2 基本信息数据分析(股票、基金、期货),3.3 基本信息分析, 3.4 财务报表数据分析, 3.5 大陆历史交易数据分析(大陆股票,大陆基金,大陆指数,大陆期货), 3.6 当日交易数据分析(大陆股票,大陆基金,大陆指数,大陆期货))
- 数据维护 (4.1 数据导出 4.1.1 数据列表导出(香港股票,香港基金,香港指数,香港期货,香港交易所),4.1.2 基本信息数据导出(股票、基金、期货),4.1.3 基本信息数据导出, 4.1.4 财务报表导出, 4.1.5 香港历史交易数据导出(香港陆股票,香港基金,香港指数,香港期货), 4.1.6 当日交易数据导出(香港股票,香港基金,香港指数,香港期货), 4.2 数据导入 4.2.1 数据列表导入(香港股票,香港基金,香港指数,香港期货,香港交易所),4.2.2 基本信息数据导入(股票、基金、期货),4.2.3 基本信息数据导入, 4.2.4 财务报表导入, 4.2.5 香港历史交易数据导入(香港股票,香港基金,香港指数,香港期货), 4.2.6 当日交易数据导入(香港股票,香港基金,香港指数,香港期货))】
- 二、香港相关数据还要包括 【1 深港通、沪港通数据;2. 在港上市的大陆股票;3. 在港国企股;4. 港股的科创板】
- 一、香港数据
- 四大模块:数据更新、数据下载、数据分析、数据维护
- 主要工作(真)
- 主要是要多完成港股中相关数据内容:港股主板、港股创业板、知名港股、蓝筹股、红筹股、红筹成分股、国企股、国企成分股、港股通成份股、人民币交易港股、AH股比价、香港指数
- 突出两地股市的差别:对这几个港股数据,提供数据展示(调用其他同学的接口同时展现大陆数据),数据更新、维护、下载的功能;最好论文还要有一些分析的结果,需要自己做一些结果和图表出来,系统上时间不够可以不加
- 开发流程
- 港股数据爬取(spider):
创建各类港股基本信息表:获取“港股市场xx股”(在今日)的信息列表,将“股票代码”、“股票名称”等保存在数据库对应的基本信息表中,同时保存“更新时间”为今日
创建各类港股历史数据表:根据“港股市场xx股”的基本信息表中的股票代码,获取该股至今的历史数据,将“股票代码, 名称, k线数据, 时间”存入对应的历史数据表中 - 港股数据更新(spider):
更新各类港股基本信息表:获取“港股市场xx股”(在今日)的信息列表,将对应表中不存在的“股票代码”的数据存入并且保存“更新时间”为今日,将原本存在的股票信息和“更新时间”更新
更新各类港股历史数据表:根据“港股市场xx股”的基本信息表中的“股票代码”和“更新时间”,获取从“更新时间”至今的历史数据,存入对应的历史数据表中(无序) - 港股基本数据展示(Django):展示各类港股基本信息表
- 港股K线图展示(Django):根据股票代码,结合Echarts展示各类港股历史数据的K线图
- 提供数据接口供其他的模块使用(Django):以JSON形式返回各类港股历史数据到页面上
- 数据下载(Django):以JSON形式返回各类港股历史数据到页面上,右键“另存为”下载
- 数据维护:导入,导出
- 港股数据爬取(spider):
数据库建设
- 创建数据库和表(\spider\DB_Fund.py)
- xx股基本信息表 xxinfo
股票代码 股票名称 最新价 涨跌额 涨跌幅 今开 最高 最低 昨收 成交量(股) 成交额 更新日期 code name now change changerate open high low yesterday_close volume amount date_updated - xx股历史数据表 xxhistory
code date open now high low volume amount rate changerate per zero - A-H股基本信息表 AHStockComparisoninfo
名称 H股代码 最新价(HKD) 涨跌幅 A股代码 最新价(RMB) 涨跌幅 比价(A/H) 溢价(A/H)% 更新时间 name code_hkd now_hkd changerate_hkd code_rmb now_rmb changerate_rmb AHcomparison AHcomparisonrate date_updated - 港股市场术语英文表示:
- 港股主板:HKEXMainBoardinfo
- 港股创业板:GEMofHKEXinfo
- 知名港股
- 蓝筹股
- 红筹股
- 红筹成分股
- 国企股:SOEStocksinfo
- 国企成分股:SOEConstituentStocksinfo
- 港股通成份股:HKStockConnectConstituentStocksinfo
- 人民币交易港股
- AH股比价:AHStockComparisoninfo
- ADR
- 香港指数:HKStockIndexinfo
- xx股基本信息表 xxinfo
- 爬取港股基本信息(\spider\Get_HKStock\HKStockSpider().getxxInfo())
- 使用F12抓包,点击如“港股主板”按钮查询出对应的股票数据,刷新页面,过滤出js文件,找到对应的股票数据的get请求api(默认pn=1,pz=20,表示获取第一页大小为20的股票数据列表);从中获取总数据行数”data”/“total”,再次发送get请求(设置pn=1,pz=total)获取完整的该股票数据列表
- 港股主板:’https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=m:116+t:3&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583816‘
- 港股创业板:https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=m:116+t:4&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583886
- 知名港股:https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0106&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583906
- 蓝筹股:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944282&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0105&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714570944470
- 红筹股:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944286&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0102&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714570944490
- 红筹成分:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944286&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0111&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714570944499
- 国企股:https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0103&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583915
- 国企成分股:https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0112&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583919
- 股港股通成份股:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944286&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0146,b:MK0144&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714570944503
- 人民币交易港股:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944286&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=m:116+s:64&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714570944509
- AH股比价:https://57.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407221764962597832_1714570944286&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=b:MK0101&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f191,f192,f193,f186,f185,f187,f189,f188&_=1714570944513
- 香港指数:https://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408726538243180275_1714550583811&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=8413067108550254|0|1|0|web&fid=f3&fs=m:124,m:125,m:305&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152&_=1714550583922
- 爬取港股历史数据(\spider\Get_HKStock\HKStockSpider().getxxHistory())
- 从各类港股基本信息表中获取股票代码替换secid,date为今日,查询其历史k线数据
- 一般情况,MySQL每张表最好不要超过2000万条数据,阿里的Java开发手册上也提出:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。或者说,要根据实际场景分析。
- 港股日线数据(除A-H股价比,港股指数外):https://push2his.eastmoney.com/api/qt/stock/kline/get?cb=jQuery35106242902488344593_1714571208625&secid=116.{secid}&ut=fa5fd1943c7b386f172d6893dbfba10b&fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&klt=101&fqt=1&beg=0&end=20500101&smplmt=755&lmt=1000000&_=1714571208630
- A-H股价比,港股指数日线数据先不弄。。
- 数据更新(\spider\Update_HKStock.py)
- 更新港股基本信息
- 更新港股历史数据
- 定时任务
- 数据接口(Django实现):以JSON形式返回各类港股历史数据到页面上,供其他的模块使用
- 数据下载(Django实现):以JSON形式返回各类港股历史数据到页面上,右键“另存为”保存
- 数据维护
数据可视化
- 项目结构
示例1:展示香港指数基本信息表 HKStockIndexinfo
- 编写model(datasite/mainapp/models.py)
1
2
3
4
5
6
7
8class HKStockIndexinfo(models.Model):
code = models.CharField(max_length=12, primary_key=True) # 假设code是主键
name = models.FloatField(max_length=20, db_column='name')
now = models.FloatField(db_column='now')
# ...
class Meta:
db_table = 'HKStockIndexinfo'
managed = False - 迁移,将 model与 MySQL中的表映射
1
python manage.py makemigrations # IDE console
- 编写html(datasite/mainapp/templates/hkstockindexinfo.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<thead>
<tr>
<th>代码</th>
<th>名称</th>
<!-- ... -->
</tr>
</thead>
<tbody>
{% for info in infos %}
<tr>
<td style="color: #1e8ecc;">{{ info.code }}</td>
<td style="color: #1e8ecc;">{{ info.name }}</td>
<!-- ... -->
</tr>
{% endfor %}
</tbody> - 编写应用请求(datasite/mainapp/views.py)
1
2
3
4def hkstockindexinfo(request):
infos = HKStockIndexinfo.objects.all() # 从MySQL中获取对应表的数据
context = {'infos': infos} # 创建上下文字典
return render(request, 'hkstockindexinfo.html', context) # 渲染模板 - 配置路由(datasite/datasite/urls.py)
1
2
3urlpatterns = [
path('hkstockindexinfo', views.hkstockindexinfo), # 不需要配置项目-应用两级url
] - 启动Django项目
1
PS E:\Code\datasite> python manage.py runserver
- 发送请求 http://127.0.0.1:8000/hkstockindexinfo, 展示香港指数基本信息表
示例2:使用Echart展示港股主板历史数据k线图
- 编写model(datasite/mainapp/models.py)
1
2
3
4
5
6
7
8class HKEXMainBoardhistory(models.Model):
code = models.CharField(max_length=12, primary_key=True) # 假设code是主键
date = models.CharField(max_length=10, db_column='date')
open = models.FloatField(db_column='open')
# ...
class Meta:
db_table = 'HKEXMainBoardhistory'
managed = False - 迁移,将 model与 MySQL中的表映射
1
python manage.py makemigrations # IDE console
- 编写html(datasite/mainapp/templates/historyklines.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34{% load static %} <!-- 在项目setting.py配置:STATIC_URL = '/static/' -->
<html>
<head>
<meta charset="utf-8" />
<title>港股主板历史数据k线图</title>
<!-- 引入已经下载到本地/static/assets/js下的Echarts文件 -->
<script src="{% static 'assets/js/echarts.js' %}"></script>
</head>
<body>
<div id="main" style="width: 1600px;height:800px;"></div>
<script type="text/javascript">
// 从Echarts官网上复制K线图示例代码
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
// 使用模板语言获取传递的 JSON 数据
var jsonData = JSON.parse('{{ jsonData | escapejs }}');
function splitData(rawData) {
// ...
}
function renderItem(params, api) {
// ...
}
// 使用后端查询的数据,代替模版代码中原本外部引入的json文件
var data = splitData(jsonData);
myChart.setOption({
// ...
});
</script>
</body>
</html> - 编写应用请求(datasite/mainapp/views.py)
1
2
3
4
5
6
7
8
9
10
11def historyklines(request):
code = request.GET.get('code') # 获取请求中携带的code参数值
queryset = HKEXMainBoardhistory.objects.filter(code=code) # 查询所有代码为 code 的数据
jsonData = []
for item in queryset: # 构造二维数组
data_row = [
item.date, item.open, item.now, item.low, item.high, item.volume
]
jsonData.append(data_row)
jsonData_str = json.dumps(jsonData)
return render(request, 'historyklines.html', {'jsonData': jsonData_str}) - 配置路由(datasite/datasite/urls.py)
1
2
3urlpatterns = [
path('historyklines', views.historyklines),
] - 启动Django项目
1
PS E:\Code\datasite> python manage.py runserver
示例3:提供数据接口供其他模块调用,下载历史数据
- 指的是xx股历史数据
- 编写Model、View,配置urls
1
2
3
4
5
6
7
8
9
10
11def hkexmainboarddata(request):
code = request.GET.get('code')
data = HKEXMainBoardhistory.objects.filter(code=code)
data_dict_list = [{"code": item.code, "date": item.date, "open": item.open, "now": item.now,
"high": item.high, "low": item.low, "volume": item.volume, "amount": item.amount,
"rate": item.rate, "changerate": item.changerate, "per": item.per, "zero": item.zero}
for item in data]
# 转换为 JSON 格式
data_json = json.dumps(data_dict_list)
# 返回 JSON 响应
return JsonResponse(data_json, safe=False) - 查询页面:输入港股代码,点击“生成K线图”按钮发送xxklines请求/点击“下载历史数据”展示历史数据(右键“另存为”下载)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29<div class="card ">
<div class="card-header">
<h4 class="card-title">港股历史数据</h4>
</div>
<form id="myForm">
<label for="codeInput" style="width: 150px;">请输入港股主板代码:</label>
<input type="text" id="codeInput" name="codeInput" required>
<button type="submit" id="submitButton">生成K线图</button>
<button type="submit" id="submitButton0">下载历史数据</button>
</form>
</div>
<script>
document.getElementById('myForm').addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
// 获取输入框中的内容
const code = document.getElementById('codeInput').value;
if (event.submitter.id === 'submitButton') {
// 构造生成K线图的请求URL
const url = `http://127.0.0.1:8000/hkexmainboardklines?code=${code}`;
// 在新标签页中打开链接
window.open(url, '_blank');
} else if (event.submitter.id === 'submitButton0') {
// 构造下载历史数据的请求URL
const url = `http://127.0.0.1:8000/hkexmainboarddata?code=${code}`;
// 在新标签页中打开链接
window.open(url, '_blank');
}
});
</script>
毕业答辩
毕业答辩的意义是,校方为了进一步的审查论文。
考查内容可归纳如下:①进一步考查和验证毕业论文作者对所着论文论题的认识程度及当场论证论题的能力 ②进一步考查毕业论文作者对专业知识掌握的深度与广度 ③审查毕业论文是否学员自己独立完成
答辩时提问依据:①汇报PPT的内容 ②毕业论文的内容 ③汇报者的言语
答辩安排
答辩日期:5月24日(13周周五),上午1-4节,8:50开始,预计到中午左右结束;
答辩地点:A4206
需携带资料:
1.答辩ppt 电子版(u盘);2.一式3份双面打印的论文(最新版,不需要装帧封面)。
注意事项:
1.请大家提前半小时(上午8:20)到现场,调试好设备(电脑、投影仪、麦克风,等),所有的ppt都拷贝到指定电脑上(可以用课室的电脑,但建议至少带一台笔记本做备用)。
2.提前打印好3份毕设论文(简单的双面打印即可,不需要特别装帧封面,因为不是最终稿),答辩前统一交给老师翻阅。如果在答辩前对论文有修改,和提交系统的版本不一致也没关系,只要打印最新版就可以了。
3.每人答辩陈述时间5分钟左右(可以利用powerpoint的排练功能提前排练好),然后留3分钟左右回答老师的提问。
4.回答问题时要认真记录下老师提出的修改意见,并在答辩结束后按要求修改论文,然后提交论文最终版到维普系统;
5.答辩结束后,老师们会在维普系统上给论文和答辩过程打分,大家把论文最终版提交维普系统之后,可以直接从系统上下载并打印带有老师电子签名的各类表格(一般不需要找老师们手签)。最终版论文一定要装帧好封面,和全套打印的表格一起,按照顺序放入档案袋并交给导师。
答辩内容
各位评委老师,同学们:
大家上午好! 我是网络工程专业的蔡枫,我的论文题目是基于内地与香港金融平台的在线量化投资的数据原型系统的设计与开发。
<翻页>
今天我将从以下四个方面阐述我的毕业论文内容。
<翻页>
第一部分 选题背景及意义
随着在线量化投资的普及,如何有效地收集和整理海量的互联网金融数据,成为了一大挑战。
<翻页>
一方面,互联网数据具有实时性,导致用户和金融公司都难以检索过去特定时间的完整金融数据。
另一方面,人们需花费大量时间在门户网站浏览实时金融信息,但缺乏明确直观的数据分析结果。
<翻页>
为有效解决以上问题,本论文设计并开发了基于网络爬虫的数据原型系统,实时获取互联网上的金融数据,并提供数据下载的功能。
另外,系统提供了数据可视化和数据分析的功能,用户能够从中获取具有参考价值的信息。
以及,作为综合性金融系统中的底层数据平台,能够为其他模块的开发提供数据源。
<翻页>
第二部分 开发环境与技术
<翻页>
首先介绍一下网络爬虫,其通过模拟人类浏览网页的行为,获取并解析网络信息。
<翻页>
如果目标网站提供了 API 接口,我们可以通过浏览器的开发者工具进行抓包,并在Python项目中直接调用以获取数据。
<翻页>
系统的开发语言为 Python,采用 Django 框架结合前端技术进行 Web 应用的构建。通过编写 MTV 三层架构代码,开发子系统的各功能。
<翻页>
本系统中选择 MySQL 作为数据库,存储爬取到的网络金融数据,以及进行后续的功能开发。
<翻页>
本系统的数据库中主要有两种表,即各类港股基本信息表和港股历史数据表。
<翻页>
在港股基本信息表中,包括股票代码、股票名称、最新价、涨跌额等基本信息,另外还添加了 date_updated 字段,以便在更新历史数据表时计算出所需更新数据的时间段。
<翻页>
在港股历史数据表中,保存了表示K线数据的相关字段。
<翻页>
第三部分 系统设计与实现
<翻页>
本文的数据原型系统是作为综合性金融系统底层的数据平台模块进行开发的,其他的量化因子分析模块和量化投资策略模块由小组成员负责开发。
<翻页>
在底层的数据平台,即本文的数据原型系统中,保存了香港金融市场股票的交易数据,包括了数据库建设模块、数据可视化模块、数据接口模块、数据分析模块这四个模块。
<翻页>
在数据库建设模块中,主要有三个程序,分别用于创建数据库和表,初始化表数据,以及更新表数据。
其中更新程序是利用 schedule 库,设置定时任务16点实时更新数据到各类港股基本信息表中,根据基本信息表中的的股票代码和更新时间,获取其自更新时间至今的K线数据添加到对应的表中同时修改“更新时间”为当日,以及定期对表执行“转储SQL”操作进行数据备份,以便在需要时快速重构。
<翻页>
在数据可视化模块中,提供了基本信息表格功能。点击子系统导航栏,选择港股类型,在子系统界面上对应的基本信息数据。
<翻页>
实现的基本步骤为:编写模型与数据库表映射,编写视图接收请求和模版页面,并配置好请求访问路径,即可通过浏览器访问系统功能。
<翻页>
另外,提供了历史数据K线图展示功能,根据前端输入的各类港股股票代码,从数据库中获取数据,并利用 ECharts 生成历史数据K线图。
<翻页>
其实现步骤类似前面介绍的基本信息表格。
<翻页>
在数据接口模块中,复用了历史数据K线图功能的功能界面和业务代码,根据输入的各类港股股票代码,从数据库中对应的历史数据表中获取数据,以JSON形式返回到新标签页面上。
<翻页>
数据可以供综合性金融系统中的其他模块使用,用户也可以在页面上右键“另存为”下载数据文件。
<翻页>
最后是数据分析模块:对于采集的金融数据作进一步的分析,呈现更直观和更有价值的信息。我们另外爬取了内地市场沪深京A股的数据,对比分析凸显港陆市场的数据差别。
<翻页>
首先,对于港股与沪深京A股,计算基本统计描述。
<翻页>
可以简单分析看出,香港市场在股价波动性和交易量方面普遍较大,呈现出更高的市场活力和波动性;
内地市场的平均股价虽然较低,但交易量和交易金额却相对较高,显示出更为稳定的交易情况。
<翻页>
然后进一步进行各类数据的可视化分析。我们进行了收盘价分布统计,这是放大后。。
<翻页>
然后是涨跌幅分布比较。。
<翻页>
第四部分 总结与展望
<翻页>
本次毕业设计的工作涵盖了搭建数据原型系统的各个方面,包括金融数据库的设计、系统前端和后端的开发等。
(数据采集:直接从东方财富网接口获取金融数据,并通过数据清洗和整理存储到数据库中。在开发时使用了大模型进行数据含义的分析和编写数据清洗代码,极大地提高了开发效率。对于前端的编写,同组的同学提供了模板,为开发带来了很大的便利。只需开发子系统功能界面,将模板页面中空缺内容区块覆盖。在系统后端的开发过程中,我快速学习了Django的开发流程,进行需求分析和功能设计后,解决实际开发问题,同时总结经验完善系统。)
同时,对于这几个方面,未来还有需要改进的地方。
<翻页>
对于这几个方面,未来也有需要改进的地方,如加强数据采集时对异常情况的处理,优化系统前后端性能等。。
(在数据采集方面,引入多线程实现对数据的并行处理,另外还需加强对异常情况的处理,确保系统稳健运行。在系统前端方面,进一步完善用户界面的设计和用户体验,考虑引入前端框架如React、Vue.js等,以提升前端开发的效率和灵活性,提供更加直观和友好的数据展示方式。在系统后端方面,不断优化系统架构和性能,加强对系统的监控和管理,及时发现和解决潜在的问题,确保系统长期稳定运行。)
<翻页>
最后感谢各位老师的聆听及指导,我的汇报到此结束。
问答环节
- 为什么会选择这个课题?
(自身原因+外部因素=选择的原因,把选择的原因放大,从多角度回答)
我认为计算机金融有潜力,以及量化投资的研究在当下是非常有价值的,有很强的现实意义,其中数据平台的构建是基石。
本次毕业设计的工作涵盖了搭建数据原型系统的各个方面,包括金融数据库的设计、系统前端和后端的搭建等,提供一种快速构建的思路。 - 论文的创新点体现在哪里?
(通过和已有成果或内容相比较,从内容和研究方法上来讲创新。)
回答参考:本篇毕业论文的创新之处在于讨论 xxx 的问题时不仅在 xxx 方面列出xxx,也从实际的角度进行了举例论证。一是在方法上,本文将Xx方法与XX方法相结合,能够有效消除单一方法带来的误差,有效提高了数据的精度(结果的有效性)。二是在理论上,综合近十年的文献发现,目前还没有研究学者提出 xXX方面的内容,本文在理论的提出上是一种全新的尝试 - 本论文中你主要做了什么?
查找了大量的文献、书籍报刊,对这些资料进行了精谀,结合国内外的研究现状,对 xxx问题进行了归纳总结;在此基础上,提炼出本课题的核心,对xxx展开研究,并运用 xxx 方法进行研究;对xxx 研究结果进行分析,提出 solvexxx 问题的建议及措施。 - 本论文的意义和目的是什么?
(理论意义+实践意义)在理论方面,本文应用了 Xxx的专业方法,对于丰富果,并以具体的 xxx 例子展开应用得到较好的应用结果。 - 写论文的过程中有哪些困难,怎么克服的?
(如实叙即可,但一定要说问题是 solve 的!)
在撰写论文的过程中在xx方面(资料收集问卷发放实验开展)遇到有关 xxx(找不到相应主题的学术文献)困难,在与指导老师沟通后,查阅了老师推。荐的相关书籍、资料以及文献信息,也请教了直系的学长学姐们,最后 solve 了相关问题,在此也非常感谢给我提供帮助的他们。 - 论文哪些地方可以继续改进?
目前对于这个课题的认识确实还不够具体,所以在xxx 方萄的研究片法有一定限度,研究成果与前辈们的研究成果也确实相似,没有做到能够更加深入的研究。同时也受限于条件没能更多的试验方法 - 论文中的数据和资料从哪里来?
我的资料主要来自于知网等学术网站和导师提供的资料文献,数据是通过调查法以及些同类课题的数据参考,再统一分析计算得出 - 论文中相关定义的解释,理论解释?
要求你掌握本文研究中重点的一些概念及定义。有一些概率可以做一些生活中的举例来加深记忆。回答的时候也可以根据定义来加以拓展,比如:老师,这个问题我是这样理解的,以生活中的案例来举例 xxx 概念就好。比 XXX中的XXXX,对xxx是非常重要的。