Hanson/adata-golang

adata 的 golang 版本,股票数据,股票行情数据,股票量化数据,股票交易数据,k线行情数据,股票概念数据,股票数据接口,行情数据接口,量化交易数据

★ 8Forks 3GoGitHub ↗Compare

README

adata-golang

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-golang

基础使用示例

package 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种经典策略)
  • 单元测试
  • 性能优化
  • 实时行情推送
  • 多策略组合优化

已实现功能

一、Stock.Info 模块(13个接口)

基本信息

  • 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) - 获取指数成分股

二、Stock.Market 模块(18个接口)

股票行情

  • 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) - 东方财富全市场资金流向

三、Stock.Finance 模块(1个接口)

  • GetCoreIndex(stockCode, startDate, endDate) - 获取核心财务指标

四、Stock.Index 模块

指数数据采集功能


五、Fund 模块(4个接口)

  • AllETFExchangeTradedInfo() - 获取所有ETF基本信息
  • GetMarketETF(fundCode, startDate, endDate) - 获取ETF行情
  • GetMarketETFMin(fundCode, tradeDate) - 获取ETF分时
  • GetMarketETFCurrent(fundCode) - 获取ETF实时数据

六、Bond 模块(2个接口)

  • AllConvertCode() - 获取可转债代码
  • ListMarketCurrentBond(codes) - 获取可转债实时行情

七、Sentiment 模块(11个接口)

北向资金

  • NorthFlow(startDate, endDate) - 北向资金历史
  • NorthFlowMin(tradeDate) - 北向资金分时
  • NorthFlowCurrent() - 北向资金实时

热度榜单

  • PopRank100East() - 东方财富人气榜
  • HotRank100THS() - 同花顺热度榜
  • HotConcept20THS(plateType) - 同花顺热门概念

龙虎榜

  • ListAListDaily(reportDate) - 龙虎榜日榜
  • GetAListInfo(stockCode, reportDate) - 龙虎榜详情

其他

  • StockLiftingLastMonth() - 股票解禁
  • SecuritiesMargin(stockCode, startDate, endDate) - 融资融券余额

待实现功能 🚧

以下功能在开发计划中,但尚未实现代码:

Stock.Indicator 模块(24个技术指标)

  • SMA、EMA、MACD、RSI、KDJ、布林带等基础指标
  • TRIX、ROC、BIAS、WR、MFI等高级指标
  • 支撑阻力位识别、唐奇安通道、枢轴点计算

Stock.Backtest 模块(回测辅助工具)

  • 收益率计算
  • 涨跌停检测与分析
  • 停牌检测与处理
  • 交易日历生成与查询
  • 20+项风险指标计算

Stock.Strategy 模块(策略回测框架)

  • 完整的回测引擎
  • 5种内置交易策略(双均线、MACD、RSI、布林带、多策略组合)
  • 订单管理系统
  • 完整的绩效指标体系

功能特性

📊 全面的数据采集

  • 股票数据: 基本信息、市场行情、财务数据、指数数据(45+个接口)
  • 基金数据: ETF基本信息、行情数据(4个接口)
  • 债券数据: 可转债基本信息、实时行情(2个接口)
  • 舆情数据: 北向资金、热度榜单、龙虎榜、融资融券(11个接口)

🚀 易用的API设计

  • 链式调用: 代码简洁优雅
  • 统一的数据结构: 降低学习成本
  • 丰富的示例程序: 快速上手
  • 详细的注释文档: 便于理解

🌐 外部可引用

  • pkg/ 目录: 公共 API,外部项目可以直接引用
  • 清晰的模块划分: 按业务领域组织
  • 版本化支持: 便于依赖管理

应用场景

  1. 数据采集

    • 获取A股市场实时和历史数据
    • 收集基金、债券市场信息
    • 监控市场情绪和资金流向
  2. 数据分析

    • 股票基本信息查询
    • 市场行情数据分析
    • 财务数据研究
  3. 量化交易基础(待实现技术指标后)

    • 技术指标计算
    • 策略回测
    • 风险管理

技术栈

核心技术

架构设计

  • 模块化设计: 清晰的模块划分
  • 公共API: pkg/ 目录对外暴露,internal/ 目录内部实现
  • 依赖管理: 使用 go.mod 管理依赖

示例程序

项目包含多个示例程序,展示不同功能的使用方法:

1. 快速开始 (cmd/quick_start)

演示 Stock.Info 模块的基本使用。

cd cmd/quick_start
go run main.go

2. 获取股票信息 (cmd/get_600416)

获取股票600416的完整信息,包括基本信息、行业分类、概念板块、市场数据等。

cd cmd/get_600416
go run main.go

3. 全接口测试 (cmd/test_all)

测试所有已实现的接口功能。

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语言实现,计算速度快
  • 低内存: 合理的数据结构,内存占用小
  • 并发友好: 支持并发计算多个股票或策略
  • 可扩展: 模块化设计,易于添加新功能

最佳实践

1. 获取股票基本信息

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)
    // ...
}

2. 获取市场行情数据

// 获取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"})
// ...

3. 获取舆情数据

// 获取北向资金历史
northFlow, err := ad.Sentiment.NorthFlow("2024-01-01", "2024-01-31")

// 获取龙虎榜日榜
aList, err := ad.Sentiment.ListAListDaily("2024-01-15")
// ...

贡献指南

欢迎贡献代码!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 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 进行移植实现。

感谢以下开源项目的启发和支持:

  • adata - Python版本的A股数据采集库
  • goquery - jQuery-like HTML解析
  • resty - 简单的HTTP客户端

更新日志

v0.3.0 (2025-01)

项目结构重构 🎉

架构优化

  • ✅ 将对外 API 从 internal/ 移动到 pkg/ 目录
  • ✅ 外部项目现在可以直接引用 pkg/ 下的包
  • ✅ 保留 internal/common/ 作为内部实现

文档更新

  • ✅ 更新 README.md 中的导入路径
  • ✅ 更新项目结构说明
  • ✅ 更新所有示例代码

v0.2.0 (2024-01)

数据采集功能扩展

新增模块

  • ✅ Stock.Market 模块(18个接口)- 市场行情数据采集
  • ✅ Stock.Finance 模块 - 财务数据采集
  • ✅ Stock.Index 模块 - 指数数据采集
  • ✅ Fund 模块(4个接口)- ETF基金数据采集
  • ✅ Bond 模块(2个接口)- 可转债数据采集
  • ✅ Sentiment 模块(11个接口)- 舆情数据采集

v0.1.0 (2023-12)

初始版本发布

  • ✅ 项目结构初始化
  • ✅ HTTP客户端封装
  • ✅ Stock.Info模块(13个接口)
  • ✅ 基础数据采集功能

联系方式


路线图

近期计划

  • 实现技术指标模块(Stock.Indicator)- 24个技术指标
  • 实现回测辅助工具(Stock.Backtest)- 7类功能
  • 实现策略回测框架(Stock.Strategy)- 5种内置策略
  • 完善单元测试覆盖率

中期计划

  • 参数优化功能(网格搜索、遗传算法)
  • 蒙特卡洛模拟
  • 因子分析框架
  • 多品种回测(股票、基金、期货)

长期计划

  • 实时行情推送
  • Web界面
  • 云端部署支持
  • 机器学习集成

Star ⭐ 本项目如果对你有帮助,请给个 Star 支持一下!

Contributors

Hanson

Issues