统计一段时期内股票的涨幅情况
# -*- coding: utf-8 -*- '''加载模块''' import sqlalchemy import pandas '''连接数据库''' engine = sqlalchemy.create_engine('mssql+pyodbc://sa:123456@XiTongDSN') connection = engine.connect() '''股票代码列表''' codelist = pandas.read_sql('codelist', engine) '''给每个股票算涨幅''' rise = [] for i in range(0, len(codelist) - 1): data = pandas.read_sql(codelist['code'][i], engine) '''这个 a b 的 0 赋值不能省,由于有些股票会停牌,期间无数据会调用上个股票的 a 值,报错''' a = 0 b = 0 for j in range(0, len(data) - 1): '''由于数据库内的数据日期是由大到小排的,懒的调了,就这样也行''' if data['date'][j] == '2016-03-31': a = data['close'][j] if data['date'][j] == '2016-03-01': b = data['close'][j] if not (a == 0 or b == 0): c = (a - b) / b break else: c = 0 break rise.append((codelist['code'][i], c, '2016-03-31', '2016-03-01')) ''' list 转 dataframe ''' rise = pandas.DataFrame(rise) '''修改列名''' rise.columns = ['code', 'rise', 'date_to', 'date_from'] '''按涨幅排序''' rise = rise.sort_values(by = 'rise', ascending = False) '''写库''' rise.to_sql('rise', engine, if_exists = 'replace', index = False) print('ok')
跟通达信股软的涨跌幅排名(相同条件,如不复权,日期一致等)比较了一下,有些出入,我换了普通计算器手工算了一下,还是跟通达信的有出入,真是不知道通达信的公式是什么