golang终端股票行情监控与持仓跟踪插件ticker的使用

Golang终端股票行情监控与持仓跟踪插件ticker的使用

简介

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(默认)、alphavalueuser
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 SEPARATORunicode字符的字体才能正确渲染分隔符(--show-separator选项)


更多关于golang终端股票行情监控与持仓跟踪插件ticker的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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(), &quotes)
	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,以及如何解析其输出结果。您可以根据自己的需求进一步扩展这些示例。

回到顶部