新增T-1日开盘涨跌幅字段

This commit is contained in:
2026-05-07 17:26:37 +08:00
parent 844981a312
commit 9ea4b61ee3
2 changed files with 20 additions and 0 deletions
@@ -28,6 +28,8 @@ type secondProfitCSVRow struct {
Name string `gorm:"column:name"`
Market string `gorm:"column:market"`
Industry string `gorm:"column:industry"`
PreviousOpen sql.NullFloat64 `gorm:"column:previous_open"`
PreviousTwoClose sql.NullFloat64 `gorm:"column:previous_two_close"`
Open sql.NullFloat64 `gorm:"column:open"`
Close sql.NullFloat64 `gorm:"column:close_price"`
LimitPrice float64 `gorm:"column:limit_price"`
@@ -44,6 +46,7 @@ type secondProfitCSVRow struct {
NextLow sql.NullFloat64 `gorm:"column:next_low"`
NextClose sql.NullFloat64 `gorm:"column:next_close"`
OpenPreviousCloseRatio float64
PreviousOpenPctChg sql.NullFloat64
OpenPctChg sql.NullFloat64
NextOpenReturnPct sql.NullFloat64
NextHighReturnPct sql.NullFloat64
@@ -86,6 +89,7 @@ type secondProfitListItem struct {
Name string `json:"name"`
Market string `json:"market"`
Industry string `json:"industry"`
PreviousOpenPctChg *float64 `json:"previous_open_pct_chg"`
OpenPctChg *float64 `json:"open_pct_chg"`
NextOpenPctChg *float64 `json:"next_open_pct_chg"`
NextOpenProfitable string `json:"next_open_profitable"`
@@ -323,6 +327,8 @@ SELECT
COALESCE(l.name, '') AS name,
COALESCE(l.market, '') AS market,
COALESCE(l.tushare_industry, '') AS industry,
pd.open AS previous_open,
COALESCE(pd.pre_close, ppd.close) AS previous_two_close,
d.open,
COALESCE(l.calc_close, l.tushare_close, d.close) AS close_price,
COALESCE(l.calc_limit_price, 0) AS limit_price,
@@ -349,6 +355,8 @@ LEFT JOIN stock_daily d
ON l.ts_code = d.ts_code AND d.trade_date = l.trade_date
LEFT JOIN stock_daily pd
ON l.ts_code = pd.ts_code AND pd.trade_date = c.previous_trade_date
LEFT JOIN stock_daily ppd
ON l.ts_code = ppd.ts_code AND ppd.trade_date = c.previous_two_trade_date
LEFT JOIN stock_daily nd
ON l.ts_code = nd.ts_code AND nd.trade_date = c.next_trade_date
WHERE c.trade_date BETWEEN ? AND ?
@@ -378,6 +386,12 @@ ORDER BY c.trade_date ASC, l.ts_code ASC`
Valid: true,
}
}
if row.PreviousOpen.Valid && row.PreviousTwoClose.Valid && row.PreviousTwoClose.Float64 > 0 {
row.PreviousOpenPctChg = sql.NullFloat64{
Float64: secondProfitRound2((row.PreviousOpen.Float64 - row.PreviousTwoClose.Float64) / row.PreviousTwoClose.Float64 * 100),
Valid: true,
}
}
if req.OpenPctChgRule.Enabled() && (!row.OpenPctChg.Valid || !req.OpenPctChgRule.Match(row.OpenPctChg.Float64)) {
continue
}
@@ -399,6 +413,7 @@ ORDER BY c.trade_date ASC, l.ts_code ASC`
func secondProfitCSVHeaders() []string {
return []string{
"交易日", "股票代码", "股票简称", "市场", "行业",
"T-1日开盘涨跌幅%",
"T日开盘涨跌幅%", "T+1日开盘涨跌幅%",
"T+1开盘是否盈利", "T+1收盘是否盈利", "T+1盘中是否可盈利",
"T+1最高盈利%", "T+1最低盈利%", "开板次数", "换手率%",
@@ -413,6 +428,7 @@ func secondProfitCSVRecord(row secondProfitCSVRow) []string {
row.Name,
row.Market,
row.Industry,
secondProfitFormatNullFloat(row.PreviousOpenPctChg),
secondProfitFormatNullFloat(row.OpenPctChg),
secondProfitFormatNullFloat(row.NextOpenReturnPct),
row.NextOpenProfitable,
@@ -435,6 +451,7 @@ func secondProfitBuildItem(row secondProfitCSVRow) secondProfitListItem {
Name: row.Name,
Market: row.Market,
Industry: row.Industry,
PreviousOpenPctChg: secondProfitNullFloatPtr(row.PreviousOpenPctChg),
OpenPctChg: secondProfitNullFloatPtr(row.OpenPctChg),
NextOpenPctChg: secondProfitNullFloatPtr(row.NextOpenReturnPct),
NextOpenProfitable: row.NextOpenProfitable,