四、 再次读取股票信息
- 1. 再次选择数据源
- 2. 读取股票信息
- 2.1 读取股票基本信息
- 2.2 读取股票股本信息
- 3. 读取股票历史数据
- 3.1 通达信的日线数据格式
- 3.2 历史数据入库
- 4. 总结
汲取教训,新的数据源必须有如下要求:
- 必须是股票软件,可以将数据下载到本地
- 股票数据必须分开保存,不能将所有数据包含在一个文件中,在一个文件中就是人家已经将数据数据库化了。
- 数据文件不能少的太多了,尤其是免费用户可以下载所有的历史数据
最后在对比了大智慧、东方财富和通达信后,选择了通达信。
根据starsky2006的“通达信V6.1股票代码文件格式分析”
CSDN博主「starsky2006」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/starsky2006/article/details/5863438
直接上代码:
def readTnfFile(market):
Path = 'C:\new_tdx\T0002\hq_cache\'
DataPage = 314
tndFile = Path + market +'m.tnf'
file = open(tndFile,'rb')
file.read(50)
while True:
data = file.read(DataPage)
if(len(data)==DataPage):
stockCode = data[0:6].decode()
stockName = data[23:41].decode('GBK')
stock2 = stockCode[0:2]
stockType=0
if market=='sh':
if stock2 == '60':
stockType=1
elif stock2 == '68':
stockType = 2
elif market=='sz':
if stock2 == '00':
stockType=1
elif stock2 == '30':
stockType = 2
if stockType>0:
paraTnf.append((stockCode,stockName[0:4],market,stockType))
else:
break
file.close()
读取股票基本信息入库,OK!
2.2 读取股票股本信息通达信的base.dbf文件格式如下:
typedef struct tdx_basedata_t {
char m_szMagic;
char m_szMarket; // 市场 '0' 深圳 '1' 上海
char m_szCode[6];
char m_szDate_modified[8]; // 更新日期
char m_szShare_count_total[14]; // 总股本 10000
char m_szShare_count_national[14]; // 国家股 10000
char m_szShare_count_orig[14]; // 发起股 10000
char m_szShare_count_corp[14]; // 法人股 10000
char m_szShare_count_b[14]; // B股 10000
char m_szShare_count_h[14]; // H股 10000
char m_szShare_count_currency[14]; // 流通股 10000
char m_szShare_count_employ[14]; // 职工股 10000
char m_szUnkown1[14]; //
char m_szAsset[14]; // 总资产 1000
char m_szAsset_currency[14]; // 流动资产 1000
char m_szAsset_capital[14]; // 固定资产 1000
char m_szAsset_imma[14]; // 无形资产 1000
char m_szInvest_long[14]; // 长期投资 1000
char m_szDebt_currency[14]; // 流动负债 1000
char m_szDebt_long[14]; // 长期负债 1000
char m_szAcc_fund[14]; // 公积金 1000
char m_szNet_asset[14]; // 净资产 1000
char m_szMain_income[14]; // 主营收入 1000
char m_szMain_profit[14]; // 主营利益 1000
char m_szOther_profit[14]; // 其他利益 1000
char m_szBusiness_profit[14]; // 营业利益 1000
char m_szInvest_profit[14]; // 投资收益 1000
char m_szAllow_profit[14]; // 补贴收入 1000
char m_szOut_profit[14]; // 业外收支 1000
char m_szProfit_regulate[14]; // 损益调整 1000
char m_szTotal_profit[14]; // 利润总额 1000
char m_szProfit_aftertax[14]; // 税后利益 1000
char m_szNet_profit[14]; // 净利益 1000
char m_szProfit_ud[14]; // 未分利润 1000
char m_szNet_asset_ps_regulate[14]; // 每股净资2
char m_szUnknown2[3]; //
char m_szUnknown3[4]; //
char m_szUnknown4[2]; //
char m_szDate_begin[8]; // 上市日期
char m_szUnknown5[3]; //
char m_szUnknown6[11]; //
}
暂时流通股和IPO有用,入库,上代码:
baseFile = 'C:\new_tdx\T0002\hq_cache\base.dbf'
DataPage = 481
file = open(baseFile,'rb')
file.read(1314)
while True:
data = file.read(DataPage)
if(len(data)==DataPage):
stockCode = data[1:7].decode()
stockShare = int(float(data[99:113].decode().lstrip()))
stockIPO = int(data[458:466].decode())
paraBase.append((stockIPO,stockShare,stockCode))
else:
break
file.close()
3. 读取股票历史数据
3.1 通达信的日线数据格式
通达信日线数据下载后,存放位置在:
- 上证数据 vipdoc\sh\lday
- 深证数据 vipdoc\sz\lday
每个股票对应一个文件。
每32个字节为一天数据:
- 00 ~ 03 字节 年月日,整型;
- 04 ~ 07 字节 开盘价*100,整型;
- 08 ~ 11 字节 最高价*100, 整型;
- 12 ~ 15 字节 最低价*100, 整型;
- 16 ~ 19 字节 收盘价*100, 整型;
- 20 ~ 23 字节 成交额(元),float型;
- 24 ~ 27 字节 成交量(股),整型;
- 28 ~ 31 字节 (保留)
上代码:
self.file = open(self.FileName,'rb')
self.DataPage = 32
self.unpackStr = '5If2I'
while True:
data = self.file.read(self.DataPage)
if(len(data)==self.DataPage):
data = struct.unpack(self.unpackStr,data)
dataDate = data[0]
if (dataDate>self.MAXDate):
dataOpen = data[1] #*100
dataHigh = data[2] #*100
dataLow = data[3] #*100
dataClose = data[4] #*100
dataAmount = data[5]//10000 #万
dataVolume = data[6]//100 #手
self.para.append((self.stockCode,dataDate,dataOpen,dataHigh,dataLow,dataClose,dataVolume,dataAmount))
4. 总结
感谢前人留下的信息,终于可以得到全部数据了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)