Initial commit: 可转债轮动分析系统

- 实时行情:东财push2主源 + 腾讯批量报价备用源(自动切换)
- 历史K线:东财push2his主源 + 腾讯web子域备用源(含熔断机制)
- 增量同步:支持 -incr/-since 参数按存档日期增量入库
- 策略回测:净值曲线/10指标/基准对比,含基本面过滤
- 用户认证:用户名密码 + 邮箱验证码双登录方式
- 前端:三Tab SPA(实时行情/策略回测/数据管理)
This commit is contained in:
2026-08-17 20:23:22 +08:00
commit e28bfec957
45 changed files with 7889 additions and 0 deletions

41
cmd/dbstats/main.go Normal file
View File

@@ -0,0 +1,41 @@
// dbstats 输出 SQLite 库的转债数与K线总数统计。
//
// go run ./cmd/dbstats [-db 库路径]
package main
import (
"context"
"database/sql"
"flag"
"fmt"
"os"
_ "modernc.org/sqlite"
)
func main() {
dbPath := flag.String("db", "C:\\Users\\zhouww\\AppData\\Local\\Temp\\stock-analysis-data\\stock.db", "SQLite 数据库文件路径")
flag.Parse()
db, err := sql.Open("sqlite", *dbPath)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer db.Close()
db.SetMaxOpenConns(1)
ctx := context.Background()
var bonds, rows int
if err := db.QueryRowContext(ctx, "SELECT COUNT(DISTINCT code), COUNT(*) FROM convertible_kline").Scan(&bonds, &rows); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
fmt.Printf("转债数: %d,K线总数: %d(库: %s)\n", bonds, rows, *dbPath)
// 数据范围抽查。
var minDate, maxDate string
if err := db.QueryRowContext(ctx, "SELECT MIN(date), MAX(date) FROM convertible_kline").Scan(&minDate, &maxDate); err == nil {
fmt.Printf("K线日期范围: %s ~ %s\n", minDate, maxDate)
}
}