说明:以下程序均由《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)
测试结果如下: