A股股票数据采集 SDK (Go 语言实现)
adata-golang 是 Python 版本 adata 的 Go 语言移植版本,专注于A股市场数据的采集与处理。
- 同花顺
- 东方财富
- 百度
- 腾讯
- 新浪
- 股票: 股票信息、市场行情、财务数据、指数数据
- 基金: ETF基金信息与行情
- 债券: 可转债信息与行情
- 舆情: 北向资金、热门股票、涨停板、融资融券等市场情绪数据
adata-golang/
├── cmd/ # 示例程序
│ ├── get_600416/ # 股票信息获取示例
│ ├── test_indicator/ # 技术指标测试(待实现)
│ ├── test_backtest/ # 回测功能测试(待实现)
│ ├── test_strategy/ # 策略回测示例(待实现)
│ ├── test_advanced/ # 高级功能演示(待实现)
│ ├── quick_start/ # 快速开始示例
│ └── test_all/ # 全接口测试
├── pkg/ # 公共 API(外部可引用)
│ ├── adata/ # 主入口包
│ ├── stock/ # 股票模块
│ │ ├── info/ # 股票基本信息
│ │ ├── market/ # 市场行情数据
│ │ ├── finance/ # 财务数据
│ │ └── index/ # 指数数据
│ ├── fund/ # ETF基金模块
│ │ ├── info/ # 基金基本信息
│ │ └── market/ # 基金行情数据
│ ├── bond/ # 可转债模块
│ │ ├── info/ # 债券基本信息
│ │ └── market/ # 债券行情数据
│ └── sentiment/ # 舆情模块
│ ├── north/ # 北向资金
│ ├── hot/ # 热门股票
│ ├── lifting/ # 涨停板
│ ├── margin/ # 融资融券
│ └── alist/ # 龙虎榜
├── internal/ # 内部实现(不对外暴露)
│ └── common/ # 公共模块
│ ├── client/ # HTTP客户端封装
│ ├── headers/ # 请求头管理
│ └── utils/ # 工具函数
├── go.mod
├── go.sum
└── README.md
go get github.com/hanson/adata-golangpackage main
import (
"fmt"
"github.com/hanson/adata-golang/pkg/stock"
)
func main() {
// 创建 Stock 实例
stockData := stock.New()
// 获取股票基本信息
info := stockData.GetInfo()
stockInfo, err := info.GetStockShares("000001", false)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Stock Info: %+v\n", stockInfo)
// 获取市场行情数据
market := stockData.GetMarket()
klines, err := market.GetMarket("000001", "2024-01-01", "2024-12-31", 1, 1)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("K线数据: %d 条\n", len(klines))
}package main
import (
"fmt"
"github.com/hanson/adata-golang/pkg/stock"
)
func main() {
stockData := stock.New()
market := stockData.GetMarket()
indicatorPkg := stockData.GetIndicator()
// 获取K线数据
klines, _ := market.GetMarket("600416", "2024-01-01", "2024-12-31", 1, 1)
// 提取收盘价
close := make([]float64, len(klines))
for i, k := range klines {
close[i] = k.Close
}
// 计算技术指标
ma5 := indicatorPkg.SMA(close, 5)
ma20 := indicatorPkg.SMA(close, 20)
macd, signal, hist := indicatorPkg.MACD(close, 12, 26, 9)
rsi := indicatorPkg.RSI(close, 14)
fmt.Printf("MA5: %.2f\n", ma5[len(ma5)-1])
fmt.Printf("MA20: %.2f\n", ma20[len(ma20)-1])
fmt.Printf("RSI: %.2f\n", rsi[len(rsi)-1])
}package main
import (
"fmt"
"github.com/hanson/adata-golang/pkg/stock"
"github.com/hanson/adata-golang/pkg/stock/strategy"
)
func main() {
stockData := stock.New()
market := stockData.GetMarket()
// 获取K线数据
klines, _ := market.GetMarket("600416", "2024-01-01", "2024-12-31", 1, 1)
// 提取数据
dates := make([]string, len(klines))
open := make([]float64, len(klines))
high := make([]float64, len(klines))
low := make([]float64, len(klines))
close := make([]float64, len(klines))
volume := make([]int64, len(klines))
preClose := make([]float64, len(klines))
for i, k := range klines {
dates[i] = k.TradeDate
open[i] = k.Open
high[i] = k.High
low[i] = k.Low
close[i] = k.Close
volume[i] = k.Volume
preClose[i] = k.PreClose
}
// 创建双均线策略
maStrategy := strategy.NewDualMAStrategy(5, 20)
// 配置回测参数
config := &strategy.BacktestConfig{
InitialCapital: 100000.0,
Commission: 0.0003,
Slippage: 0.001,
}
// 创建回测引擎
engine := strategy.NewBacktestEngine(maStrategy, config)
result := engine.Run(dates, open, high, low, close, volume, preClose)
// 输出回测结果
fmt.Printf("总收益率: %.2f%%\n", result.TotalReturn*100)
fmt.Printf("年化收益率: %.2f%%\n", result.AnnualReturn*100)
fmt.Printf("最大回撤: %.2f%%\n", result.MaxDrawdown*100)
fmt.Printf("夏普比率: %.4f\n", result.SharpeRatio)
fmt.Printf("胜率: %.2f%%\n", result.WinRate*100)
fmt.Printf("交易次数: %d\n", result.TotalTrades)
}- 项目结构初始化
- HTTP 客户端封装
- 请求头管理
- 股票信息采集(Stock.Info 模块 - 13个接口)
- 市场行情采集(Stock.Market 模块 - 18个接口)
- 财务数据采集(Stock.Finance 模块)
- 指数数据采集(Stock.Index 模块)
- 基金数据采集(Fund 模块 - 4个接口)
- 债券数据采集(Bond 模块 - 2个接口)
- 舆情数据采集(Sentiment 模块 - 11个接口)
- 技术指标计算(Stock.Indicator 模块 - 24个指标)
- 回测辅助工具(Stock.Backtest 模块 - 7类功能)
- 策略回测框架(Stock.Strategy 模块 - 完整回测引擎)
- 内置交易策略(5种经典策略)
- 单元测试
- 性能优化
- 实时行情推送
- 多策略组合优化
AllCode()- 获取所有A股代码GetStockShares(stockCode, isHistory)- 获取股本信息GetIndustrySw(stockCode)- 获取申万行业分类TradeCalendar(startDate, endDate)- 获取交易日历
AllConceptCodeThs()- 获取同花顺所有概念代码ConceptConstituentThs(conceptCode)- 获取同花顺概念成分股GetConceptThs(stockCode)- 获取股票所属概念(同花顺)
AllConceptCodeEast()- 获取东方财富所有概念代码ConceptConstituentEast(conceptCode)- 获取东方财富概念成分股GetConceptEast(stockCode)- 获取股票所属概念(东方财富)GetPlateEast(stockCode)- 获取股票所属板块
AllIndexCode()- 获取所有指数代码IndexConstituent(indexCode)- 获取指数成分股
GetMarket(stockCode, startDate, endDate, kType, fqType)- 获取K线数据GetMarketMin(stockCode, tradeDate)- 获取分时数据ListMarketCurrent(codes)- 获取实时行情GetMarketFive(stockCode)- 获取五档行情GetMarketBar(stockCode, tradeDate)- 获取分笔数据GetDividend(stockCode)- 获取分红数据
GetMarketConceptThs(conceptCode, startDate, endDate, kType, fqType)- 概念K线GetMarketConceptMinThs(conceptCode, tradeDate)- 概念分时GetMarketConceptCurrentThs(conceptCode)- 概念实时行情
GetMarketConceptEast(conceptCode, startDate, endDate, kType, fqType)- 概念K线GetMarketConceptMinEast(conceptCode, tradeDate)- 概念分时GetMarketConceptCurrentEast(conceptCode)- 概念实时行情
GetMarketIndex(indexCode, startDate, endDate, kType)- 指数K线GetMarketIndexMin(indexCode, tradeDate)- 指数分时GetMarketIndexCurrent(indexCode)- 指数实时行情
GetCapitalFlowMin(stockCode, tradeDate)- 分时资金流向GetCapitalFlow(stockCode, startDate, endDate)- 日资金流向AllCapitalFlowEast(tradeDate, page)- 东方财富全市场资金流向
GetCoreIndex(stockCode, startDate, endDate)- 获取核心财务指标
指数数据采集功能
AllETFExchangeTradedInfo()- 获取所有ETF基本信息GetMarketETF(fundCode, startDate, endDate)- 获取ETF行情GetMarketETFMin(fundCode, tradeDate)- 获取ETF分时GetMarketETFCurrent(fundCode)- 获取ETF实时数据
AllConvertCode()- 获取可转债代码ListMarketCurrentBond(codes)- 获取可转债实时行情
NorthFlow(startDate, endDate)- 北向资金历史NorthFlowMin(tradeDate)- 北向资金分时NorthFlowCurrent()- 北向资金实时
PopRank100East()- 东方财富人气榜HotRank100THS()- 同花顺热度榜HotConcept20THS(plateType)- 同花顺热门概念
ListAListDaily(reportDate)- 龙虎榜日榜GetAListInfo(stockCode, reportDate)- 龙虎榜详情
StockLiftingLastMonth()- 股票解禁SecuritiesMargin(stockCode, startDate, endDate)- 融资融券余额
以下功能在开发计划中,但尚未实现代码:
- SMA、EMA、MACD、RSI、KDJ、布林带等基础指标
- TRIX、ROC、BIAS、WR、MFI等高级指标
- 支撑阻力位识别、唐奇安通道、枢轴点计算
- 收益率计算
- 涨跌停检测与分析
- 停牌检测与处理
- 交易日历生成与查询
- 20+项风险指标计算
- 完整的回测引擎
- 5种内置交易策略(双均线、MACD、RSI、布林带、多策略组合)
- 订单管理系统
- 完整的绩效指标体系
- 股票数据: 基本信息、市场行情、财务数据、指数数据(45+个接口)
- 基金数据: ETF基本信息、行情数据(4个接口)
- 债券数据: 可转债基本信息、实时行情(2个接口)
- 舆情数据: 北向资金、热度榜单、龙虎榜、融资融券(11个接口)
- 链式调用: 代码简洁优雅
- 统一的数据结构: 降低学习成本
- 丰富的示例程序: 快速上手
- 详细的注释文档: 便于理解
- pkg/ 目录: 公共 API,外部项目可以直接引用
- 清晰的模块划分: 按业务领域组织
- 版本化支持: 便于依赖管理
-
数据采集
- 获取A股市场实时和历史数据
- 收集基金、债券市场信息
- 监控市场情绪和资金流向
-
数据分析
- 股票基本信息查询
- 市场行情数据分析
- 财务数据研究
-
量化交易基础(待实现技术指标后)
- 技术指标计算
- 策略回测
- 风险管理
- 语言: Go 1.21+
- HTTP客户端: resty
- HTML解析: goquery
- 编码处理: golang.org/x/text
- 模块化设计: 清晰的模块划分
- 公共API: pkg/ 目录对外暴露,internal/ 目录内部实现
- 依赖管理: 使用 go.mod 管理依赖
项目包含多个示例程序,展示不同功能的使用方法:
演示 Stock.Info 模块的基本使用。
cd cmd/quick_start
go run main.go获取股票600416的完整信息,包括基本信息、行业分类、概念板块、市场数据等。
cd cmd/get_600416
go run main.go测试所有已实现的接口功能。
cd cmd/test_all
go run main.go以下示例程序需要等待相应模块实现后才能运行:
- cmd/test_indicator - 技术指标测试(待实现 Stock.Indicator 模块)
- cmd/test_backtest - 回测功能测试(待实现 Stock.Backtest 模块)
- cmd/test_strategy - 策略回测示例(待实现 Stock.Strategy 模块)
- cmd/test_advanced - 高级功能演示(待实现相关模块)
- 高性能: Go语言实现,计算速度快
- 低内存: 合理的数据结构,内存占用小
- 并发友好: 支持并发计算多个股票或策略
- 可扩展: 模块化设计,易于添加新功能
import "github.com/hanson/adata-golang/pkg/adata"
func main() {
// 创建主实例
ad := adata.New()
// 获取所有股票代码
codes, err := ad.Stock.GetInfo().AllCode()
if err != nil {
panic(err)
}
// 获取特定股票的股本信息
shares, err := ad.Stock.GetInfo().GetStockShares("000001", false)
// ...
}// 获取K线数据
klines, err := ad.Stock.GetMarket().GetMarket("000001", "2024-01-01", "2024-12-31", 1, 1)
if err != nil {
panic(err)
}
// 获取实时行情
current, err := ad.Stock.GetMarket().ListMarketCurrent([]string{"000001", "600000"})
// ...// 获取北向资金历史
northFlow, err := ad.Sentiment.NorthFlow("2024-01-01", "2024-01-31")
// 获取龙虎榜日榜
aList, err := ad.Sentiment.ListAListDaily("2024-01-15")
// ...欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 遵循 Go 语言代码规范
- 添加必要的注释和文档
- 编写测试用例
- 确保代码通过
go vet和golint检查
MIT License
Copyright (c) 2024 adata-golang contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
本项目基于 Python 版本 adata 进行移植实现。
感谢以下开源项目的启发和支持:
项目结构重构 🎉
- ✅ 将对外 API 从
internal/移动到pkg/目录 - ✅ 外部项目现在可以直接引用
pkg/下的包 - ✅ 保留
internal/common/作为内部实现
- ✅ 更新 README.md 中的导入路径
- ✅ 更新项目结构说明
- ✅ 更新所有示例代码
数据采集功能扩展
- ✅ Stock.Market 模块(18个接口)- 市场行情数据采集
- ✅ Stock.Finance 模块 - 财务数据采集
- ✅ Stock.Index 模块 - 指数数据采集
- ✅ Fund 模块(4个接口)- ETF基金数据采集
- ✅ Bond 模块(2个接口)- 可转债数据采集
- ✅ Sentiment 模块(11个接口)- 舆情数据采集
初始版本发布
- ✅ 项目结构初始化
- ✅ HTTP客户端封装
- ✅ Stock.Info模块(13个接口)
- ✅ 基础数据采集功能
- 问题反馈: GitHub Issues
- 功能建议: GitHub Discussions
- 实现技术指标模块(Stock.Indicator)- 24个技术指标
- 实现回测辅助工具(Stock.Backtest)- 7类功能
- 实现策略回测框架(Stock.Strategy)- 5种内置策略
- 完善单元测试覆盖率
- 参数优化功能(网格搜索、遗传算法)
- 蒙特卡洛模拟
- 因子分析框架
- 多品种回测(股票、基金、期货)
- 实时行情推送
- Web界面
- 云端部署支持
- 机器学习集成
Star ⭐ 本项目如果对你有帮助,请给个 Star 支持一下!