Files
qsdk/tushare/stock.go
2026-05-01 17:07:20 +08:00

247 lines
5.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package tushare
import (
"time"
"git.apinb.com/quant/qsdk/conv"
)
/*
TradeCal 获取交易日历
exchange: 交易所代码SSE 上交所SZSE 深交所BSE 北交所,空字符串代表所有
start_date: 开始日期,格式:YYYYMMDD
end_date: 结束日期,格式:YYYYMMDD
is_open: 是否开盘,'0'休市,'1'交易,空字符串代表所有
*/
func (cli *TushareClient) TradeCal(exchange, start_date, end_date, is_open string) (*TushareRespData, error) {
params := map[string]any{}
if exchange != "" {
params["exchange"] = exchange
}
if start_date != "" {
params["start_date"] = start_date
}
if end_date != "" {
params["end_date"] = end_date
}
if is_open != "" {
params["is_open"] = is_open
}
req := TushareReq{
APIName: "trade_cal",
Params: params,
}
fields := []map[string]string{
{"exchange": "交易所代码"},
{"cal_date": "日历日期"},
{"is_open": "是否开盘"},
{"pretrade_date": "上一交易日"},
}
return cli.Do(req, fields)
}
func (cli *TushareClient) ReturnLastTradeDay() string {
result, err := cli.TradeCal("SSE", time.Now().AddDate(0, 0, -15).Format("20060102"), time.Now().Format("20060102"), "1")
if err != nil {
return ""
}
cal := result.Map()
if len(cal) == 0 {
return ""
}
return conv.AnyToString(cal[0]["cal_date"])
}
/*
StockBasic 获取股票列表
ts_code: 股票代码,支持多个,如"000002.SZ,000001.SZ"
exchange: 交易所代码SSE 上交所SZSE 深交所
is_shsc: 是否在沪股通或深港通范围内0:否;1:沪股通;2:深股通
start_date: 开始日期,格式:YYYYMMDD
end_date: 结束日期,格式:YYYYMMDD
*/
func (cli *TushareClient) StockBasic(ts_code, exchange, is_shsc, start_date, end_date string) (*TushareRespData, error) {
params := map[string]any{}
if ts_code != "" {
params["ts_code"] = ts_code
}
if exchange != "" {
params["exchange"] = exchange
}
if is_shsc != "" {
params["is_shsc"] = is_shsc
}
if start_date != "" {
params["start_date"] = start_date
}
if end_date != "" {
params["end_date"] = end_date
}
req := TushareReq{
APIName: "stock_basic",
Params: params,
}
fields := []map[string]string{
{"ts_code": "TS 代码"},
{"symbol": "股票交易代码"},
{"name": "证券简称"},
{"area": "地区"},
{"industry": "所属行业"},
{"market": "市场类别"},
{"list_status": "上市状态"},
{"list_date": "上市日期"},
{"delist_date": "退市日期"},
{"is_shsc": "是否沪股通或深股通"},
}
return cli.Do(req, fields)
}
/*
Daily 获取日线行情
ts_code: 股票代码格式000001.SZ 或 600000.SH
trade_date: 交易日期,格式:YYYYMMDD
start_date: 开始日期,格式:YYYYMMDD
end_date: 结束日期,格式:YYYYMMDD
*/
func (cli *TushareClient) Daily(ts_code, trade_date, start_date, end_date string) (*TushareRespData, error) {
params := map[string]any{}
if ts_code != "" {
params["ts_code"] = ts_code
}
if trade_date != "" {
params["trade_date"] = trade_date
}
if start_date != "" {
params["start_date"] = start_date
}
if end_date != "" {
params["end_date"] = end_date
}
req := TushareReq{
APIName: "daily",
Params: params,
}
fields := []map[string]string{
{"ts_code": "股票代码"},
{"trade_date": "交易日期"},
{"open": "开盘价"},
{"high": "最高价"},
{"low": "最低价"},
{"close": "收盘价"},
{"pre_close": "昨收价"},
{"change": "涨跌额"},
{"pct_chg": "涨跌幅%"},
{"vol": "成交量 (手)"},
{"amount": "成交额 (千元)"},
}
return cli.Do(req, fields)
}
/*
Min 获取分钟线行情
ts_code: 股票代码格式000001.SZ 或 600000.SH
trade_date: 交易日期,格式:YYYYMMDD
minute: 分钟类型1/5/15/30/60 分钟
start_time: 开始时间,格式:HHmmss
end_time: 结束时间,格式:HHmmss
*/
func (cli *TushareClient) Min(ts_code, trade_date, minute, start_time, end_time string) (*TushareRespData, error) {
params := map[string]any{}
if ts_code != "" {
params["ts_code"] = ts_code
}
if trade_date != "" {
params["trade_date"] = trade_date
}
if minute != "" {
params["minute"] = minute
}
if start_time != "" {
params["start_time"] = start_time
}
if end_time != "" {
params["end_time"] = end_time
}
req := TushareReq{
APIName: "min",
Params: params,
}
fields := []map[string]string{
{"ts_code": "股票代码"},
{"trade_time": "交易时间"},
{"open": "开盘价"},
{"high": "最高价"},
{"low": "最低价"},
{"close": "收盘价"},
{"vol": "成交量 (手)"},
{"amount": "成交额 (千元)"},
}
return cli.Do(req, fields)
}
/*
IndexDaily 获取大盘指数日线行情
ts_code: 指数代码,如 000001.SH(上证指数),399001.SZ(深证成指)
trade_date: 交易日期,格式:YYYYMMDD
start_date: 开始日期,格式:YYYYMMDD
end_date: 结束日期,格式:YYYYMMDD
*/
func (cli *TushareClient) IndexDaily(ts_code, trade_date, start_date, end_date string) (*TushareRespData, error) {
params := map[string]any{}
if ts_code != "" {
params["ts_code"] = ts_code
}
if trade_date != "" {
params["trade_date"] = trade_date
}
if start_date != "" {
params["start_date"] = start_date
}
if end_date != "" {
params["end_date"] = end_date
}
req := TushareReq{
APIName: "index_daily",
Params: params,
}
fields := []map[string]string{
{"ts_code": "指数代码"},
{"trade_date": "交易日期"},
{"close": "收盘点位"},
{"open": "开盘点位"},
{"high": "最高点位"},
{"low": "最低点位"},
{"pre_close": "昨收点位"},
{"change": "涨跌额"},
{"pct_chg": "涨跌幅%"},
{"vol": "成交量 (手)"},
{"amount": "成交额 (千元)"},
}
return cli.Do(req, fields)
}