模型,评分,修复网格策略市场状态监听
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
"""
|
||||
grid_seeker v6.4 数据库模型 — 6 张数据表 + 1 张评分结果表
|
||||
所有模型继承 core.database.BaseModel,复用现有 SQLite 连接。
|
||||
"""
|
||||
from peewee import (
|
||||
CharField, DateField, FloatField, IntegerField,
|
||||
CompositeKey, TextField,
|
||||
)
|
||||
from core.database import BaseModel, db
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 1. kline_stock — 个股日K线
|
||||
# ============================================================
|
||||
class KlineStock(BaseModel):
|
||||
stock_code = CharField(max_length=10) # 纯数字6位
|
||||
trade_date = DateField()
|
||||
open = FloatField()
|
||||
high = FloatField()
|
||||
low = FloatField()
|
||||
close = FloatField()
|
||||
volume = FloatField() # 成交量(股)
|
||||
|
||||
class Meta:
|
||||
primary_key = CompositeKey('stock_code', 'trade_date')
|
||||
indexes = (
|
||||
(('stock_code', 'trade_date'), False),
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 2. stocks — 股票基础信息
|
||||
# ============================================================
|
||||
class StockInfo(BaseModel):
|
||||
code = CharField(max_length=12, primary_key=True) # 带 SH/SZ/BJ 前缀
|
||||
name = CharField(max_length=32)
|
||||
exchange = CharField(max_length=4) # SH / SZ / BJ
|
||||
list_date = DateField(null=True)
|
||||
listing_status = CharField(max_length=16, default='normal') # normal / delisted / ST
|
||||
total_share = FloatField(null=True) # 总股本(股)
|
||||
float_share = FloatField(null=True) # 流通股本(股)
|
||||
share_updated_at = DateField(null=True) # 股本数据同步时间
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 3. industry — 股票-行业映射
|
||||
# ============================================================
|
||||
class IndustryMapping(BaseModel):
|
||||
code = CharField(max_length=6, primary_key=True) # 纯数字6位
|
||||
industry_name = CharField(max_length=64, index=True)
|
||||
industry_classification = CharField(max_length=32) # 行业分类体系名称
|
||||
update_date = DateField()
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 4. kline_index — 指数日K线
|
||||
# ============================================================
|
||||
class KlineIndex(BaseModel):
|
||||
index_code = CharField(max_length=10) # 指数代码(6位数字)
|
||||
trade_date = DateField()
|
||||
open = FloatField()
|
||||
high = FloatField()
|
||||
low = FloatField()
|
||||
close = FloatField()
|
||||
volume = FloatField()
|
||||
|
||||
class Meta:
|
||||
primary_key = CompositeKey('index_code', 'trade_date')
|
||||
indexes = (
|
||||
(('index_code', 'trade_date'), False),
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 5. market_regime_daily — 市场状态(本地计算)
|
||||
# ============================================================
|
||||
class MarketRegimeDaily(BaseModel):
|
||||
trade_date = DateField(primary_key=True)
|
||||
advancers = FloatField(default=0) # 当日上涨家数
|
||||
decliners = FloatField(default=0) # 当日下跌家数
|
||||
advance_ratio = FloatField(default=0) # 涨跌比 = advancers/(advancers+decliners)
|
||||
turnover = FloatField(default=0) # 全市场成交额
|
||||
turnover_avg_5d = FloatField(default=0) # 5日滚动均量
|
||||
turnover_ratio_5d = FloatField(default=0) # 量比 = turnover/turnover_avg_5d
|
||||
source = CharField(max_length=32, default='qmt')
|
||||
is_extreme_panic = IntegerField(default=0) # advance_ratio<0.2 且 turnover_ratio_5d>1.5
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 6. sector_features_daily — 行业聚合指数(本地计算)
|
||||
# ============================================================
|
||||
class SectorFeaturesDaily(BaseModel):
|
||||
trade_date = DateField()
|
||||
sector_name = CharField(max_length=64) # 与 industry.industry_name 对应
|
||||
sector_ret = FloatField(default=0) # 行业日收益率(均值)
|
||||
sector_amplitude = FloatField(default=0) # 行业平均振幅
|
||||
close = FloatField(default=100) # 行业指数(基值100)
|
||||
ema10 = FloatField(default=0)
|
||||
ema20 = FloatField(default=0)
|
||||
ema200 = FloatField(default=0)
|
||||
score = IntegerField(default=0) # 趋势评分 0/1/2
|
||||
|
||||
class Meta:
|
||||
primary_key = CompositeKey('trade_date', 'sector_name')
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 7. ScoringResult — 评分结果(模型输出写入表)
|
||||
# ============================================================
|
||||
class ScoringResult(BaseModel):
|
||||
stock_code = CharField(max_length=6) # 纯数字6位
|
||||
trade_date = DateField() # 评分日
|
||||
predicted_profit = FloatField(default=0) # 最终预测利润(=stacking_probability)
|
||||
rank_predicted_rounds = FloatField(null=True) # Rank 模型输出
|
||||
top_elite_prob = FloatField(null=True) # Top 模型输出
|
||||
stacking_probability = FloatField(null=True) # Stacking 模型输出
|
||||
score_rank = IntegerField(default=0) # 排名
|
||||
candidate_count = IntegerField(default=0) # 候选股总数
|
||||
|
||||
class Meta:
|
||||
primary_key = CompositeKey('stock_code', 'trade_date')
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 建表
|
||||
# ============================================================
|
||||
ALL_SCORING_TABLES = [
|
||||
KlineStock, StockInfo, IndustryMapping, KlineIndex,
|
||||
MarketRegimeDaily, SectorFeaturesDaily, ScoringResult,
|
||||
]
|
||||
|
||||
db.create_tables(ALL_SCORING_TABLES)
|
||||
Reference in New Issue
Block a user