From 99177d8301a3fc7d0d96e88d94c762bf34bf25db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 5 Oct 2026 14:58:26 -0400 Subject: [PATCH] WIP mktchart 3 --- depth_chart.go | 169 +++++++++++++++ depth_chart_test.go | 66 ++++++ line_quote_chart.go | 183 ++++++++++++++++ line_quote_chart_test.go | 75 +++++++ messages_mktchart.go | 41 ++-- .../snapshots/darwin/depth_chart-dark.png | Bin 0 -> 18130 bytes .../snapshots/darwin/depth_chart-light.png | Bin 0 -> 17420 bytes .../darwin/line_quote_chart-dark.png | Bin 0 -> 33643 bytes .../darwin/line_quote_chart-light.png | Bin 0 -> 32427 bytes .../snapshots/darwin/volume_profile-dark.png | Bin 0 -> 17821 bytes .../snapshots/darwin/volume_profile-light.png | Bin 0 -> 17201 bytes volume_profile.go | 201 ++++++++++++++++++ volume_profile_test.go | 72 +++++++ 13 files changed, 794 insertions(+), 13 deletions(-) create mode 100644 depth_chart.go create mode 100644 depth_chart_test.go create mode 100644 line_quote_chart.go create mode 100644 line_quote_chart_test.go create mode 100644 testdata/snapshots/darwin/depth_chart-dark.png create mode 100644 testdata/snapshots/darwin/depth_chart-light.png create mode 100644 testdata/snapshots/darwin/line_quote_chart-dark.png create mode 100644 testdata/snapshots/darwin/line_quote_chart-light.png create mode 100644 testdata/snapshots/darwin/volume_profile-dark.png create mode 100644 testdata/snapshots/darwin/volume_profile-light.png create mode 100644 volume_profile.go create mode 100644 volume_profile_test.go diff --git a/depth_chart.go b/depth_chart.go new file mode 100644 index 0000000..9d45717 --- /dev/null +++ b/depth_chart.go @@ -0,0 +1,169 @@ +package mujica + +import ( + "fmt" + "strings" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// DepthLevel is one price level of an order book. +type DepthLevel struct { + Price, Size float64 +} + +// DepthChartOptions configure a DepthChart. +type DepthChartOptions struct { + Frame ChartFrame + Decimals int +} + +// depthData is the book's cumulative sizes, bids then asks, from the mid outward. +type depthData struct { + price, total []float64 + nBids int + mid, maxSize float64 +} + +// DepthChart draws cumulative bid and ask depth as stepped areas around the mid price; arrows walk the levels. +func DepthChart(c *ui.Context, bids, asks []DepthLevel, opts DepthChartOptions) ChartResult { + dec := priceDecimals("DepthChart", opts.Decimals) + ch := newChart(c, opts.Frame) + k := Tokens(c) + d := chartMemo(ch, "depth", [2]string{chartID(bids), chartID(asks)}, func() depthData { return depthBuild(bids, asks) }) + bidCol, askCol := trendColor(c, 1), trendColor(c, -1) + keys := []chartKey{{Name: msg(c, "depth_chart.bids"), Color: bidCol, Shape: 1}, {Name: msg(c, "depth_chart.asks"), Color: askCol, Shape: 3}} + size := FontSize(c, theme.CaptionSize) + geom := func(r ui.Rect) (ui.Rect, internal.Linear, internal.Linear) { + plot := chartInset(r, 56, 26) + lo, hi := d.price[d.nBids-1], d.price[len(d.price)-1] + return plot, internal.Linear{D0: lo, D1: hi, R0: float64(plot.X), R1: float64(plot.X + plot.W)}, + internal.Linear{D0: 0, D1: d.maxSize * 1.05, R0: float64(plot.Y + plot.H), R1: float64(plot.Y)} + } + spec := chartSpec{n: len(d.price), keys: keys} + if len(bids) == 0 || len(asks) == 0 { + spec.n = 0 + } + // Left and Right walk by price: lower bids to the left, higher asks to the right. + order := func(i int) int { + if i < d.nBids { + return d.nBids - 1 - i + } + return i + } + spec.move = func(i int, key ui.Key) int { + pos := order(i) + if key == ui.KeyLeft || key == ui.KeyUp { + pos = max(pos-1, 0) + } else { + pos = min(pos+1, len(d.price)-1) + } + return order(pos) + } + spec.pick = func(r ui.Rect, x, y float32) int { + plot, xs, _ := geom(r) + if !plot.Contains(x, y) { + return -1 + } + return internal.Nearest(len(d.price), func(i int) (float32, float32) { return xs.Map(d.price[i]), 0 }, x, 0, plot.W, true) + } + spec.readout = func(i int) string { + side := msg(c, "depth_chart.bid") + if i >= d.nBids { + side = msg(c, "depth_chart.ask") + } + return strings.Join([]string{side + " " + priceUngrouped(d.price[i], dec), fmt.Sprintf(msg(c, "depth_chart.total"), statisticFormat(d.total[i], 0)), + msg(c, "depth_chart.mid") + " " + priceUngrouped(d.mid, dec)}, " · ") + } + spec.draw = func(p *ui.Painter, r ui.Rect, active int) { + plot, xs, ys := geom(r) + _, _, ystep := internal.Nice(0, d.maxSize*1.05, 4) + internal.AxisY(p, plot, ys, internal.Ticks(0, d.maxSize*1.05, ystep), func(v float64) string { return volumeShort(v, ystep) }, size, k) + _, _, xstep := internal.Nice(xs.D0, xs.D1, max(2, int(plot.W/90))) + var tx []float32 + var tl []string + for _, t := range internal.Ticks(xs.D0, xs.D1, xstep) { + tx, tl = append(tx, xs.Map(t)), append(tl, internal.FormatTick(t, xstep)) + } + internal.AxisX(p, plot, tx, tl, size, k) + base := plot.Y + plot.H + for side, idx := range [][2]int{{0, d.nBids}, {d.nBids, len(d.price)}} { + col := []ui.Color{bidCol, askCol}[side] + var area, edge ui.Path + mx := internal.Snap(p, xs.Map(d.mid)) + area.MoveTo(mx, base) + edge.MoveTo(mx, base) + prevY := base + for i := idx[0]; i < idx[1]; i++ { + x, y := internal.Snap(p, xs.Map(d.price[i])), internal.Snap(p, ys.Map(d.total[i])) + area.LineTo(x, prevY).LineTo(x, y) + edge.LineTo(x, prevY).LineTo(x, y) + prevY = y + } + end := plot.X + if side == 1 { + end = plot.X + plot.W + } + area.LineTo(end, prevY).LineTo(end, base).Close() + edge.LineTo(end, prevY) + p.FillPath(&area, col.Alpha(0.2)) + p.StrokePath(&edge, 2, col) + label := []string{msg(c, "depth_chart.bids"), msg(c, "depth_chart.asks")}[side] + chartText(p, label, []float32{plot.X + 6, plot.X + plot.W - 6}[side], plot.Y+4, size, col, []float32{0, 1}[side], 0) + } + mx := internal.Snap(p, xs.Map(d.mid)) + for y := plot.Y; y < base; y += 6 { + p.Line(mx, y, mx, min(y+3, base), 1, k.TextMuted) + } + chartText(p, priceUngrouped(d.mid, dec), mx, plot.Y+4, size, k.Text, 0.5, 0) + if active >= 0 { + x, y := xs.Map(d.price[active]), ys.Map(d.total[active]) + p.Line(internal.Snap(p, x), plot.Y, internal.Snap(p, x), base, 1, k.TextMuted) + shape := 1 + if active >= d.nBids { + shape = 3 + } + internal.Marker(p, shape, x, y, 10, keys[shape/3].Color) + } + } + res, _ := ch.build(spec) + return res +} + +// depthBuild checks the book's order and sums sizes outward from the mid. +func depthBuild(bids, asks []DepthLevel) depthData { + for i, l := range bids { + if !(l.Size > 0) || i > 0 && !(l.Price < bids[i-1].Price) { + panic(fmt.Sprintf("mujica: DepthChart bid %d needs a positive size and a price below the one before", i)) + } + } + for i, l := range asks { + if !(l.Size > 0) || i > 0 && !(l.Price > asks[i-1].Price) { + panic(fmt.Sprintf("mujica: DepthChart ask %d needs a positive size and a price above the one before", i)) + } + } + if len(bids) > 0 && len(asks) > 0 && !(bids[0].Price < asks[0].Price) { + panic("mujica: DepthChart best bid must be below best ask") + } + var d depthData + d.nBids = len(bids) + var sum float64 + for _, l := range bids { + sum += l.Size + d.price, d.total = append(d.price, l.Price), append(d.total, sum) + } + d.maxSize = sum + sum = 0 + for _, l := range asks { + sum += l.Size + d.price, d.total = append(d.price, l.Price), append(d.total, sum) + } + d.maxSize = max(d.maxSize, sum) + if len(bids) > 0 && len(asks) > 0 { + d.mid = (bids[0].Price + asks[0].Price) / 2 + } + return d +} diff --git a/depth_chart_test.go b/depth_chart_test.go new file mode 100644 index 0000000..89763bf --- /dev/null +++ b/depth_chart_test.go @@ -0,0 +1,66 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func sampleBook() ([]DepthLevel, []DepthLevel) { + var bids, asks []DepthLevel + for i := range 12 { + bids = append(bids, DepthLevel{Price: 99.9 - float64(i)*0.1, Size: float64(10 + i*3)}) + asks = append(asks, DepthLevel{Price: 100.1 + float64(i)*0.1, Size: float64(8 + i*4)}) + } + return bids, asks +} + +func TestDepthChartCumulativeAndKeyboard(t *testing.T) { + bids, asks := sampleBook() + d := depthBuild(bids, asks) + if d.mid != 100 || d.total[0] != 10 || d.total[1] != 23 || d.total[12] != 8 || d.total[13] != 20 { + t.Fatalf("cumulative %+v", d.total[:14]) + } + var res ChartResult + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + res = DepthChart(c, bids, asks, DepthChartOptions{Frame: ChartFrame{Label: "Depth"}}) + }, 700, 360) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) // the best bid first + if res.Point != 0 || !tt.HasText("Bid 99.90 · cumulative 10 · Mid 100.00") { + t.Fatalf("first level %d %q", res.Point, tt.Texts()) + } + tt.Key(0, ui.KeyLeft) // outward to lower bids + if res.Point != 1 || !tt.HasText("Bid 99.80 · cumulative 23") { + t.Fatalf("lower bid %d %q", res.Point, tt.Texts()) + } + tt.Key(0, ui.KeyRight) + tt.Key(0, ui.KeyRight) + if res.Point != 12 || !tt.HasText("Ask 100.10 · cumulative 8") { + t.Fatalf("crossing to asks %d %q", res.Point, tt.Texts()) + } + for name, book := range map[string][2][]DepthLevel{ + "bid order": {{{Price: 1, Size: 1}, {Price: 2, Size: 1}}, nil}, + "crossed": {{{Price: 5, Size: 1}}, {{Price: 4, Size: 1}}}, + "size": {nil, {{Price: 4, Size: 0}}}, + } { + func() { + defer func() { + if recover() == nil { + t.Errorf("%s: no panic", name) + } + }() + depthBuild(book[0], book[1]) + }() + } +} + +func TestDepthChartSnapshot(t *testing.T) { + bids, asks := sampleBook() + snapshot(t, "depth_chart", 640, 320, func(c *ui.Context) { + ui.Column(c).Padding(12).Children(func() { + DepthChart(c, bids, asks, DepthChartOptions{Frame: ChartFrame{Label: "Depth", Height: 240}}) + }) + }) +} diff --git a/line_quote_chart.go b/line_quote_chart.go new file mode 100644 index 0000000..82dafc1 --- /dev/null +++ b/line_quote_chart.go @@ -0,0 +1,183 @@ +package mujica + +import ( + "fmt" + "strings" + "time" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// QuotePoint is one tick of an intraday line: time, price and the volume traded since the last point. +type QuotePoint struct { + Time time.Time + Price float64 + Volume float64 +} + +// LineQuoteChartOptions configure a LineQuoteChart. +type LineQuoteChartOptions struct { + Frame ChartFrame + // PrevClose draws the baseline the day's change is measured from; required. + PrevClose float64 + // RegularOpen and RegularClose bound the regular session; points outside are pre- and after-market. Zero draws one session. + RegularOpen, RegularClose time.Time + Decimals int +} + +// lineQuoteSession names a point's session: -1 pre, 0 regular, 1 after. +func lineQuoteSession(t time.Time, opts LineQuoteChartOptions) int { + switch { + case opts.RegularOpen.IsZero(): + return 0 + case t.Before(opts.RegularOpen): + return -1 + case !t.Before(opts.RegularClose): + return 1 + } + return 0 +} + +// LineQuoteChart is an intraday line with the previous close as baseline, the average price, and shaded extended sessions. +func LineQuoteChart(c *ui.Context, points []QuotePoint, opts LineQuoteChartOptions) ChartResult { + if !(opts.PrevClose > 0) { + panic("mujica: LineQuoteChart needs a positive PrevClose") + } + if opts.RegularOpen.IsZero() != opts.RegularClose.IsZero() || opts.RegularClose.Before(opts.RegularOpen) { + panic("mujica: LineQuoteChart needs both session bounds, in order") + } + dec := priceDecimals("LineQuoteChart", opts.Decimals) + ch := newChart(c, opts.Frame) + k := Tokens(c) + avg := chartMemo(ch, "avg", chartID(points), func() []float64 { + out := make([]float64, len(points)) + var pv, v float64 + for i, p := range points { + if p.Time.IsZero() || i > 0 && !p.Time.After(points[i-1].Time) || !(p.Price > 0) || p.Volume < 0 { + panic(fmt.Sprintf("mujica: LineQuoteChart point %d is out of order or invalid", i)) + } + pv += p.Price * p.Volume + v += p.Volume + out[i] = p.Price + if v > 0 { + out[i] = pv / v + } + } + return out + }) + dom := chartMemo(ch, "y", chartID(points), func() [2]float64 { + lo, hi := opts.PrevClose, opts.PrevClose + for i, p := range points { + lo, hi = min(lo, p.Price, avg[i]), max(hi, p.Price, avg[i]) + } + // Symmetric around the previous close, so the baseline sits in the middle. + d := max(hi-opts.PrevClose, opts.PrevClose-lo) + return [2]float64{opts.PrevClose - d, opts.PrevClose + d} + }) + size := FontSize(c, theme.CaptionSize) + geom := func(r ui.Rect) (ui.Rect, internal.Linear, internal.Linear) { + plot := chartInset(r, 60, 26) + plot.W -= 44 // percent axis on the right + var t0, t1 float64 + if len(points) > 0 { + t0, t1 = float64(points[0].Time.Unix()), float64(points[len(points)-1].Time.Unix()) + } + return plot, internal.Linear{D0: t0, D1: t1, R0: float64(plot.X), R1: float64(plot.X + plot.W)}, + internal.Linear{D0: dom[0], D1: dom[1], R0: float64(plot.Y + plot.H), R1: float64(plot.Y)} + } + x := func(xs internal.Linear, i int) float32 { return xs.Map(float64(points[i].Time.Unix())) } + spec := chartSpec{n: len(points), keys: []chartKey{ + {Name: msg(c, "line_quote_chart.price"), Color: k.AccentText, Shape: 0}, + {Name: msg(c, "line_quote_chart.average"), Color: k.Warning, Shape: 3}, + }} + spec.pick = func(r ui.Rect, px, py float32) int { + plot, xs, _ := geom(r) + if !plot.Contains(px, py) { + return -1 + } + return internal.Nearest(len(points), func(i int) (float32, float32) { return x(xs, i), 0 }, px, 0, plot.W, true) + } + spec.readout = func(i int) string { + p := points[i] + chg := (p.Price/opts.PrevClose - 1) * 100 + parts := []string{p.Time.Format("15:04"), priceUngrouped(p.Price, dec), fmt.Sprintf("%+.2f%% %s", chg, trendWord(c, trendSign(chg))), + msg(c, "line_quote_chart.average") + " " + priceUngrouped(avg[i], dec)} + if s := lineQuoteSession(p.Time, opts); s != 0 { + parts = append(parts, msg(c, map[int]string{-1: "line_quote_chart.pre", 1: "line_quote_chart.after"}[s])) + } + return strings.Join(parts, " · ") + } + spec.draw = func(p *ui.Painter, r ui.Rect, active int) { + plot, xs, ys := geom(r) + _, _, step := internal.Nice(dom[0], dom[1], 6) + ticks := internal.Ticks(dom[0], dom[1], step) + internal.AxisY(p, plot, ys, ticks, func(v float64) string { return internal.FormatTick(v, step) }, size, k) + for _, t := range ticks { + chartText(p, fmt.Sprintf("%+.2f%%", (t/opts.PrevClose-1)*100), plot.X+plot.W+6, ys.Map(t), size, trendColor(c, trendSign(t-opts.PrevClose)), 0, 0.5) + } + lineQuoteSessions(p, plot, xs, opts, size, c) + var tx []float32 + var tl []string + if len(points) > 1 { + ts, layout := internal.TimeTicks(points[0].Time, points[len(points)-1].Time, max(2, int(plot.W/90))) + for _, t := range ts { + tx, tl = append(tx, xs.Map(float64(t.Unix()))), append(tl, t.Format(layout)) + } + } + internal.AxisX(p, plot, tx, tl, size, k) + by := internal.Snap(p, ys.Map(opts.PrevClose)) + for xx := plot.X; xx < plot.X+plot.W; xx += 6 { + p.Line(xx, by, min(xx+3, plot.X+plot.W), by, 1, k.TextMuted) + } + price := make([]float64, len(points)) + for i, pt := range points { + price[i] = pt.Price + } + at := func(i int) float32 { return x(xs, i) } + for li, vals := range [][]float64{price, avg} { + col := []ui.Color{k.AccentText, k.Warning}[li] + chartRuns(vals, at, func(idx []int) { + var line ui.Path + for j, i := range idx { + px, py := internal.Snap(p, at(i)), internal.Snap(p, ys.Map(vals[i])) + if j == 0 { + line.MoveTo(px, py) + } else { + line.LineTo(px, py) + } + } + p.StrokePath(&line, []float32{1.75, 1.25}[li], col) + }) + } + if active >= 0 { + ax := internal.Snap(p, at(active)) + p.Line(ax, plot.Y, ax, plot.Y+plot.H, 1, k.TextMuted) + internal.Marker(p, 0, ax, ys.Map(price[active]), 9, k.AccentText) + internal.Marker(p, 3, ax, ys.Map(avg[active]), 9, k.Warning) + } + } + res, _ := ch.build(spec) + return res +} + +// lineQuoteSessions shades and labels the pre- and after-market spans. +func lineQuoteSessions(p *ui.Painter, plot ui.Rect, xs internal.Linear, opts LineQuoteChartOptions, size float32, c *ui.Context) { + if opts.RegularOpen.IsZero() { + return + } + k := Tokens(c) + x0, x1 := max(plot.X, xs.Map(float64(opts.RegularOpen.Unix()))), min(plot.X+plot.W, xs.Map(float64(opts.RegularClose.Unix()))) + for _, span := range []struct { + a, b float32 + key string + }{{plot.X, x0, "line_quote_chart.pre"}, {x1, plot.X + plot.W, "line_quote_chart.after"}} { + if span.b-span.a < 1 { + continue + } + p.Fill(ui.Rect{X: span.a, Y: plot.Y, W: span.b - span.a, H: plot.H}, k.SurfaceHover.Alpha(0.6), 0) + chartText(p, msg(c, span.key), span.a+4, plot.Y+2, size, k.TextMuted, 0, 0) + } +} diff --git a/line_quote_chart_test.go b/line_quote_chart_test.go new file mode 100644 index 0000000..404d7a4 --- /dev/null +++ b/line_quote_chart_test.go @@ -0,0 +1,75 @@ +package mujica + +import ( + "math" + "strings" + "testing" + "time" + + "github.com/egoist/mygo/ui" +) + +func samplePoints() ([]QuotePoint, time.Time, time.Time) { + day := time.Date(2026, 10, 5, 0, 0, 0, 0, time.UTC) + var pts []QuotePoint + for m := 8 * 60; m < 18*60; m += 5 { + price := 100 + 2*math.Sin(float64(m)/50) + float64(m-480)/200 + pts = append(pts, QuotePoint{Time: day.Add(time.Duration(m) * time.Minute), Price: math.Round(price*100) / 100, Volume: 100 + float64(m%7)*10}) + } + return pts, day.Add(9*time.Hour + 30*time.Minute), day.Add(16 * time.Hour) +} + +func TestLineQuoteChartReadoutAverageSessions(t *testing.T) { + pts, open, closeAt := samplePoints() + var res ChartResult + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + res = LineQuoteChart(c, pts, LineQuoteChartOptions{Frame: ChartFrame{Label: "AAPL"}, PrevClose: 100, RegularOpen: open, RegularClose: closeAt}) + }, 800, 400) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) + var pv, v float64 + pv, v = pts[0].Price*pts[0].Volume, pts[0].Volume + want := "08:00 · " + priceUngrouped(pts[0].Price, 2) + found := "" + for _, s := range tt.Texts() { + if strings.HasPrefix(s, want) { + found = s + } + } + if found == "" || !strings.Contains(found, "Average "+priceUngrouped(pv/v, 2)) || !strings.HasSuffix(found, "Pre-market") { + t.Fatalf("first readout %q in %q", found, tt.Texts()) + } + tt.Key(0, ui.KeyEnd) + last := "" + for _, s := range tt.Texts() { + if strings.HasPrefix(s, "17:55") { + last = s + } + } + if !strings.HasSuffix(last, "After hours") || res.Point != len(pts)-1 { + t.Fatalf("last readout %q", last) + } + for name, o := range map[string]LineQuoteChartOptions{ + "prev close": {Frame: ChartFrame{Label: "x"}}, + "half bound": {Frame: ChartFrame{Label: "x"}, PrevClose: 1, RegularOpen: open}, + } { + func() { + defer func() { + if recover() == nil { + t.Errorf("%s: no panic", name) + } + }() + ui.NewTester(func(c *ui.Context) { Use(c, Settings{}); LineQuoteChart(c, pts, o) }, 300, 200) + }() + } +} + +func TestLineQuoteChartSnapshot(t *testing.T) { + pts, open, closeAt := samplePoints() + snapshot(t, "line_quote_chart", 680, 340, func(c *ui.Context) { + ui.Column(c).Padding(12).Children(func() { + LineQuoteChart(c, pts, LineQuoteChartOptions{Frame: ChartFrame{Label: "AAPL", Height: 260}, PrevClose: 100, RegularOpen: open, RegularClose: closeAt}) + }) + }) +} diff --git a/messages_mktchart.go b/messages_mktchart.go index 97e1603..899e06f 100644 --- a/messages_mktchart.go +++ b/messages_mktchart.go @@ -2,18 +2,33 @@ package mujica func init() { addMessages(map[string][2]string{ - "candlestick_chart.ohlc": {"O %s H %s L %s C %s", "开 %s 高 %s 低 %s 收 %s"}, - "candlestick_chart.volume": {"Vol", "量"}, - "heikin_ashi.smoothed": {"Heikin-Ashi", "平均 K 线"}, - "heikin_ashi.raw": {"Candles", "原 K 线"}, - "heikin_ashi.switch": {"Candle style", "K 线样式"}, - "compare_symbol.label": {"Compared symbols", "对比品种"}, - "compare_symbol.remove": {"Remove %s", "移除 %s"}, - "price_alert_line.tag": {"Alert %s", "预警 %s"}, - "chart_sync.link": {"Sync with other charts", "与其他图表同步"}, - "chart_sync.linked": {"Synced", "已同步"}, - "chart_sync.unlinked": {"Not synced", "未同步"}, - "indicator_pane.remove": {"Remove %s", "移除 %s"}, - "drawing_tools.note": {"Note", "标注"}, + "candlestick_chart.ohlc": {"O %s H %s L %s C %s", "开 %s 高 %s 低 %s 收 %s"}, + "candlestick_chart.volume": {"Vol", "量"}, + "heikin_ashi.smoothed": {"Heikin-Ashi", "平均 K 线"}, + "heikin_ashi.raw": {"Candles", "原 K 线"}, + "heikin_ashi.switch": {"Candle style", "K 线样式"}, + "compare_symbol.label": {"Compared symbols", "对比品种"}, + "compare_symbol.remove": {"Remove %s", "移除 %s"}, + "price_alert_line.tag": {"Alert %s", "预警 %s"}, + "chart_sync.link": {"Sync with other charts", "与其他图表同步"}, + "chart_sync.linked": {"Synced", "已同步"}, + "chart_sync.unlinked": {"Not synced", "未同步"}, + "indicator_pane.remove": {"Remove %s", "移除 %s"}, + "line_quote_chart.price": {"Price", "价格"}, + "line_quote_chart.average": {"Average", "均价"}, + "line_quote_chart.pre": {"Pre-market", "盘前"}, + "line_quote_chart.after": {"After hours", "盘后"}, + "depth_chart.bids": {"Bids", "买盘"}, + "depth_chart.asks": {"Asks", "卖盘"}, + "depth_chart.bid": {"Bid", "买"}, + "depth_chart.ask": {"Ask", "卖"}, + "depth_chart.total": {"cumulative %s", "累计 %s"}, + "depth_chart.mid": {"Mid", "中间价"}, + "volume_profile.value_area": {"Value area", "价值区"}, + "volume_profile.other": {"Outside", "区外"}, + "volume_profile.poc": {"POC", "控制点"}, + "volume_profile.vah": {"VAH", "价值区上沿"}, + "volume_profile.val": {"VAL", "价值区下沿"}, + "drawing_tools.note": {"Note", "标注"}, }) } diff --git a/testdata/snapshots/darwin/depth_chart-dark.png b/testdata/snapshots/darwin/depth_chart-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..761e3dc9501811476b7e81c0b232750bb30fd42a GIT binary patch literal 18130 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 Ikbc1b024u3`Tzg` literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/line_quote_chart-dark.png b/testdata/snapshots/darwin/line_quote_chart-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e815481408a2e76113a8c5bed9e2f001644633 GIT binary patch literal 33643 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 cd{EnSFX= bins[i].Low && (c.Low < bins[i].High || i == n-1) { + bins[i].Volume += c.Volume + break + } + continue + } + overlap := min(c.High, bins[i].High) - max(c.Low, bins[i].Low) + if overlap > 0 { + bins[i].Volume += c.Volume * overlap / span + } + } + } + return bins +} + +// ValueArea returns the point of control (the fullest bin) and the bins [lo, hi] around it holding frac of the volume. +func ValueArea(bins []ProfileBin, frac float64) (poc, lo, hi int) { + if len(bins) == 0 || !(frac > 0 && frac <= 1) { + panic("mujica: ValueArea needs bins and a fraction in (0, 1]") + } + var total float64 + for i, b := range bins { + total += b.Volume + if b.Volume > bins[poc].Volume { + poc = i + } + } + lo, hi = poc, poc + in := bins[poc].Volume + for in < frac*total { + // Grow toward the fuller neighbor, as the market-profile rule does. + down, up := -1.0, -1.0 + if lo > 0 { + down = bins[lo-1].Volume + } + if hi < len(bins)-1 { + up = bins[hi+1].Volume + } + if down < 0 && up < 0 { + break + } + if up >= down { + hi++ + in += up + } else { + lo-- + in += down + } + } + return poc, lo, hi +} + +// VolumeProfileOptions configure a VolumeProfile. +type VolumeProfileOptions struct { + Frame ChartFrame + // ValueArea is the share of volume in the value area; zero is 0.7. + ValueArea float64 + Decimals int +} + +// VolumeProfile draws volume by price as horizontal bars, marking the point of control and the value area. +func VolumeProfile(c *ui.Context, bins []ProfileBin, opts VolumeProfileOptions) ChartResult { + frac := opts.ValueArea + if frac == 0 { + frac = 0.7 + } + dec := priceDecimals("VolumeProfile", opts.Decimals) + ch := newChart(c, opts.Frame) + k := Tokens(c) + va := chartMemo(ch, "va", [2]any{chartID(bins), frac}, func() [4]float64 { + vmax := 0.0 + for i, b := range bins { + if !(b.High > b.Low) || b.Volume < 0 || i > 0 && b.Low < bins[i-1].High-1e-9 { + panic(fmt.Sprintf("mujica: VolumeProfile bin %d is empty, negative or out of order", i)) + } + vmax = max(vmax, b.Volume) + } + if len(bins) == 0 { + return [4]float64{} + } + poc, lo, hi := ValueArea(bins, frac) + return [4]float64{float64(poc), float64(lo), float64(hi), vmax} + }) + poc, vlo, vhi, vmax := int(va[0]), int(va[1]), int(va[2]), va[3] + inArea, outArea := k.AccentText, k.TextMuted + keys := []chartKey{{Name: msg(c, "volume_profile.value_area"), Color: inArea, Shape: 1}, {Name: msg(c, "volume_profile.other"), Color: outArea, Shape: 4}} + size := FontSize(c, theme.CaptionSize) + geom := func(r ui.Rect) (ui.Rect, internal.Linear, internal.Linear) { + plot := chartInset(r, 60, 26) + return plot, internal.Linear{D0: 0, D1: max(vmax, 1), R0: float64(plot.X), R1: float64(plot.X + plot.W)}, + internal.Linear{D0: bins[0].Low, D1: bins[len(bins)-1].High, R0: float64(plot.Y + plot.H), R1: float64(plot.Y)} + } + spec := chartSpec{n: len(bins), keys: keys} + spec.move = func(i int, key ui.Key) int { + if key == ui.KeyDown || key == ui.KeyLeft { + return max(i-1, 0) + } + return min(i+1, len(bins)-1) + } + spec.pick = func(r ui.Rect, x, y float32) int { + plot, _, ys := geom(r) + if !plot.Contains(x, y) { + return -1 + } + v := ys.Invert(y) + for i, b := range bins { + if v >= b.Low && v <= b.High { + return i + } + } + return -1 + } + spec.readout = func(i int) string { + b := bins[i] + parts := []string{priceUngrouped(b.Low, dec) + "–" + priceUngrouped(b.High, dec), msg(c, "candlestick_chart.volume") + " " + statisticFormat(b.Volume, 0)} + if i == poc { + parts = append(parts, msg(c, "volume_profile.poc")) + } + if i >= vlo && i <= vhi { + parts = append(parts, msg(c, "volume_profile.value_area")) + } + return strings.Join(parts, " · ") + } + spec.draw = func(p *ui.Painter, r ui.Rect, active int) { + plot, xs, ys := geom(r) + _, _, step := internal.Nice(ys.D0, ys.D1, 5) + internal.AxisY(p, plot, ys, internal.Ticks(ys.D0, ys.D1, step), func(v float64) string { return internal.FormatTick(v, step) }, size, k) + _, _, xstep := internal.Nice(0, xs.D1, 3) + var tx []float32 + var tl []string + for _, t := range internal.Ticks(0, xs.D1, xstep) { + tx, tl = append(tx, xs.Map(t)), append(tl, volumeShort(t, xstep)) + } + internal.AxisX(p, plot, tx, tl, size, k) + for i, b := range bins { + y0, y1 := ys.Map(b.High), ys.Map(b.Low) + bar := ui.Rect{X: plot.X, Y: y0 + 1, W: xs.Map(b.Volume) - plot.X, H: max(1, y1-y0-2)} + // Value-area bars are filled, the rest outlined. + if i >= vlo && i <= vhi { + p.Fill(bar, inArea.Alpha(0.75), 0) + } else { + p.Stroke(bar, outArea, 0, 1) + } + if i == active { + p.Stroke(ui.Rect{X: bar.X - 1, Y: bar.Y - 1, W: bar.W + 2, H: bar.H + 2}, k.Text, 0, 1.5) + } + } + for _, line := range []struct { + v float64 + key string + }{{(bins[poc].Low + bins[poc].High) / 2, "volume_profile.poc"}, {bins[vhi].High, "volume_profile.vah"}, {bins[vlo].Low, "volume_profile.val"}} { + y := internal.Snap(p, ys.Map(line.v)) + p.Line(plot.X, y, plot.X+plot.W, y, 1, k.Warning) + mktTag(p, plot.X+plot.W, y, msg(c, line.key)+" "+priceUngrouped(line.v, dec), size, k.Warning, k.Surface) + } + } + res, _ := ch.build(spec) + return res +} diff --git a/volume_profile_test.go b/volume_profile_test.go new file mode 100644 index 0000000..5444b82 --- /dev/null +++ b/volume_profile_test.go @@ -0,0 +1,72 @@ +package mujica + +import ( + "math" + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestVolumeProfileOfAndValueArea(t *testing.T) { + cs := candlesOf([5]float64{10, 14, 10, 12, 400}, [5]float64{12, 12, 12, 12, 50}, [5]float64{11, 12, 10, 11, 100}) + bins := VolumeProfileOf(cs, 4) // bins of 1: 10-11, 11-12, 12-13, 13-14 + want := []float64{100 + 50, 100 + 50, 100 + 50, 100} + for i, b := range bins { + if math.Abs(b.Volume-want[i]) > 1e-9 || b.Low != 10+float64(i) { + t.Fatalf("bin %d %+v, want volume %v", i, b, want[i]) + } + } + vb := []ProfileBin{{0, 1, 5}, {1, 2, 10}, {2, 3, 40}, {3, 4, 30}, {4, 5, 15}} + poc, lo, hi := ValueArea(vb, 0.7) + // 40, then 30 above: 70 of 100 is enough. + if poc != 2 || lo != 2 || hi != 3 { + t.Fatalf("value area %d %d..%d", poc, lo, hi) + } + if _, _, hi := ValueArea(vb, 1); hi != 4 { + t.Fatal("full value area") + } + defer func() { + if recover() == nil { + t.Fatal("zero bins accepted") + } + }() + VolumeProfileOf(cs, 0) +} + +func TestVolumeProfileKeyboard(t *testing.T) { + vb := []ProfileBin{{0, 1, 5}, {1, 2, 10}, {2, 3, 40}, {3, 4, 30}, {4, 5, 15}} + var res ChartResult + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + res = VolumeProfile(c, vb, VolumeProfileOptions{Frame: ChartFrame{Label: "Profile"}}) + }, 500, 360) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyUp) + tt.Key(0, ui.KeyUp) + tt.Key(0, ui.KeyUp) + if res.Point != 2 || !tt.HasText("2.00–3.00 · Vol 40 · POC · Value area") { + t.Fatalf("POC readout %d %q", res.Point, tt.Texts()) + } + tt.Key(0, ui.KeyDown) + if !tt.HasText("1.00–2.00 · Vol 10") || tt.HasText("1.00–2.00 · Vol 10 · Value area") { + t.Fatalf("outside readout %q", tt.Texts()) + } + defer func() { + if recover() == nil { + t.Fatal("overlapping bins accepted") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + VolumeProfile(c, []ProfileBin{{0, 2, 1}, {1, 3, 1}}, VolumeProfileOptions{Frame: ChartFrame{Label: "x"}}) + }, 200, 100) +} + +func TestVolumeProfileSnapshot(t *testing.T) { + bins := VolumeProfileOf(sampleCandles(200), 18) + snapshot(t, "volume_profile", 480, 380, func(c *ui.Context) { + ui.Column(c).Padding(12).Children(func() { + VolumeProfile(c, bins, VolumeProfileOptions{Frame: ChartFrame{Label: "Profile", Height: 290}}) + }) + }) +}