用途:读取股票A股,期货,股指期货历史数据
版本3:
说明:类封装Sina
其他:
本人是小白,没有钱购买数据,推荐几个免费的数据读取。
掘金的期货数据相对来说比较多,支持最近3个月的tick数据,1996年至今的分钟数据,全部日频数据。
做分析可以,但读取速度不快,做界面的实时读取太慢,另一优点支持回测无限制,仅需注册一个账号。
另外比较不方便的是读取数据时终端必须打开。
天勤量化api编写较好,数据读写快,支持免费的实盘交易。另外做界面实时数据读取比较方便。
缺点是要想读取数据受限(8000根k线不是你想象中,当然收费的没这个限制),多数要收费;回测受限;
另外一个优点是直接调用api,比较方便,交易的建议使用
新浪财经的仅仅适合入门级的学习,数据读取受限
def get_calendar(cls):
用途:获取新浪日期
def get_contract_inf_sina(cls, symbol='AP2101'):
用途:查询期货合约详情
def get_main_name(cls):
用途:获取国内期货连续合约的名称sina
def get_main_day(cls, symbol='V0', startdate='20220901', enddate=''):
用途:新浪财经期货-主力连续日数据,不含今天数据-不稳定常报错
def get_realtimeprice(cls, symbol='V2209,V2211', market=''):
用途:获取新浪-国内期货实时行情数据
def get_kline_day(cls, symbol="V2105"):
用途:内盘-历史行情数据-新浪 新浪财经-期货-日频数据
def get_kline(cls, symbol='m2201', freq='d', market='期货', **kws):
用途:获取sina股票期货指定周期的人历史1023个数据
def test_sina(sina):
版本3:类封装
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Project:TcyQuantTrade
# @Module:futures_sina
# @Author: tcy
# @Date: 2022/9/28 17:52
# @Version: 2.0
# @Last Modified time:
# @City: China Shanghai Songjiang Xiaokunshan
# @Company: Weishi Machinery Manufacturing Priority
from datetime import datetime,date
import re
import akshare as ak
import pandas as pd
from urllib import request
import json
class Sina(object):
def __init__(self): pass
@classmethod
def get_calendar(cls):
# type:()->pd.DataFrame
"""
用途:获取新浪日期
返回:
trade_date
0 1990-12-19
1 1990-12-20
...
7826 2022-12-29
7827 2022-12-30
"""
return ak.tool_trade_date_hist_sina()
# 获取期货合约信息
@classmethod
def get_contract_inf_sina(cls, symbol='AP2101'):
# type:(str)->pd.DataFrame
"""
用途:查询期货合约详情
参数:
symbol: str 合约
return: 期货合约详情 pd.DataFrame columns=['item','value']
网站:https://finance.sina.com.cn/futures/quotes/V2101.shtml
-----------------------------------------------------------------------------------------
实例:ak.futures_contract_detail()
输出:
item value
0 交易品种 鲜苹果
1 最小变动价位 1元/吨
2 交易时间 上午 09:00-10:15 10:30-11:30 下午 13:30-15:00
3 交割品级 符合《中华人民共和国国家标准 鲜苹果》
(GB/T 10651-2008)(以下简称《苹果国标...
4 交割方式 实物交割
5 交易单位 10吨/手
6 涨跌停板幅度 上一交易日结算价的±5%
7 最后交易日 合约交割月份的第10个交易日
8 最低交易保证金 合约价值的7%
9 交易代码 AP
10 报价单位 元(人民币)/吨
11 合约交割月份 1、3、5、7、10、11、12月
12 最后交割日 仓单交割:合约交割月份的第12个交易日 车(船)板交割:合约
13 交易手续费 5.00 元/手,平今仓5.00元/手
14 上市交易所 郑州商品交易所
"""
return ak.futures_contract_detail(symbol)
# sina期货连续合约名称
@classmethod
def get_main_name(cls):
# type:()->pd.DataFrame
"""
用途:获取国内期货连续合约的名称sina
返回:pd.DataFrame cols=[symbol,exchange,name]
实例:
df = ak.futures_display_main_sina()
df.columns #Index(['symbol', 'exchange', 'name'], dtype='object')
df
symbol exchange name code
0 V0 dce PVC连续 V
1 P0 dce 棕榈油连续
.. ... ... ...
63 IC0 cffex 中证500指数期货连续
64 TS0 cffex 2年期国债期货连续
"""
return ak.futures_display_main_sina()
@classmethod
def get_main_day(cls, symbol='V0', startdate='20220901', enddate=''):
# type:(str,str,str)->pd.DataFrame
"""
用途:新浪财经期货-主力连续日数据,不含今天数据-不稳定常报错
参数:
symbol: str 通过 ak.futures_display_main_sina() 函数获取 symbol
start_date: str 开始时间
end_date: str 结束时间
返回: DataFrame主力连续日数据;日期为str,其他为int cols=[
[日期, 开盘价, 最高价, 最低价, 收盘价, 成交量, 持仓量, 动态结算价]
说明:日期为str,其他为int
原函数:
ak.futures_main_sina(symbol: str = 'V0', start_date: str = '19900101',
end_date: str = '22220101') -> 'DataFrame'
实例:
ak.futures_main_sina(
symbol= 'V0',
start_date = '19900101',
end_date = '22220101')
日期 开盘价 最高价 最低价 收盘价 成交量 持仓量 动态结算价
0 2009-05-25 6575 6630 6435 6490 107764 12278 0
1 2009-05-26 6485 6540 6445 6460 38290 10562 0
... ... ... ... ... ... ... ...
3237 2022-09-23 6230 6269 6088 6100 1144145 712168 6170
3238 2022-09-26 6060 6122 6010 6104 1016829 691095 6075
"""
enddate = enddate if enddate else date.today().strftime('%Y%m%d')
return ak.futures_main_sina(symbol, startdate, enddate)
# sina期货合约实时数据
@classmethod
def get_realtimeprice(cls, symbol='V2209,V2211', market=''):
# type:(str,str)->pd.DataFrame
"""
用途:获取新浪-国内期货实时行情数据
参数:
symbol:str 合约名称的组合'V2205, P2205, B2201, M2205',
market:str "CF"商品期货, "FF": 金融期货
adjust str adjust='0'; adjust='1':
返回合约、交易所和最小变动单位的实时数据, 返回数据会变慢
返回:期货的实时行情数据 pd.DataFrame cols=[
'symbol', 'time', 'open', 'high', 'low', 'current_price', 'bid_price',
'ask_price', 'buy_vol', 'sell_vol', 'hold', 'volume', 'avg_price',
'last_close', 'last_settle_price']
原函数:
futures_zh_spot(symbol: str = 'V2205, P2205, B2201, M2205',
market: str = 'CF', adjust: str = '0') -> 'DataFrame'
实例:
a=ak.futures_zh_spot('V2209,V2211','CF')
a
symbol time open high low current_price bid_price \
0 PVC2209 151003 6503.0 6550.0 6400.0 6400.0 6400.0
1 PVC2211 151014 6261.0 6283.0 6086.0 6205.0 6202.0
ask_price buy_vol sell_vol hold volume avg_price last_close \
0 6700.0 7 20 0.0 1057 6756.0 6400.0
1 6205.0 2 1 79253.0 64222 6176.0 6205.0
last_settle_price
0 6600.0
1 6227.0
a.dtypes
symbol object
time object
open float64
high float64
low float64
current_price float64
bid_price float64
ask_price float64
buy_vol int64
sell_vol int64
hold float64
volume int64
avg_price float64
last_close float64
last_settle_price float64
dtype: object
"""
market = market if market else 'CF'
return ak.futures_zh_spot(symbol, market)
# sina期货指定合约的历史数据-日频
@classmethod
def get_kline_day(cls, symbol="V2105"):
# type:(str)->pd.DataFrame
"""
用途:内盘-历史行情数据-新浪 新浪财经-期货-日频数据
限量:单次返回指定 symbol 的所有日频数据
参数:
symbol: str symbol="V2105";具体合约可以通过
ak.match_main_contract(symbol="shfe") 获取或者访问网页
接口: futures_zh_daily_sina
目标地址: https://finance.sina.com.cn/futures/quotes/V2105.shtml
输出:DataFrame cols=
['date', 'open', 'high', 'low', 'close', 'volume', 'hold', 'settle']
名称 类型 描述
date object -
open float64 开盘价
high float64 最高价
low float64 最低价
close float64 收盘价
volume int64 成交量
hold int64 持仓量
settle float64 结算价
------------------------------------------------------------------------------------------
示例:
import akshare as ak
df = ak.futures_zh_daily_sina(symbol="V2105")
date open high ... volume hold settle
0 2021-01-08 29500.000 30680.000 ... 91045 14988 28290.000
1 2021-01-11 26225.000 26720.000 ... 23026 17600 26260.000
.. ... ... ... ... ... ... ...
144 2021-08-12 17000.000 17195.000 ... 11215 21211 17055.000
145 2021-08-13 17000.000 17080.000 ... 10536 20793 16865.000
"""
return ak.futures_zh_daily_sina(symbol)
# sina 国内期货合约分时数据-速度快
@classmethod
def get_kline_min(cls, symbol="TF2009", period="1"):
# type:(str,str)->pd.DataFrame
"""
用途:内盘-分时行情数据(新浪财经-期货-分时数据)
接口:futures_zh_minute_sina
目标地址:http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
限量:单次返回指定 symbol 和 period 的分时数据
参数:
symbol:str 具体合约(期货品种符号需要大写)如"IF2008"
通过ak.match_main_contract(symbol="cffex") 获取,或访问网页
period str period="1"; choice of {
"1": "1分钟", "5": "5分钟", "15": "15分钟", "30": "30分钟", "60": "60分钟"}
输出:DataFrame cols=
['datetime', 'open', 'high', 'low', 'close', 'volume', 'hold']
名称 类型 描述
datetime object -
open float64 -
high float64 -
low float64 -
close float64 -
volume int64 -
hold int64 持仓量
示例:
import akshare as ak
df = ak.futures_zh_minute_sina(symbol="TF2009", period="1")
df
结果:
datetime open high low close volume hold
0 2020-07-15 14:47:00 100.610 100.625 100.610 100.610 63 45082
1 2020-07-15 14:48:00 100.610 100.615 100.595 100.605 45 45068
... ... ... ... ... ... ...
1021 2020-07-21 14:18:00 101.095 101.095 101.080 101.080 30 43938
1022 2020-07-21 14:19:00 101.080 101.095 101.080 101.085 43 43941
"""
return ak.futures_zh_minute_sina(symbol, period)
# sina A股国内期货合约分时数据-速度快
@classmethod
def get_kline(cls, symbol='m2201', freq='d', market='期货', **kws):
# type:(str,str,str,Any)->pd.DataFrame
"""
用途:获取sina股票期货指定周期的人历史1023个数据
返回:DataFrame columns name [date,open,high,low,close,volume]
参数:
symbol: str 品种代码,
freq: str 周期(5m,15m,30m,60m日线),d数据长度最大1023
mode=['股票','期货','股指期货']
kws:仅用于A股
原函数:
stock_zh_a_daily(symbol: str = 'sh603843', start_date: str = '19900101',
end_date: str = '21000118', adjust: str = '') ->‘DataFrame’
参数:
start_date: str = '19900101',
end_date: str = '21000118',
adjust: str = '' 默认为空: 返回不复权的数据;
qfq: 返回前复权后的数据; hfq: 返回后复权后的数据;
hfq-factor: 返回后复权因子; hfq-factor: 返回前复
实例:
get_sina_kline(symbol='sh000001', freq='60m', market='股票')
get_sina_kline(symbol='sh000001', freq='d', market='股票')
get_sina_kline(symbol='rb1910', freq='60m', market='期货')
get_sina_kline(symbol='rb1910', freq='d', market='期货')
get_sina_kline(symbol='IF1908', freq='60m', market='股指期货')
get_sina_kline(symbol='IF1908', freq='d', market='股指期货')
说明:
股票历史数据API:
5分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=5&datalen=1023
15分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=15&datalen=1023
30分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=30&datalen=1023
60分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=60&datalen=1023
商品期货历史数据API:
5分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine5m?symbol=rb1910
15分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine15m?symbol=rb1910
30分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine30m?symbol=rb1910
60分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine60m?symbol=rb1910
日K线:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=rb1910
股指期货历史数据API:
5分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine5m?symbol=IF1908
15分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine15m?symbol=IF1908
30分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine30m?symbol=IF1908
60分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine60m?symbol=IF1908
日线:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesDailyKLine?symbol=IF1908
"""
cols = ['date', 'open', 'high', 'low', 'close', 'volume']
if market == '股票':
if freq in ['5m', '15m', '30m', '60m']:
url = 'https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=%s&scale=%s&datalen=1023' % (
symbol, freq[:-1])
else:
def data(
key, default): return kws[key] if key in kws else default
start_date = data('start_date', '19900101')
end_date = data('end_date', '20000101')
adjust = data('adjust', '')
df = ak.stock_zh_a_daily(symbol, start_date, end_date, adjust)
return df[cols]
elif market == '期货':
if freq in ['5m', '15m', '30m', '60m']:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine%s?symbol=%s' % (
freq, symbol)
else:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=%s' % (
symbol)
else:
if freq in ['5m', '15m', '30m', '60m']:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine%s?symbol=%s' % (
freq, symbol)
else:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesDailyKLine?symbol=%s' % (
symbol)
req = request.Request(url)
rsp = request.urlopen(req)
res = rsp.read()
res_json = json.loads(res)
df = pd.DataFrame(res_json)
if market == '股票':
df.rename(columns={'day': 'date'}, inplace=True)
df = df[cols]
else:
df.rename(columns=dict(zip(df.columns, cols)), inplace=True)
return df
def test_sina(sina):
print()
print('test sina futures func start...')
names = sina.get_main_name() # sina期货连续合约名称
print('1.1.期货连续合约名=\n', names)
try:
df = sina.get_main_day() # sina期货连续合约历史数据-不稳定常报错
print('1.2.期货连续合约历史数据=\n', df)
except Exception as e:
print('err=\n', e)
df = sina.get_realtimeprice()
print('2.1.期货合约实时数据=\n', df)
df = sina.get_kline_day()
print('2.2.期货连续合约历史数据-日频=\n', df)
df = sina.get_kline_min() # sina A股国内期货合约分时数据-速度快
print('2.3.A股期货合约分时数据=\n', df)
df = sina.get_kline()
print('2.4.期货合约分时数据=\n', df)
"""
test sina futures func start...
1.1.期货连续合约名=
symbol exchange name
0 V0 dce PVC连续
1 P0 dce 棕榈油连续
2 B0 dce 豆二连续
3 M0 dce 豆粕连续
4 I0 dce 铁矿石连续
.. ... ... ...
61 TF0 cffex 5年期国债期货连续
62 IH0 cffex 上证50指数期货连续
63 IC0 cffex 中证500指数期货连续
64 TS0 cffex 2年期国债期货连续
65 IM0 cffex 中证连续指数期货连续
[66 rows x 3 columns]
1.2.期货连续合约历史数据=
日期 开盘价 最高价 最低价 收盘价 成交量 持仓量 动态结算价
0 2022-09-01 6220 6350 6210 6302 804836 456624 6284
1 2022-09-02 6281 6376 6160 6213 1047886 484266 6266
2 2022-09-05 6267 6420 6243 6404 1146915 464630 6357
3 2022-09-06 6404 6437 6347 6405 787150 479054 6388
4 2022-09-07 6376 6466 6305 6362 949583 467781 6373
5 2022-09-08 6380 6475 6342 6438 963735 469471 6398
6 2022-09-09 6440 6583 6412 6559 1009380 486271 6489
7 2022-09-13 6660 6674 6526 6541 611532 503629 6574
8 2022-09-14 6517 6527 6319 6343 1154538 559391 6404
9 2022-09-15 6350 6423 6281 6292 1034485 586004 6349
10 2022-09-16 6270 6307 6230 6278 849857 598962 6269
11 2022-09-19 6270 6320 6150 6156 1010248 676832 6237
12 2022-09-20 6150 6226 6122 6133 938762 698700 6164
13 2022-09-21 6130 6146 6035 6087 1098892 764709 6088
14 2022-09-22 6082 6244 6042 6230 1199842 697233 6139
15 2022-09-23 6230 6269 6088 6100 1144145 712168 6170
16 2022-09-26 6060 6122 6010 6104 1016829 691095 6075
17 2022-09-27 6099 6130 5951 6065 1212123 749351 6041
2.1.期货合约实时数据=
symbol time open ... avg_price last_close last_settle_price
0 PVC2209 151003 6503.0 ... 6756.0 6400.0 6600.0
1 PVC2211 151013 6201.0 ... 6225.0 6230.0 6176.0
[2 rows x 15 columns]
2.2.期货连续合约历史数据-日频=
date open high low close volume hold settle
0 2020-05-20 5730.0 5920.0 5730.0 5880.0 176 134 0.0
1 2020-05-21 5905.0 5980.0 5875.0 5955.0 287 284 0.0
2 2020-05-22 5940.0 6025.0 5930.0 5980.0 801 888 0.0
3 2020-05-25 6000.0 6075.0 5970.0 6020.0 391 1028 0.0
4 2020-05-26 6030.0 6050.0 5990.0 6025.0 267 1141 0.0
.. ... ... ... ... ... ... ... ...
238 2021-05-13 9460.0 9640.0 9330.0 9330.0 1016 8384 9430.0
239 2021-05-14 9430.0 9500.0 9300.0 9300.0 369 8061 9405.0
240 2021-05-17 9320.0 9320.0 9320.0 9320.0 200 8061 9320.0
241 2021-05-18 9500.0 9500.0 9500.0 9500.0 26 8035 9500.0
242 2021-05-19 9995.0 9995.0 9995.0 9995.0 245 0 9375.0
[243 rows x 8 columns]
2.3.A股期货合约分时数据=
datetime open high low close volume hold
0 2020-08-20 13:23:00 100.435 100.445 100.435 100.445 9 11527
1 2020-08-20 13:24:00 100.445 100.445 100.435 100.435 11 11525
2 2020-08-20 13:25:00 100.435 100.445 100.435 100.440 18 11531
3 2020-08-20 13:26:00 100.445 100.445 100.445 100.445 14 11530
4 2020-08-20 13:27:00 100.445 100.450 100.445 100.445 23 11516
... ... ... ... ... ... ... ...
1018 2020-09-10 14:36:00 100.120 100.120 100.105 100.105 10 101
1019 2020-09-10 14:38:00 100.105 100.105 100.105 100.105 4 104
1020 2020-09-10 14:42:00 100.105 100.105 100.105 100.105 5 104
1021 2020-09-10 14:47:00 100.105 100.105 100.095 100.095 5 105
1022 2020-09-10 15:13:00 100.095 100.095 100.070 100.075 10 115
[1023 rows x 7 columns]
2.4.期货合约分时数据=
date open high low close volume
0 2021-01-18 3579.000 3580.000 3466.000 3503.000 34588
1 2021-01-19 3495.000 3535.000 3480.000 3490.000 13491
2 2021-01-20 3497.000 3499.000 3354.000 3380.000 32521
3 2021-01-21 3380.000 3408.000 3361.000 3396.000 10622
4 2021-01-22 3416.000 3416.000 3311.000 3326.000 16590
.. ... ... ... ... ... ...
239 2022-01-10 3483.000 3483.000 3483.000 3483.000 51
240 2022-01-11 3492.000 3500.000 3288.000 3472.000 2074
241 2022-01-12 3473.000 3473.000 3446.000 3446.000 367
242 2022-01-13 3473.000 3473.000 3446.000 3483.000 0
243 2022-01-14 3473.000 3473.000 3446.000 3483.000 367
[244 rows x 6 columns]
"""
if __name__ == '__main__':
sina = Sina()
test_sina(sina)
版本2:
import numpy as np
import pandas as pd
import akshare as ak
import datetime
from urllib import request
import json
def get_sina_kline(symbol='m2201', period='d', market='期货',**kwargs) -> 'DataFrame':
'''
用途:获取sina股票期货指定周期的人历史1023个数据
返回:DataFrame columns name [date,open,high,low,close,volume]
参数:
symbol品种代码,
period是周期(5m,15m,30m,60m日线),datalen是获取数据的长度,最大就是1023
mode=['股票','期货','股指期货']
kwargs:仅用于A股
stock_zh_a_daily(symbol: str = 'sh603843', start_date: str = '19900101', end_date: str = '21000118', adjust: str = '') ->‘DataFrame’
start_date: str = '19900101',
end_date: str = '21000118',
adjust: str = '' 默认为空: 返回不复权的数据;
qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; hfq-factor: 返回前复
实例:
get_sina_kline(symbol='sh000001', period='60m', market='股票')
get_sina_kline(symbol='sh000001', period='d', market='股票')
get_sina_kline(symbol='rb1910', period='60m', market='期货')
get_sina_kline(symbol='rb1910', period='d', market='期货')
get_sina_kline(symbol='IF1908', period='60m', market='股指期货')
get_sina_kline(symbol='IF1908', period='d', market='股指期货')
说明:
股票历史数据API:
5分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=5&datalen=1023
15分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=15&datalen=1023
30分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=30&datalen=1023
60分钟:https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000001&scale=60&datalen=1023
商品期货历史数据API:
5分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine5m?symbol=rb1910
15分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine15m?symbol=rb1910
30分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine30m?symbol=rb1910
60分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine60m?symbol=rb1910
日K线:http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=rb1910
股指期货历史数据API:
5分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine5m?symbol=IF1908
15分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine15m?symbol=IF1908
30分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine30m?symbol=IF1908
60分钟:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine60m?symbol=IF1908
日线:http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesDailyKLine?symbol=IF1908
'''
cols = ['date', 'open', 'high', 'low', 'close', 'volume']
if market == '股票':
if period in ['5m', '15m', '30m', '60m']:
url = 'https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=%s&scale=%s&datalen=1023' % (
symbol, period[:-1])
else:
data=lambda key,default:kwargs[key] if key in kwargs else default
start_date=data('start_date', '19900101')
end_date = data('end_date', '20000101')
adjust = data('adjust', '')
df= ak.stock_zh_a_daily(symbol, start_date, end_date, adjust)
return df[cols]
elif market=='期货':
if period in ['5m', '15m', '30m', '60m']:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine%s?symbol=%s' % (
period, symbol)
else:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=%s' % (
symbol)
else:
if period in ['5m', '15m', '30m', '60m']:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesMiniKLine%s?symbol=%s' % (
period, symbol)
else:
url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/CffexFuturesService.getCffexFuturesDailyKLine?symbol=%s' % (
symbol)
req = request.Request(url)
rsp = request.urlopen(req)
res = rsp.read()
res_json = json.loads(res)
df= pd.DataFrame(res_json)
if market == '股票':
df.rename(columns={'day':'date'}, inplace=True)
df =df[cols]
else:
df.rename(columns=dict(zip(df.columns,cols)), inplace=True)
return df
# global_gdp_radio_quarterly()
print(get_sina_kline(symbol='IF1908', period='d', market='股指期货'))
#-以下为老版本:
# Name: 新浪财经期货数据python读取
# Purpose:
#
# Author: tcy shanghai yexie
#
# Created: 05/07/2018
# Copyright: (c) tcy 2018
# 参考网址: https://www.aliyun.com/jiaocheng/433081.html
# http://blog.sina.com.cn/s/blog_7ed3ed3d0101gphj.html
#coding: utf-8
import requests
import sys
import numpy as np
#读实盘数据
#功能: 实时读取新浪财经期货数据
#参数: 请输入要读取的合约名称
#返回值:以数组的形式返回
def read_real_future_data(future_code):
# future_code ='M1809'
#从新浪财经读数据
url_str = ('http://hq.sinajs.cn/list=' +future_code)
r = requests.get(url_str)
#数据处理,保存在临时数组中
b=list(r)
str1=b[0].decode(encoding='gbk') +b[1].decode(encoding='gbk')
str2=str1.split(',')
str3=str2[0].split('_')[-1]
str4=str3.split('=')
##-------------------------------------------------------------------------
## 2018/7/5 shanghai tcy python版本
##f=[0,0,0,0,0,0,0,0]
##f[0]=str4[0] #code
##f[1]=str4[1].strip('"') #name
##f[2]=str2[17] #date
##f[3]=str2[2] #open
##f[4]=str2[3] #high
##f[5]=str2[4] #low
##f[6]=str2[6] #close
##f[7]=str2[14] #vol
##--------------------------------------------------------------------------
## numpy版本运行速度快
dt=np.dtype([('code','S10'),('name','U10'),('date','datetime64[D]'),('open',np.float32),
('high',np.float32),('low',np.float32),('close',np.float32),('vol',np.float32)])
f=np.array([("","",'1970-01-01',0.0,0.0,0.0,0.0,0.0)],dtype=dt)
f[0]['code']=str4[0] #code
f[0]['name']=str2[16] #name
f[0]['date']=str2[17] #date
f[0]['open']=str2[2] #open
f[0]['high']=str2[3] #high
f[0]['low']=str2[4] #low
f[0]['close']=str2[6] #close
f[0]['vol']=str2[14] #vol
#测试程序:
f= read_real_future_data('M1809')
print(f)
****************************************************************************
****************************************************************************
一。新浪实时数据读取
例子
http://hq.sinajs.cn/list=M0 #豆粕连续 M0
返回值如下:
var hq_str_M0="豆粕连续,145958,3170,3190,3145,3178,3153,3154,3154,3162,3169,
1325,223,1371608,1611074,连,豆粕,2013-06-28"...;
----------------------------------------------------------
1.数据读出顺序
0:豆粕连续,名字
1:145958,数据读取时间
2:3170,开盘价
3:3190,最高价
4:3145,最低价
5:3178,昨日收盘价 (2018年6月27日)
6:3153,买价,即“买一”报价
7:3154,卖价,即“卖一”报价
8:3154,最新价,即收盘价
9:3162,结算价
10:3169,昨结算
11:1325,买 量
12:223,卖 量
13:1371608,持仓量
14:1611074,成交量
15:连,大连商品交易所简称
16:豆粕,品种名简称
17:2018-06-28,日期
----------------------------------------------
2.新浪期货数据各品种代码(商品连续)如下
RB0 螺纹钢
AG0 白银
AU0 黄金
CU0 沪铜
AL0 沪铝
ZN0 沪锌
PB0 沪铅
RU0 橡胶
FU0 燃油
WR0 线材
A0 大豆
M0 豆粕
Y0 豆油
J0 焦炭
C0 玉米
L0 乙烯
P0 棕油
V0 PVC
RS0 菜籽
RM0 菜粕
FG0 玻璃
CF0 棉花
WS0 强麦
ER0 籼稻
ME0 甲醇
RO0 菜油
TA0 甲酸
CFF_RE_IF1307 股指期货
3.使用方法
3.1.品种名 + 0 (数字0),代表品种连续,如果是其他月份,请使用品种名 + YYYMM
例如
豆粕 2013年09月,M1309
http://hq.sinajs.cn/list=M1309
3.2.一次可以请求多个品种,例如
http://hq.sinajs.cn/list=CFF_RE_IF1307,TA0,M0,CFF_RE_IF1306,RB1309,M1309,SR1309
********************************************************************************************
二。历史数据读取
商品期货
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLineXm?symbol=CODE
例子:
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLine5m?symbol=M0
5分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLine5m?symbol=M0
15分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLine15m?symbol=M0
30分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLine30m?symbol=M0
60分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesMiniKLine60m?symbol=M0
日K线
http://stock2.finance.sina.com.cn/futures/api/json.php/
IndexService.getInnerFuturesDailyKLine?symbol=M0
股指期货
5分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
CffexFuturesService.getCffexFuturesMiniKLine5m?symbol=IF1306
15
http://stock2.finance.sina.com.cn/futures/api/json.php/
CffexFuturesService.getCffexFuturesMiniKLine15m?symbol=IF1306
30分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
CffexFuturesService.getCffexFuturesMiniKLine30m?symbol=IF1306
60分钟
http://stock2.finance.sina.com.cn/futures/api/json.php/
CffexFuturesService.getCffexFuturesMiniKLine60m?symbol=IF1306
日线
http://stock2.finance.sina.com.cn/futures/api/json.php/
CffexFuturesService.getCffexFuturesDailyKLine?symbol=IF1306
********************************************************************************************
********************************************************************************************
实例:
import requests
import sys
future_code = 'M1809'
url_str = ('http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesDailyKLine?symbol=' +
future_code)
r = requests.get(url_str)
r_json = r.json()
r_lists = list(r_json)
print('future_code,date,open,high,low,close,vol')
for r_list in r_lists:
for v in r_list:
print(v + ',',end='')
print('\n')