首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言解析大智慧股票數據格式並轉換為CSV

     編輯:關於C語言

前言

大智慧(Dazhihui)是國內常用的股票行情軟體,其歷史數據以二進制格式儲存。本文詳細說明其數據目錄結構、單筆記錄格式,並提供一個完整的 C 語言程式,將 `.day`/`.wek`/`.mnt` 二進制檔案轉換為 CSV 文字檔,方便 Excel 開啟或後續分析。

一、大智慧數據目錄結構

假設安裝路徑為 D:\gpdzh:

  • 上海日線:D:\gpdzh\DATA\SH\seDay\,副檔名 .day
  • 上海周線:D:\gpdzh\DATA\SH\seWeek\,副檔名 .wek
  • 上海月線:D:\gpdzh\DATA\SH\seMonth\,副檔名 .mnt
  • 深圳日線:D:\gpdzh\DATA\SZ\nseDay\
  • 深圳周線:D:\gpdzh\DATA\SZ\nseWeek\
  • 深圳月線:D:\gpdzh\DATA\SZ\nseMonth\

周線、月線格式與日線一致。

二、單筆記錄格式(40 字節)

位元組欄位說明
1-4日期整數,如 19910102
5-8開盤價價格(元)×1000
9-12最高價價格(元)×1000
13-16最低價價格(元)×1000
17-20收盤價價格(元)×1000
21-24成交金額金額(元)/1000
25-28成交量單位:手
29-40保留12 字節未使用

三、C 語言轉換程式

#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;
}

四、使用說明

  1. 修改 `fopen` 中的輸入檔路徑為實際 `.day`/`.wek`/`.mnt` 檔案位置。
  2. 編譯執行後,同目錄下產生同名 `.csv` 檔案。
  3. 用 Excel 開啟 CSV,即可看到日期、開高低收、成交量等欄位。
  4. 若需還原真實價格,讀取時將價格欄位除以 1000,成交金額乘以 1000。

五、擴展建議

  • 加入命令列參數支援批次轉換整個目錄。
  • 補充股票代碼、名稱對照表,輸出更完整的資料集。
  • 使用 Python pandas 進一步清洗、計算技術指標。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved