Initial fundamental dashboard
This commit is contained in:
@@ -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`,包含所有交易所品种代码。
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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()
|
||||
Reference in New Issue
Block a user