大智慧(Dazhihui)是國內常用的股票行情軟體,其歷史數據以二進制格式儲存。本文詳細說明其數據目錄結構、單筆記錄格式,並提供一個完整的 C 語言程式,將 `.day`/`.wek`/`.mnt` 二進制檔案轉換為 CSV 文字檔,方便 Excel 開啟或後續分析。
假設安裝路徑為 D:\gpdzh:
D:\gpdzh\DATA\SH\seDay\,副檔名 .dayD:\gpdzh\DATA\SH\seWeek\,副檔名 .wekD:\gpdzh\DATA\SH\seMonth\,副檔名 .mntD:\gpdzh\DATA\SZ\nseDay\D:\gpdzh\DATA\SZ\nseWeek\D:\gpdzh\DATA\SZ\nseMonth\周線、月線格式與日線一致。
| 位元組 | 欄位 | 說明 |
|---|---|---|
| 1-4 | 日期 | 整數,如 19910102 |
| 5-8 | 開盤價 | 價格(元)×1000 |
| 9-12 | 最高價 | 價格(元)×1000 |
| 13-16 | 最低價 | 價格(元)×1000 |
| 17-20 | 收盤價 | 價格(元)×1000 |
| 21-24 | 成交金額 | 金額(元)/1000 |
| 25-28 | 成交量 | 單位:手 |
| 29-40 | 保留 | 12 字節未使用 |
#include <stdio.h>
#include <stdlib.h>
struct gpjg {
unsigned long int rq; // 日期
unsigned long int kp; // 開盤價
unsigned long int zg; // 最高價
unsigned long int zd; // 最低價
unsigned long int sp; // 收盤價
unsigned long int cjje; // 成交金額
unsigned long int cjl; // 成交量
unsigned long int l1; // 保留
unsigned long int l2;
unsigned long int l3;
} gpjg1;
int main() {
FILE *fp, *fp1;
int i;
// 開啟二進制數據檔(請根據實際路徑修改)
if ((fp = fopen("D:\\gp\\dzh\\DATA\\SZnse\\Day\\184721.day", "rb")) == NULL) {
printf("cannot open source file\n");
return 1;
}
// 建立 CSV 輸出檔
if ((fp1 = fopen("184721.csv", "w")) == NULL) {
printf("cannot create csv file\n");
fclose(fp);
return 1;
}
// 逐筆讀取並寫入 CSV
for (i = 0; i < 10000; i++) {
fread(&gpjg1, sizeof(struct gpjg), 1, fp);
if (feof(fp)) break;
printf("%lu,%lu,%lu,%lu,%lu,%lu,%lu\n",
gpjg1.rq, gpjg1.kp, gpjg1.zg, gpjg1.zd,
gpjg1.sp, gpjg1.cjje, gpjg1.cjl);
fprintf(fp1, "%lu,%lu,%lu,%lu,%lu,%lu,%lu\n",
gpjg1.rq, gpjg1.kp, gpjg1.zg, gpjg1.zd,
gpjg1.sp, gpjg1.cjje, gpjg1.cjl);
}
fclose(fp);
fclose(fp1);
return 0;
}
.csv` 檔案。