Skip to content
bambuoPublic

About

基于 缠论 的 Go 实现

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chan — 缠论分析引擎(Go 1.26 实现)

用 Go 1.26 实现缠论分析管线: 包含处理 → 分型 → 笔 → 中枢 → 走势分类 → 背驰(趋势/盘整)→ 六类买卖点 + 实时增量 WebSocket。

技术栈

  • Go 1.26(~/Library/Go/1.26.4,由 ~/.go.env 配置环境变量)
  • 标准库 net/http + encoding/json;WebSocket 用 github.com/gorilla/websocket v1.5.3
  • 数值 float64(Go 无内置 decimal):RoundTo 用 strconv 最短十进制表示 + math/big.Rat 精确 half-up 舍入

工程结构

cmd/server/
├── main.go            # REST + WebSocket /ws/chan + 静态页(go:embed,页面嵌入二进制)
└── web/               # 前端页面(复用 chan4j 单文件页面,同源 WS)
internal/
├── core/
│   ├── models.go      # KRow/Fractal/Stroke/Center/ChanSignal/Classification/BuySellPoint
│   ├── chan.go        # MergeKlines→FindFractals→MergeSame→BuildStrokes→FindCenters→Classify→HistArea→StrokePoints
│   ├── divergence.go  # ChanDivergenceV3(一买/一卖)+ FindSignalsChanV5(盘整预警)
│   ├── buysell.go     # 六类买卖点(一二三买/卖 + 盘整类)+ LatestByKind + PointColor
│   ├── indicators.go  # Ema/Rsi/Macd/Bollinger/Atr + RoundTo
│   ├── kline.go       # Binance kline 解析、UTC 时间格式化/反解
│   ├── helpers.go
│   └── testdata/      # 真实数据(四周期)
├── service/
│   ├── analysis.go    # 全量管线 rows→ChanResultDto(指标+缠论+买卖点+方向)
│   ├── incremental.go # 窗口机制(maxRows 裁剪 + MIN_HISTORY=3000 下限)+ 全量重算(mutex 保护)
│   └── binance.go     # REST 拉取 + WS 订阅(gorilla Dialer,断线指数退避重连)
└── dto/dto.go         # 输出 DTO(与 TS/Java/C# 同构,camelCase 序列化)

构建与运行

source ~/.go.env          # 加载 Go 环境(GOROOT/GOPATH/PATH)
go build ./...            # 编译
go vet ./...              # 静态检查
go test ./...             # 全部测试
go run ./cmd/server       # 启动,端口 8926

REST API

方法 路径 说明
GET /api/health 健康检查
POST /api/analyze?interval=30m body 为 K 线 JSON:Binance 数组格式 [[ms,o,h,l,c,v,...],...] 或行格式 [{t,o,h,l,c,v},...] 或 {data:[...]}
GET /api/analyze?symbol=ETHUSDT&interval=30m&limit=1000 Binance 拉取后分析(spot klines 单次上限 1000)

响应结构:meta[badge/signals/currentPrice/latestBuy/latestSell/direction/summary] + chart[candles/strokes/centerBoxes/markers/ema20/ema50/volume/hist/macd/sig](camelCase)。

WebSocket 实时增量

  • 端点:WS /ws/chan?interval=30m
  • 连接后先推送全量分析结果,再订阅 Binance kline_<interval> 流
  • 每根 K 线:进行中(x:false)→ UpdateLast;收盘(x:true)→ Append(超窗口裁剪最旧行)→ 全量重算 → 推送最新结果
  • Binance WS 断线自动重连(指数退避);客户端断开即取消订阅
  • 每次订阅独立连接,Close 只关闭自己的连接(无共享状态泄漏);分析器 sync.Mutex 保护并发访问

数据验证结果

周期 K线 笔 中枢 六类买卖点
15m 5876 914 93 270
30m 2934 461 49 145
1h 1467 246 35 82
日线 120 18 3 5
  • 增量一致性:分批追加 / 进行中 K 线跳动 / 随机混合 30 轮 / 快照 / 窗口裁剪 / 短历史启动,笔/中枢/买卖点与全量重算逐字段一致
  • 已知实现注意:sort.Slice 不稳定排序——买卖点只排序一次(FindBuySellPoints 内),BuildDataset 不二次排序

页面截图

ETH/USDT 缠论分析页面

页面

http://localhost:8926/(单文件页面 go:embed 嵌入二进制,WS 同源自动适配端口):K线+EMA+笔+中枢框+买卖点标记 / MACD 副图(时间轴同步)/ 信号面板 / 方向指示 / 周期切换 / 断线重连。

About

基于 缠论 的 Go 实现

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages