通达信-申万宏源金融终端本地数据转sqlite3,设计量化数据本地存储的sqlite3数据库格式。

说明:以下程序均由《kimi助手》辅助生成,已测试正常。

1、我对数据本地存储的要求:

SQLite数据库来存储30年的日线、周线、月线、季线数据;

预留20个指标的空间;

包含数据检查和优化功能。

2、sqlite3的结构:

-- 股票基本信息表
CREATE TABLE IF NOT EXISTS stocks (
    code TEXT PRIMARY KEY,  -- 股票代码
    name TEXT,             -- 股票名称
    market TEXT,           -- 市场(沪市/深市)
    sector TEXT            -- 行业分类
);

-- 日线数据表
CREATE TABLE IF NOT EXISTS daily_klines (
    code TEXT,             -- 股票代码
    date DATE,             -- 日期
    open REAL,             -- 开盘价
    high REAL,             -- 最高价
    low REAL,              -- 最低价
    close REAL,            -- 收盘价
    volume INTEGER,        -- 成交量
    amount REAL,           -- 成交额
    PRIMARY KEY (code, date),
    FOREIGN KEY (code) REFERENCES stocks(code)
);

-- 周线数据表
CREATE TABLE IF NOT EXISTS weekly_klines (
    code TEXT,
    date DATE,             -- 以周的第一天(周一)为日期
    open REAL,
    high REAL,
    low REAL,
    close REAL,
    volume INTEGER,
    amount REAL,
    PRIMARY KEY (code, date),
    FOREIGN KEY (code) REFERENCES stocks(code)
);

-- 月线数据表
CREATE TABLE IF NOT EXISTS monthly_klines (
    code TEXT,
    date DATE,             -- 以月的第一天为日期
    open REAL,
    high REAL,
    low REAL,
    close REAL,
    volume INTEGER,
    amount REAL,
    PRIMARY KEY (code, date),
    FOREIGN KEY (code) REFERENCES stocks(code)
);

-- 季线数据表
CREATE TABLE IF NOT EXISTS quarterly_klines (
    code TEXT,
    date DATE,             -- 以季度的第一天为日期
    open REAL,
    high REAL,
    low REAL,
    close REAL,
    volume INTEGER,
    amount REAL,
    PRIMARY KEY (code, date),
    FOREIGN KEY (code) REFERENCES stocks(code)
);

-- 指标数据表
CREATE TABLE IF NOT EXISTS indicators (
    code TEXT,             -- 股票代码
    date DATE,             -- 日期
    indicator1 REAL,       -- 指标1
    indicator2 REAL,       -- 指标2
    indicator3 REAL,       -- 指标3
    indicator4 REAL,       -- 指标4
    indicator5 REAL,       -- 指标5
    indicator6 REAL,       -- 指标6
    indicator7 REAL,       -- 指标7
    indicator8 REAL,       -- 指标8
    indicator9 REAL,       -- 指标9
    indicator10 REAL,      -- 指标10
    indicator11 REAL,      -- 指标11
    indicator12 REAL,      -- 指标12
    indicator13 REAL,      -- 指标13
    indicator14 REAL,      -- 指标14
    indicator15 REAL,      -- 指标15
    indicator16 REAL,      -- 指标16
    indicator17 REAL,      -- 指标17
    indicator18 REAL,      -- 指标18
    indicator19 REAL,      -- 指标19
    indicator20 REAL,      -- 指标20
    PRIMARY KEY (code, date),
    FOREIGN KEY (code) REFERENCES stocks(code)
);

3、在新建的目录下运行这个命令:

1、D:\tdx-stock>sqlite3 tdx_data.db;

2、进入sqlite3命令行后,再复制粘贴上面(2)的sql命令。

3、用这个程序进行数据插入测试;

import sqlite3

def insert_test_data(db_path):
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()

    # 插入测试股票信息
    cursor.execute("INSERT INTO stocks (code, name, market, sector) VALUES (?, ?, ?, ?)",
                   ("sh600000", "浦发银行", "沪市", "银行"))
    conn.commit()

    # 插入测试日线数据
    cursor.executemany("INSERT INTO daily_klines (code, date, open, high, low, close, volume, amount) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
                       [
                           ("sh600000", "2025-02-27", 10.22, 10.26, 10.11, 10.24, 37999168, 388888888.88),
                           ("sh600000", "2025-02-28", 10.23, 10.30, 10.17, 10.17, 44651100, 455555555.55)
                       ])
    conn.commit()

    print("测试数据插入完成!")
    conn.close()

# 示例:插入测试数据
if __name__ == "__main__":
    db_path = r"D:\tdx-stock\tdx_data.db"
    insert_test_data(db_path)

4、用这个程序进行查询测试;

import sqlite3

def query_database(db_path):
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()

    # 检查表是否存在
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='stocks'")
    if not cursor.fetchone():
        print("表 'tdx_data' 不存在!")
        return

    # 查询 stocks 表
    print("查询 stocks 表:")
    cursor.execute("SELECT * FROM stocks")
    for row in cursor.fetchall():
        print(row)

    # 查询 daily_klines 表
    print("\n查询 daily_klines 表(前10条记录):")
    cursor.execute("SELECT * FROM daily_klines LIMIT 10")
    for row in cursor.fetchall():
        print(row)

    conn.close()

# 示例:查询数据库
if __name__ == "__main__":
    db_path = r"D:\tdx-stock\tdx_data.db"  # 使用绝对路径
    query_database(db_path)

测试结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值