Initial fundamental dashboard

This commit is contained in:
2026-06-08 20:55:08 +08:00
commit a8b79df953
19 changed files with 2019 additions and 0 deletions
+132
View File
@@ -0,0 +1,132 @@
---
name: A-期货日级数据
description: 通过 mysql_dll2.dll 连接 MySQL 数据库并执行 SQL 查询。当用户需要查询 MySQL 数据库、执行 SQL 语句、获取数据库中的数据时触发。 触发关键词包括:查询数据库、查合约、查日线、查K线、查结算价、查持仓量、查成交量、查保证金、 查品种数据、读取数据库、SQL查询、查某品种某合约、查期货数据、从数据库取数据、db查询、查纯碱、查螺纹等。 注意:此 Skill 依赖 mysql_dll2.dll 文件,仅限 Windows 平台使用。数据库编号固定为 1。
disable: true
allowed-tools:
---
.dll 连接 MySQL 数据库并执行 SQL 查询。当用户需要查询 MySQL 数据库、执行 SQL 语句、获取数据库中的数据时触发。
触发关键词包括:查询数据库、查合约、查日线、查K线、查结算价、查持仓量、查成交量、查保证金、
查品种数据、读取数据库、SQL查询、查某品种某合约、查期货数据、从数据库取数据、db查询、查纯碱、查螺纹等。
注意:此 Skill 依赖 mysql_dll2.dll 文件,仅限 Windows 平台使用。数据库编号固定为 1。
allowed-tools:
disable: true
---
# A-期货日级数据
## 用途
把自然语言翻译成 SQL 执行,返回原始数据。不生成汇总、不分析、不联想。
---
## 数据库
- **db_index:固定为 1**,无需询问用户
---
## 调用方式
```python
import sys
sys.path.insert(0, r"<skill_scripts_dir>")
from mysql_client import MysqlDLLClient
db = MysqlDLLClient()
result = db.query(1, "SELECT * FROM `contract_day` WHERE p_code = ?", ["sa"])
print(result)
db.close()
```
---
## 字段说明(references/field_mapping.md
| 英文字段名 | 中文含义 | 字段类型 |
|-----------|---------|---------|
| contract | 合约 | varchar(10) |
| open | 开盘价 | float |
| high | 高(最高价) | float |
| low | 低(最低价) | float |
| close | 收(收盘价) | float |
| volume | 成交(成交量) | float |
| oi | 持仓(持仓量) | float |
| p_code | 品种 | varchar(4) |
| jys | 交易所 | varchar(6) |
| times | 时间 | datetime |
### 品种 vs 合约
| 概念 | 字段 | 说明 | 示例 |
|------|------|------|------|
| 品种 | `p_code` | 品种代码,拼音小写 | `sa`(纯碱)、`rb`(螺纹钢) |
| 合约 | `contract` | 品种 + 交割月份 | `sa605`(纯碱2026年5月交割) |
> 郑商所(CZCE)合约月份为3位,如 `SR501`、`MA509`。
---
## 查询示例
**查所有品种某时间段数据(直接一条SQL搞定,不需要先查品种)**
```sql
SELECT * FROM contract_day WHERE times >= '2026-01-01' AND times <= '2026-12-31'
```
**查纯碱26年所有合约数据**
```
p_code = 'SA'
时间范围: times >= '2026-01-01' AND times <= '2026-12-31'
```
**查纯碱605合约数据**
```
contract = 'SA605'
```
**查螺纹钢26年所有数据**
```
p_code = 'RB'
时间范围: times >= '2026-01-01' AND times <= '2026-12-31'
```
---
## 执行规则
1. **直接执行,不询问确认。**
2. **只返回数据,不生成汇总、不分析。**
3. **db_index 固定为 1。**
4. **参数化查询**,所有条件用 `?` 占位符传参。
5. **查所有品种时直接一条 SQL**,不需要先 `SELECT DISTINCT p_code` 再逐条查。
---
## 依赖文件
```
scripts/
└── mysql_client.py
lib/
└── mysql_dll/
├── mysql_dll2.dll
├── jsoncpp.dll
├── libcrypto-1_1-x64.dll
├── libmysql.dll
├── libssl-1_1-x64.dll
└── mysqlcppconn-9-vs14.dll
```
DLL 由 `mysql_client.py` 自动加载,无需手动配置。
---
## 品种代码对照(references/variety_mapping.md
详见 `references/variety_mapping.md`,包含所有交易所品种代码。
@@ -0,0 +1,29 @@
# 数据库字段中英文对照表
## 品种 vs 合约
| 概念 | 字段 | 说明 | 示例 |
|------|------|------|------|
| **品种** | `p_code` | 品种代码,拼音小写,代表品种分类 | `rb`(螺纹钢)、`cu`(铜) |
| **合约** | `contract` | 具体合约代码 = 品种 + 交割月份 | `rb2506`(螺纹钢2025年6月交割) |
> 郑商所(CZCE)合约月份为3位,如 `SR501`、`MA509`。
## 字段说明
| 英文字段名 | 中文注释 | 字段类型 |
|-----------|---------|---------|
| contract | 合约 | varchar(10) |
| open | 开盘价 | float |
| high | 高(最高价) | float |
| low | 低(最低价) | float |
| close | 收(收盘价) | float |
| volume | 成交(成交量) | float |
| oi | 持仓(持仓量) | float |
| p_code | 品种 | varchar(4) |
| jys | 交易所 | varchar(6) |
| times | 时间 | datetime |
@@ -0,0 +1,119 @@
# 期货品种中英文对照表
## 中金所(CFFEX
| p_code(查询用) | 中文名称 | 合约位数 | 备注 |
|-----------------|---------|---------|------|
| if / IF | 沪深300股指期货 | 4位 | 如 IF2506 |
| ih / IH | 上证50股指期货 | 4位 | 如 IH2506 |
| im / IM | 中证1000股指期货 | 4位 | 如 IM2506 |
| ic / IC | 中证500股指期货 | 4位 | 如 IC2506 |
| tf / TF | 5年国债期货 | 4位 | 如 TF2506 |
| t / T | 10年国债期货 | 4位 | 如 T2506 |
| ts / TS | 2年国债期货 | 4位 | 如 TS2506 |
| tl / TL | 30年国债期货 | 4位 | 如 TL2506 |
---
## 上海期货交易所(SHFE
| p_code | 中文名称 | 合约位数 | 示例 |
|--------|---------|---------|------|
| cu | 铜 | 4位 | cu2506 |
| al | 铝 | 4位 | al2506 |
| zn | 锌 | 4位 | zn2506 |
| pb | 铅 | 4位 | pb2506 |
| ni | 镍 | 4位 | ni2506 |
| sn | 锡 | 4位 | sn2506 |
| au | 黄金 | 4位 | au2506 |
| ag | 白银 | 4位 | ag2506 |
| rb | 螺纹钢 | 4位 | rb2506 |
| wr | 线材 | 4位 | wr2506 |
| hc | 热轧卷板 | 4位 | hc2506 |
| ss | 不锈钢 | 4位 | ss2506 |
| fu | 燃料油 | 4位 | fu2506 |
| bu | 沥青 | 4位 | bu2506 |
| ru | 天然橡胶 | 4位 | ru2506 |
| sp | 纸浆 | 4位 | sp2506 |
| br | 丁二烯橡胶 | 4位 | br2506 |
---
## 大连商品交易所(DCE
| p_code | 中文名称 | 合约位数 | 示例 |
|--------|---------|---------|------|
| a | 豆一 | 4位 | a2506 |
| b | 豆二 | 4位 | b2506 |
| m | 豆粕 | 4位 | m2506 |
| y | 豆油 | 4位 | y2506 |
| p | 棕榈油 | 4位 | p2506 |
| c | 玉米 | 4位 | c2506 |
| cs | 玉米淀粉 | 4位 | cs2506 |
| jd | 鸡蛋 | 4位 | jd2506 |
| l | 聚乙烯 | 4位 | l2506 |
| v | 聚氯乙烯 | 4位 | v2506 |
| pp | 聚丙烯 | 4位 | pp2506 |
| j | 焦炭 | 4位 | j2506 |
| jm | 焦煤 | 4位 | jm2506 |
| i | 铁矿石 | 4位 | i2506 |
| eg | 乙二醇 | 4位 | eg2506 |
| rr | 粳米 | 4位 | rr2506 |
| eb | 苯乙烯 | 4位 | eb2506 |
| pg | 液化石油气 | 4位 | pg2506 |
| lh | 生猪 | 4位 | lh2506 |
---
## 郑州商品交易所(CZCE
> ⚠️ **郑商所合约特殊规则:合约月份只有 3 位数字**
> 例如:SR501(白糖2501年1月),MA509(甲醇2509年9月)
> 年份只取个位数,与其他交易所4位不同!
| p_code | 中文名称 | 合约格式 | 示例 |
|--------|---------|---------|------|
| SR | 白糖 | 品种+3位 | SR501 |
| CF | 棉花 | 品种+3位 | CF501 |
| MA | 甲醇 | 品种+3位 | MA509 |
| TA | PTA | 品种+3位 | TA509 |
| OI | 菜籽油 | 品种+3位 | OI509 |
| RM | 菜籽粕 | 品种+3位 | RM509 |
| RS | 菜籽 | 品种+3位 | RS509 |
| WH | 强麦 | 品种+3位 | WH509 |
| PM | 普麦 | 品种+3位 | PM509 |
| RI | 早籼稻 | 品种+3位 | RI509 |
| JR | 粳稻 | 品种+3位 | JR509 |
| LR | 晚籼稻 | 品种+3位 | LR509 |
| AP | 苹果 | 品种+3位 | AP509 |
| CJ | 红枣 | 品种+3位 | CJ509 |
| SF | 硅铁 | 品种+3位 | SF509 |
| SM | 锰硅 | 品种+3位 | SM509 |
| ZC | 动力煤 | 品种+3位 | ZC509 |
| FG | 玻璃 | 品种+3位 | FG509 |
| SA | 纯碱 | 品种+3位 | SA509 |
| UR | 尿素 | 品种+3位 | UR509 |
| PF | 短纤 | 品种+3位 | PF509 |
| PX | 对二甲苯 | 品种+3位 | PX509 |
| PR | 丙烯 | 品种+3位 | PR509 |
| SH | 烧碱 | 品种+3位 | SH509 |
---
## 上海国际能源交易中心(INE
| p_code | 中文名称 | 合约位数 | 示例 |
|--------|---------|---------|------|
| sc | 原油 | 4位 | sc2506 |
| lu | 低硫燃料油 | 4位 | lu2506 |
| nr | 20号胶 | 4位 | nr2506 |
| bc | 国际铜 | 4位 | bc2506 |
---
## 广州期货交易所(GFEX
| p_code | 中文名称 | 合约位数 | 示例 |
|--------|---------|---------|------|
| si | 工业硅 | 4位 | si2506 |
| lc | 碳酸锂 | 4位 | lc2506 |
@@ -0,0 +1,172 @@
import ctypes
import json
from pathlib import Path
import time
class MysqlDLLClient:
"""
MySQL DLL 调用客户端
用于调用 mysql_dll2.dll 执行 SQL
Example
-------
db = MysqlDLLClient()
data = db.query(
7,
"select * from min15_a_jq where times>=? and times<=?",
["2025-12-24 00:00:00", "2025-12-26 00:00:00"]
)
print(data)
"""
def __init__(self, dll_path=None):
"""
初始化 DLL
Parameters
----------
dll_path : str | Path
dll路径,默认当前目录 mysql_dll2.dll
"""
if dll_path is None:
root = Path(__file__).resolve().parent.parent
dll_path = root / "lib/mysql_dll/mysql_dll2.dll"
self.dll = ctypes.WinDLL(str(dll_path))
self._init_functions()
time.sleep(1)
ret = self.dll.InitDBConfig()
if ret != 1:
raise RuntimeError("服务器授权失败")
# ---------------------------------------------------------
# 初始化 DLL 函数声明
# ---------------------------------------------------------
def _init_functions(self):
# 初始化数据库配置
self.dll.InitDBConfig.argtypes = []
self.dll.InitDBConfig.restype = ctypes.c_int
# 关闭 DLL
self.dll.ShutdownDLL.argtypes = []
self.dll.ShutdownDLL.restype = None
# QuerySQL_Auto
self.dll.QuerySQL_Auto.argtypes = [
ctypes.c_int, # db_index
ctypes.c_char_p, # sql
ctypes.c_char_p, # params
ctypes.POINTER(ctypes.c_void_p), # out_buf
ctypes.POINTER(ctypes.c_int) # out_size
]
self.dll.QuerySQL_Auto.restype = ctypes.c_int
# FreeBuffer
self.dll.FreeBuffer.argtypes = [ctypes.c_void_p]
self.dll.FreeBuffer.restype = None
# ---------------------------------------------------------
# 参数转换
# ---------------------------------------------------------
def _build_params(self, params):
"""
参数列表转 DLL 参数格式
["2025-01-01","2025-01-02"]
->
b"s:2025-01-01|s:2025-01-02"
"""
if not params:
return b""
arr = []
for p in params:
if isinstance(p, str):
arr.append(f"s:{p}")
elif isinstance(p, int):
arr.append(f"i:{p}")
elif isinstance(p, float):
arr.append(f"f:{p}")
else:
raise TypeError(f"不支持的参数类型: {type(p)}")
return "|".join(arr).encode()
# ---------------------------------------------------------
# 查询
# ---------------------------------------------------------
def query(self, db_index, sql, params=None):
"""
执行 SQL 查询
Parameters
----------
db_index : int
数据库编号
sql : str
SQL语句
params : list
SQL参数
Returns
-------
str
查询结果(JSON 或文本)
"""
if isinstance(sql, str):
sql = sql.encode()
params_bytes = self._build_params(params)
out_buf = ctypes.c_void_p()
out_size = ctypes.c_int()
ret = self.dll.QuerySQL_Auto(
db_index,
sql,
params_bytes,
ctypes.byref(out_buf),
ctypes.byref(out_size)
)
if ret != 0:
raise RuntimeError("SQL执行失败")
try:
data = ctypes.string_at(out_buf.value, out_size.value)
return json.loads(data.decode())
finally:
self.dll.FreeBuffer(out_buf)
# ---------------------------------------------------------
# 关闭
# ---------------------------------------------------------
def close(self):
"""关闭 DLL"""
if self.dll:
self.dll.ShutdownDLL()
# ---------------------------------------------------------
# with 支持
# ---------------------------------------------------------
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()