go语言http调用Tushare财经数据包

Tushare金融数据接口:Python量化投资的数据获取与实战指南 金融数据分析与量化投资的核心基础在于高效、可靠的数据获取。传统方式中,手动采集或商业数据库往往面临效率低下、成本高昂或法律风险等问题。通过API(应用程序编程接口)技术,可以实现对多源异构金融数据的标准化集成与自动化调用,从而将数据获取过程抽象为简单的函数操作。这一技术方案的价值在于,它让开发者能够将精力集中于核心的策略研究与模型构建,而非繁琐的数据清洗与维护工作。在Python生态中,Pandas DataFrame已成为金融数据分析的事实标准数据结构,能够无缝衔接数据获取、处理与可视化流程。Tushar 阅读详情

go语言http调用Tushare财经数据包

Tushare平台介绍

  1. Tushare平台网址 https://tushare.pro/document/1,网址上就有下载安装以及数据获取的方式。Tushare Pro提供了包括股票、指数、基金、期货、数字货币在内的各类资产交易行情的分钟数据。
  2. 免费获取,数据准确,适合量化投资分析师(Quant),对金融市场进行大数据分析的企业和个人,开发以证券为基础的金融类产品和解决方案的公司,正在学习利用python进行数据分析的人使用。
  3. 有以下几种获取方式,今天介绍的是通过http来获取数据。

在这里插入图片描述
4. 为了避免部分用户低门槛无限制的恶意调取数据,更好地保证大多数用户调取数据的稳定性,同时也为了Tushare社区的可持续发展,Pro接口开始引入积分制度。只有具备一定积分级别的用户才能调取相应的API,目前只是一个分级门槛,并不消耗积分。以下只是基础积分权限,积分越多频次越高,除分钟数据外5000以上正常调取数据无频次限制。https://waditu.com/document/1?doc_id=108

使用go + http方式调用Tushare数据

// 具体http网站查看https://tushare.pro/document/1?doc_id=130
const endpoint string = "http://api.waditu.com"
const timeLayout string = "20060102"
    
type KLine struct {
	TsCode    string  `json:"ts_code" structs:"1"`
	TradeDate int64   `json:"trade_date" structs:"2"`
	Close     float64 `json:"close" structs:"3"`
	Open      float64 `json:"open" structs:"4"`
	High      float64 `json:"high" structs:"5"`
	Low       float64 `json:"low" structs:"6"`
	PreClose  float64 `json:"pre_close" structs:"7"`
	LowLimit  float64 `json:"low_limit" structs:"8"`
	HighLimit float64 `json:"high_limit" structs:"9"`
	Volume    float64 `json:"volume" structs:"10"`
	Amount    float64 `json:"amount" structs:"11"`
	Factor    float64 `json:"factor" structs:"12"`
}

type Response struct {
	Code int          `json:"code"`
	Msg  string       `json:"msg"`
	Data ResponseData `json:"data"`
}
// ResponseData stands for the field "data" in the body.
type ResponseData struct {
	Fields []string        `json:"fields"`
	Items  [][]interface{} `json:"items"`
}


type Client struct {
	// token is the token given by tushare
	token string
}

// NewClient creates a new instance of Client
func NewClient(token string) *Client {
	return &Client{token: token}
}

// makeBody makes a request body to tushare by apiName, fields and params.
func (c *Client) makeBody(apiName, fields string,
	params map[string]interface{}) (io.Reader, error) {
	m := map[string]interface{}{
		"api_name": apiName,
		"token":    c.token,
		"fields":   fields,
	}
	if params == nil {
		m["params"] = ""
	} else {
		m["params"] = params
	}
	b, err := json.Marshal(m)
	if err != nil {
		return nil, err
	}
	return bytes.NewBuffer(b), nil
}

// request makes a http request to tushare
func (c *Client) request(body io.Reader) (*Response, error) {
	// do the request
	resp, err := http.Post(endpoint, "application/json", body)
	for err != nil {
		resp, err = http.Post(endpoint, "application/json", body)
	}
	// read the data from the body
	// if the data is abnormal, error will be returned
	defer resp.Body.Close()
	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	var res Response
	err = json.Unmarshal(b, &res)
	if err != nil {
		return nil, err
	}
	if res.Code != 0 {
		return nil, errors.New(res.Msg)
	}
	return &res, nil
}

func parseUnix(tsDate string) int64 {
	date, _ := time.Parse(timeLayout, tsDate)
	return date.Unix() - 28800
}

// parseRecord parse a list of a record in tushare's response body to our
// entity
func (c *Client) parseRecord(schema []string, record []interface{},
	e interface{}) {
	switch v := e.(type) {
	case *Top10Holder:
		// ts_code,ann_date,end_date,holder_name,hold_amount,hold_ratio
		for i := range record {
			if record[i] == nil {
				continue
			}
			switch schema[i] {
			case "ts_code":
				v.TsCode = record[i].(string)
			case "ann_date":
				v.AnnDate = parseUnix(record[i].(string))
			case "end_date":
				v.Year, _ = strconv.Atoi(record[i].(string)[0:4])
			case "holder_name":
				v.HolderName = record[i].(string)
			case "hold_amount":
				v.HoldAmount = record[i].(float64)
			case "hold_ratio":
				v.HoldRatio = record[i].(float64) / 100.0
			}
		}

	
	case *KLine:
		// ts_code,trade_date,open,high,low,close,pre_close,change,
		// pct_chg,vol,amount
		for i := range record {
			if record[i] == nil {
				continue
			}
			switch schema[i] {
			case "ts_code":
				v.TsCode = record[i].(string)
			case "trade_date":
				v.TradeDate = parseUnix(record[i].(string))
			case "open":
				v.Open = record[i].(float64)
			case "high":
				v.High = record[i].(float64)
			case "low":
				v.Low = record[i].(float64)
			case "close":
				v.Close = record[i].(float64)
			case "pre_close":
				v.PreClose = record[i].(float64)
				v.LowLimit = v.PreClose * 0.9
				v.HighLimit = v.PreClose * 1.1
			case "vol":
				v.Volume = record[i].(float64)
			case "amount":
				v.Amount = record[i].(float64) * 1000
			}
			v.Factor = 1.0
		}
	}
}

// FetchKLineByTsCode fetches kline data of a single asset
func (c *Client) FetchKLineByTsCode(tsCode string, tradeDate,
	startDate, endDate *time.Time, index bool) ([]KLine, error) {
	fields := "ts_code,trade_date,open,high,low,close,pre_close,change," +
		"pct_chg,vol,amount"
	lines := make([]KLine, 0)
	table := ""
	if !index {
		table = "daily"
	} else {
		table = "index_daily"
	}
	params := map[string]interface{}{
		"ts_code": tsCode,
	}
	if tradeDate != nil {
		params["trade_date"] = tradeDate.Format(timeLayout)
	}
	if startDate != nil {
		params["start_date"] = startDate.Format(timeLayout)
	}
	if endDate != nil {
		params["end_date"] = endDate.Format(timeLayout)
	}
	reqBody, err := c.makeBody(table, fields, params)
	if err != nil {
		return nil, err
	}
	resp, err := c.request(reqBody)
	if err != nil {
		return nil, err
	}
	for _, record := range resp.Data.Items {
		line := KLine{}
		c.parseRecord(resp.Data.Fields, record, &line)
		lines = append(lines, line)
	}
	return lines, nil
}

上述代码即为构造一个结构体Kline,然后使用http post方式获取tushare数据,将数据转化为结构体形式。涉及到json数据格式转化,reqBody的构造。

重点在于获取tushare的token,token获取方式可参照https://waditu.com/document/1?doc_id=130。

以上就是go通过http方式来获取tushare数据的过程。

注意事项

http方式调用tushare是有次数限制的,免费数据源不可随意调取,按照平台给出的每分钟调用次数限制来使用。
不同数据类型的限制次数不同,下面给出一个大概的参考次数,

获取数据项次数限制
top10_holder200
Kline500
dividends200
suspensions200

具体限制次数请参照官网(可能会变化)。

切勿攻击,滥用tushare数据包。数据只供策略研究和学习使用,不允许作为商业目的。日渐增多的数据采集和处理需求、持续上升的用户请求,给服务器和带宽的扩容造成了很大压力。做遵纪守法的好公民,每个人心中都应该有一条线。

深交所股票行情数据API接口构建实战:从数据采集到高性能服务 在金融科技与量化投资领域,数据接口是连接原始数据源与应用系统的关键技术组件。其核心原理在于通过网络协议与数据源通信,将异构数据解析、清洗并转化为标准化的结构化信息。这类接口的技术价值在于为策略研究、风险监控和交易系统提供稳定、高效的数据供给,是构建自动化投资分析体系的基石。典型应用场景包括个人量化分析平台、金融信息App以及学术研究的数据支持。本文聚焦于深交所行情数据接口的工程实践,详细剖析了通过Web Scraping技术从财经网站采集实时行情,并利用FastAPI框架与Redis缓存构建高性能API服务 阅读详情

相关推荐

量化数据引擎构建指南:从API选型到工程化实践

在量化交易和金融数据分析领域,获取可靠的市场数据是策略研究的首要基础。其核心原理在于通过API接口与各类数据源建立连接,实现数据的自动化获取与处理。这一过程的技术价值在于将原始、分散的金融信息转化为结构化、可分析的数据资产,为策略开发、风险管理和投资决策提供关键输入。典型的应用场景包括策略回测、实时监控、风险建模和投资组合分析。实践中,开发者需要面对数据源选型、API集成、错误处理和本地化存储等工程挑战。本文以**第三方数据API平台**为例,详细拆解了从申请密钥、多语言SDK接入到数据清洗与校验的完整工作

weixin_30376083的博客 470

获取tushare的数据实现示例

1.引言 需要从tushare获取股票数据,保存在本地,进行分析. 本文以日线接口为例,记录使用java通过http方式处理请求和响应的方法。 日线接口 https://tushare.pro/document/2?doc_id=27 HTTP接口调用方式 https://tushare.pro/document/1?doc_id=130 为了简化多个接口的访问,实现一些基础类,包括...

wherwh的专栏 3384

Tushare多语言访问方式介绍

Tushare是一个免费、开源的金融数据接口包,主要用于股票、基金、债券、期货等金融数据的采集、清洗、加工和存储。虽然Tushare主要以Python语言实现,但用户可以通过多种语言来访问Tushare的数据服务。本文将介绍如何使用Python、JavaScript、R等多种语言来访问Tushare数据。Tushare作为一个强大的金融数据接口包,不仅支持Python,还可以通过HTTP请求在多种编程语言中使用。

Gyz1681的博客 952

免费获得筹码分布接口交易数据,Tushare的使用方法

免费获得筹码分布接口交易数据,Tushare的使用方法

sunshine_sean的专栏 3324

利用golang并发下载股票数据(一)

先贴上代码

6015

Python股票自动交易系统毕业设计:从数据到策略的完整实现

量化交易是金融科技领域的核心技术,它通过数学模型和计算机程序实现自动化投资决策。其核心原理在于将投资逻辑转化为可执行的算法,利用历史数据回测验证策略的有效性,最终实现风险可控下的收益优化。这一技术为金融市场带来了更高的效率和更科学的决策方式,广泛应用于对冲基金、资产管理等场景。在工程实践中,Python因其丰富的数据分析生态成为量化开发的首选语言。本文聚焦于基于Python的股票自动交易系统构建,详细解析了如何使用Tushare进行数据获取、通过TA-Lib计算技术指标,并实现了一个完整的双均线策略回测框架

weixin_30702441的博客 306

Tushare(介绍)

Tushare是一款免费、开源的python财经数据接口包。拥有丰富的数据内容,如沪深股票、指数、公募基金、期货、现货、期权、债券、外汇、港股、美股等行情数据,后续还将开发出行业经济、宏观经济、另类经济等相关功能。平台里面还拥有新手指导手册,便利了广大数据爱好者。数据爱好者们可以通过获取积分的方式获取自己想要的数据。 Tushare官方网址:http://www.tushare.pro Tushare积分获取途径: 注册新用户,获得100分; 成功推荐注册一个有效用户,获得50分(通过不正当手段会回收.

m0_68727842的博客 4435

Python量化系统工程骨架:采集-存储-分析-可视化-深度学习五步闭环

量化系统本质是将投资逻辑转化为可验证、可回测、可部署的代码流水线。其核心在于构建稳定可靠的数据管道,涵盖数据采集、持久化存储、因子分析、决策可视化与模型建模等关键环节。基于Python的工程化实现,强调模块解耦、配置统一、版本可控与多人协作能力,有效规避脚本式开发带来的数据不可溯、策略难迭代、团队难协同等问题。尤其在因子计算与深度学习建模中,需严格防范未来信息泄露、输入标准化失当等典型陷阱。本文聚焦一套经多市场(A股、港股、期货、加密货币)实证的最小可行量化工程骨架,覆盖从原始数据接入到LSTM/Trans

weixin_42528191的博客 295

Python/JS/Java三语言实战:免费获取股票数据与计算技术指标

在量化分析和金融数据应用开发中,稳定、高效地获取和处理股票数据是核心基础。其原理通常涉及通过网络API或爬虫技术,从财经门户、开源数据包或交易所官方渠道采集行情、K线及基本面信息。这项技术的价值在于,它为个人研究者和开发者提供了低成本启动量化策略回测、构建数据驱动型应用的能力,打破了传统金融数据服务的高昂壁垒。在实际应用场景中,开发者常需根据项目需求,选择Python进行快速数据分析,使用JavaScript构建实时数据服务,或采用Java开发高并发后端系统。本文聚焦于通过Python的akshare库、N

weixin_30263073的博客 640

finance-go:在go中实现的金融市场数据库

财务去 概要 此go软件包旨在为go应用提供简化且格式正确的结构,以访问当前和历史金融市场数据。 查看,该将作为此软件包的生动示例。 只需几次击键,它就会在您最喜欢的命令行中显示报价/选项信息! 产品特点 描述 资源 报价单 雅虎财经 股权报价 雅虎财经 指数报价 雅虎财经 期权报价 雅虎财经 外汇对报价 雅虎财经 加密货币对报价 雅虎财经 期货报价 雅虎财经 ETF报价 雅虎财经 共同基金报价 雅虎财经 历史报价 雅虎财经 期权跨越 雅虎财经 文献资料 上提供了格式整齐的详细实施指令和示例清单。 目前,有关此库中所有功能的详细信息,请参阅文档。 安装 该项目支持模块和Go 1.13+。

go-tushare

去TuShare 官方网站: : 本项目作为一个普通爱好者做的GO版本SDK,目前实现了沪深股票,指数1000积分(含)的所有接口调用,并增加了布尔线数据的获取,随后会逐步增加其他接口和更多技术指标数据 已经支持了的接口 type TuShare func NewTuShare ( token string ) ( ts * TuShare ) func ( ts * TuShare ) AdjFactor ( params QuotationRequest , items AdjFactorItems ) ( tsRsp * TushareResponse , err error ) func ( ts * TuShare ) BakDaily ( params BakDailyRequest , items BakDailyItems ) ( tsRsp *

如何用AI多智能体打造你的专属股票分析平台:TradingAgents-CN完整指南

还在为复杂的金融量化系统而头疼吗?想用AI技术进行股票分析却不知从何入手?TradingAgents-CN作为一款基于多智能体LLM的中文金融交易框架,让你轻松拥有专业的AI投资分析能力。无论你是投资新手、量化交易爱好者,还是企业级用户,这个13000+星标认证的开源项目都能满足你的需求。本文将为你提供完整的部署指南,帮助你快速搭建自己的智能交易分析平台。 ## AI股票分析新纪元:从传统量化到

gitblog_00893的博客 534

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

AI Agent操作系统:从单兵作战到智能体协同的架构演进

在人工智能领域,智能体(Agent)正从单一任务执行者向协同工作系统演进。其核心原理在于通过任务编排与资源调度,将复杂问题分解为可并行处理的子任务,并由专业化智能体分工协作。这一架构的技术价值在于显著提升了复杂工作流的自动化程度与执行效率,解决了传统单体智能体面临的信息孤岛与上下文断裂问题。在应用场景上,它尤其适用于市场调研、数据分析、内容生成等需要多步骤、多模态处理的任务流程。本文以Gliding Horse项目为例,深入探讨了AI Agent操作系统的三层架构模型,并详细解析了其任务编排器与共享记忆体等

weixin_34315485的博客 421

STM32F103+W5500网络通信

STM32F103+W5500网络通信一、W5500模块(一)W5500以太网模块介绍(二)模块排针功能表二、 modbus协议(一)modbus协议原理(二)Modbus 通讯方式1.Modbus三种通讯方式2.在Modbus网络上传输3.以太网(modbus tcp/ip)三、参考资料 一、W5500模块 (一)W5500以太网模块介绍 D-W5500 EVB以太网模块是一款基于WIZnet W5500芯片的以太网模块,且性价比高的以太网模块。W5500是一款全硬件TCP/IP嵌入式以太网控制器,为

”一只特立独行的猪“的博客 1万+

`全网最细!! 入门必看Git教程链接:https://gitee.com/all-about-git`

全网 Git 入门教程 gitee.com。如果显示The requested URL returned error: 403错误,那就表示没有和window本地建立token令牌

qq_37855368的博客 3748

tushare的使用

503520 Tushare 提供免费的数据接口,包含沪深股票数据、财务报表数据、指数、基金、期权、期货、港股、美股、宏观经济等数据,甚至新闻快讯、上市公司公告、全球新冠疫情数据也包含在内。Tushare 提供http, Python, MATLAB, R 的数据接口,方便获取实时数据。 Tushare 社区已经开发开放了主流编程语言的SDK,开箱即用,非常方便。使用者可以基于http获取数据,亦可使用Python、MATLAB的SDK获取数据,还可以在R中获取数据。获取数据的方式在官网都有详细介绍。

weixin_66987656的博客 506

RYU+Mininet的SDN架构-设计校园网络(一)

现有一个中学,需要设计一个中小型网络满足学校的网络需求。学校有教学区,实验室区域和服务器区域。教学区为了满足接入的灵活性和信号强度要求,需要满足设计WIFI满足日常教室和同学需求,接入上限为200人。实验室区域需要有一台教师主机方便管理实验室其余电脑,并且教师主机可以访问学校服务器,方便为同学们实验室授课。学校服务器区域设有学校相关重要文件和学校网页相关内容。最后学校还会接入互联网。

weixin_53284122的博客 8034

tushare获取基本面相关数据&&可视化

宁德时代基本面数据的可视化

treacherousfly的博客 2039

知识图谱初步学习(一)——本体+Protege新手学习

文章目录前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法一、protege简介二、软件使用步骤1.安装2.使用三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中,首先就是要了解什么是本体(ontology)。 1.本体概念 本体的概念最初源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体是可以在语义的层次上来对知识进行描述,可以看做是某一个领域知识的通用模型。 本体是从客观世界中抽象出来

qq_43654669的博客 3万+

手把手教你用Docker快速部署ZLMediaKit流媒体服务器(含WebRTC配置)

本文详细介绍了如何使用Docker快速部署ZLMediaKit流媒体服务器,并配置WebRTC功能。通过容器化部署,实现环境一致性、资源隔离和快速扩展,同时提供WebRTC专项配置、多协议推拉流实战测试及生产环境优化建议,帮助开发者高效搭建企业级流媒体平台。

agile9scrum的博客 202

Tushare使用分享(二)

tushare使用分享(二)

m0_58584303的博客 5348

OBC_开环扫频波特图拟合操作流程(结合 Simulink)

摘要: 本文详细介绍了基于Simulink的开环扫频波特图测试与拟合流程,适用于电源/控制系统(如LLC/PFC)的小信号分析。主要内容包括:1)前期准备(测试点选择、信号范围设定);2)Simulink建模方法(信号注入、数据记录);3)两种扫频方式(逐频正弦/Chirp扫频)的实现;4)MATLAB数据处理(FFT分析、传递函数拟合);5)线性分析工具使用技巧。重点强调了激励信号幅值控制、稳态数据采集及模型验证方法,并提供完整MATLAB脚本示例。该流程可有效获取系统频域特性,为控制器设计提供可靠依据。

Sumerking的博客 234

彻底解决!go-stock项目Tushare API Token输入框粘贴失效的技术攻关

在go-stock项目的设置页面中,用户反馈Tushare API Token输入框(Tushare Token)无法通过Ctrl+V或右键菜单粘贴内容。这一问题严重影响用户体验,尤其对于需要频繁更换API令牌的场景,手动输入32位随机字符串不仅效率低下,还容易出错。通过对生产环境用户反馈的汇总分析,该问题导致约15%的新用户在首次配置时放弃使用核心功能。 ## 技术栈与组件背景 该项目前端基...

gitblog_01429的博客 1041

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Tushare最好用的金融数据接口之一

Tushare最好用的金融数据接口之一 作者 l_byll 1. tushare面向人群 当你使用某个接口的时候,你首先要了解的就是它所面向的人群,tushare接口主要面向于从事金融相关的高校,企业和个人,只要对金融感兴趣,或者你所从事的业务与金融相关,你都可以使用tushare接口对你的业务提供可靠的业务支撑。 2. tushare初体验 首先你要使用这个接口,那么你肯定要先找到他的开发文档,了解这个接口都提供什么样的数据服务。 tushare现在分为两个版本,首先是比较老一点的tushare版本,这

l_byll的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 算法概论第八章课后题--8.3
下一篇: boost pyconfig.h 修复方法
Coder_zyq
博客等级 码龄10年 3粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值