golang终端股票行情监控与持仓跟踪插件ticker的使用
Golang终端股票行情监控与持仓跟踪插件ticker的使用
简介
Ticker是一个终端股票和加密货币价格监控器及持仓跟踪工具。
功能特性
- 实时股票和加密货币报价
- 跟踪股票持仓价值
- 支持多个成本基础批次
- 支持盘前和盘后价格报价
安装
Homebrew
brew install achannarasappa/tap/ticker
Linux
curl -Ls https://api.github.com/repos/achannarasappa/ticker/releases/latest \
| grep -wo "https.*linux-amd64*.tar.gz" \
| wget -qi - \
&& tar -xvf ticker*.tar.gz ticker \
&& chmod +x ./ticker \
&& sudo mv ticker /usr/local/bin/
Windows
winget install -e --id achannarasappa.ticker
Docker
docker run -it --rm achannarasappa/ticker
注意:可以通过使用-v ~/.ticker.yaml:/.ticker.yaml
绑定挂载从主机挂载配置文件
Snap
sudo snap install ticker
注意:由于Snap不允许访问点文件,需要使用--config $HOME/ticker.yaml
设置配置文件
快速开始
ticker -w NET,AAPL,TSLA
使用方法
选项名称 | 别名 | 标志 | 默认值 | 描述 |
---|---|---|---|---|
–config | ~/.ticker.yaml |
包含观察列表和持仓的配置文件位置 | ||
interval | -i | –interval | 5 |
刷新间隔(秒) |
watchlist | -w | –watchlist | 要监控的符号逗号分隔列表 | |
show-tags | –show-tags | 显示每个报价的货币、交易所名称和报价延迟 | ||
show-fundamentals | –show-fundamentals | 显示开盘价、前收盘价和当日范围 | ||
show-separator | –show-separator | 在每个报价之间显示分隔符的布局 | ||
show-summary | –show-summary | 显示总日变化、总价值和总价值变化 | ||
show-holdings | –show-holdings | 显示持仓包括权重、平均成本和数量 | ||
sort | –sort | 在UI上排序报价 - 选项有change percent(默认)、alpha 、value 和user |
||
version | –version | 打印当前版本号 | ||
debug | 启用调试日志记录到./ticker-log-<date>.log |
配置
配置不是必须的,但有助于持续监控相同的股票。配置也可用于设置成本基础批次,进而显示任何持仓的总收益或损失。
# ~/.ticker.yaml
show-summary: true
show-tags: true
show-fundamentals: true
show-separator: true
show-holdings: true
interval: 5
currency: USD
currency-summary-only: false
watchlist:
- NET
- TEAM
- ESTC
- BTC-USD # 通过Yahoo获取比特币价格
- SOL.X # 通过Coinbase获取Solana价格
- BIT-30MAY25-CDE.CB # 通过Coinbase获取比特币期货合约价格
lots:
- symbol: "ABNB"
quantity: 35.0
unit_cost: 146.00
- symbol: "ARKW"
quantity: 20.0
unit_cost: 152.25
- symbol: "ARKW"
quantity: 20.0
unit_cost: 145.35
fixed_cost: 7.00 # 例如经纪佣金费用
groups:
- name: crypto
watchlist:
- SHIB-USD
- VGX-USD
holdings:
- symbol: SOL1-USD
quantity: 17
unit_cost: 159.10
.ticker.yaml
中的所有属性都是可选的- 不在观察列表中但存在于
lots
中的符号会隐式添加到观察列表 - 要为同一
symbol
添加多个成本基础批次(quantity
,unit_cost
),包含两个或多个条目 - 参见上面的ARKW
示例 .ticker.yaml
可以设置在用户主目录、当前目录或XDG配置主目录
完整示例
package main
import (
"fmt"
"os/exec"
)
func main() {
// 运行ticker监控特定股票
cmd := exec.Command("ticker", "-w", "AAPL,TSLA,MSFT", "--show-summary", "--interval=10")
// 捕获输出
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("运行ticker出错: %v\n", err)
return
}
fmt.Println(string(output))
}
开发
运行测试:
go run github.com/onsi/ginkgo/v2/ginkgo -cover ./...
代码检查:
golangci-lint run
注意事项
-
市场数据延迟
- Yahoo Finance - 从Yahoo finance获取的市场数据会有一些延迟(<~30秒)
- Coinbase - Coinbase上现货资产的市场数据通过WebSocket连接直接从交易所流式传输,几乎是实时的
-
终端字体 - 需要支持
HORIZONTAL LINE SEPARATOR
unicode字符的字体才能正确渲染分隔符(--show-separator
选项)
更多关于golang终端股票行情监控与持仓跟踪插件ticker的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang终端股票行情监控与持仓跟踪插件ticker的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang终端股票行情监控与持仓跟踪插件ticker使用指南
简介
ticker是一个轻量级的Golang终端股票行情监控工具,可以实时显示股票价格、涨跌幅等信息,并支持持仓跟踪功能。下面我将详细介绍如何使用这个工具。
安装
首先需要安装ticker:
go install github.com/achannarasappa/ticker@latest
基本使用
1. 查看单个股票行情
package main
import (
"fmt"
"os/exec"
)
func main() {
// 查看苹果公司(AAPL)股票行情
cmd := exec.Command("ticker", "AAPL")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Println(string(output))
}
2. 查看多个股票行情
func main() {
// 查看多个股票行情
cmd := exec.Command("ticker", "AAPL", "MSFT", "GOOGL")
output, _ := cmd.CombinedOutput()
fmt.Println(string(output))
}
配置文件
ticker支持通过配置文件(~/.ticker.yaml)自定义显示内容和持仓信息。
示例配置文件
# ~/.ticker.yaml
watchlist:
- AAPL
- MSFT
- GOOGL
- TSLA
- AMZN
positions:
- symbol: AAPL
quantity: 10
cost_basis: 145.67
- symbol: MSFT
quantity: 5
cost_basis: 250.30
refresh_interval: 60 # 刷新间隔(秒)
高级功能
1. 自定义显示列
show_summary: true
show_tags: false
extra_info:
- name: "52W High"
value: quote.fiftyTwoWeekHigh
color: green
- name: "52W Low"
value: quote.fiftyTwoWeekLow
color: red
2. 持仓跟踪功能
package main
import (
"log"
"os"
"path/filepath"
"gopkg.in/yaml.v2"
)
type Position struct {
Symbol string `yaml:"symbol"`
Quantity float64 `yaml:"quantity"`
CostBasis float64 `yaml:"cost_basis"`
}
type Config struct {
Positions []Position `yaml:"positions"`
}
func main() {
// 读取持仓配置
home, _ := os.UserHomeDir()
configPath := filepath.Join(home, ".ticker.yaml")
data, err := os.ReadFile(configPath)
if err != nil {
log.Fatal(err)
}
var config Config
err = yaml.Unmarshal(data, &config)
if err != nil {
log.Fatal(err)
}
// 打印持仓信息
for _, pos := range config.Positions {
fmt.Printf("%s: %.2f shares @ %.2f\n", pos.Symbol, pos.Quantity, pos.CostBasis)
}
}
3. 程序化使用ticker
package main
import (
"bytes"
"encoding/json"
"fmt"
"os/exec"
"strings"
)
type Quote struct {
Symbol string `json:"symbol"`
Price float64 `json:"price"`
Change float64 `json:"change"`
ChangePct float64 `json:"changePercent"`
}
func getStockData(symbols []string) ([]Quote, error) {
cmd := exec.Command("ticker", append([]string{"--output", "json"}, symbols...)...)
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
return nil, err
}
var quotes []Quote
err = json.Unmarshal(out.Bytes(), "es)
if err != nil {
return nil, err
}
return quotes, nil
}
func main() {
symbols := []string{"AAPL", "MSFT", "GOOGL"}
quotes, err := getStockData(symbols)
if err != nil {
fmt.Println("Error:", err)
return
}
for _, q := range quotes {
trend := "↑"
if q.Change < 0 {
trend = "↓"
}
fmt.Printf("%s: %.2f %s %.2f (%.2f%%)\n",
q.Symbol, q.Price, trend, q.Change, q.ChangePct)
}
}
常用命令行选项
-w, --watchlist
指定要监控的股票代码列表-p, --positions
显示持仓信息-i, --interval
设置刷新间隔(秒)--output
指定输出格式(json/text)--config
指定配置文件路径
总结
ticker是一个功能强大但使用简单的终端股票监控工具,通过Golang可以轻松集成到自己的应用中。无论是简单的行情查看还是复杂的持仓跟踪,ticker都能很好地满足需求。
以上代码示例展示了如何以编程方式使用ticker,以及如何解析其输出结果。您可以根据自己的需求进一步扩展这些示例。