date
=
ak
.
tool_trade_date_hist_sina
(
)
date
=
date
.
loc
[
date
[
'trade_date'
]
>=
'2019-01-01'
]
df1
=
pd
.
DataFrame
(
)
for
j
in
date
[
'trade_date'
]
:
print
(
j
)
url
=
'http://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=option_hyfxzb&TABKEY=tab1&txtSearchDate=%(j)s&random=0.5379373345285146'
%
{
'j'
:
j
}
print
(
url
)
response
=
requests
.
get
(
url
)
这一块本人很不满意,先保存再读取,多此一举。主要是因为直接显示发现乱码,本人无论如何都无法解析为正常结果,
只能先放到xlsx,之后重新读取保存。请诸位大虾见到给小弟一点帮助,如何解决。多谢!!!!!!!!!!
""""
with
open
(
'D:/结果存放3.xlsx'
,
'ab'
)
as
file_handle
:
file_handle
.
write
(
response
.
content
)
df
=
pd
.
read_excel
(
'D:/结果存放3.xlsx'
)
df
[
'trade_date'
]
=
j
df1
=
df1
.
append
(
df
)
df1
.
to_csv
(
'szse.csv'
)
爬取上交所
import csv
from contextlib import closing
import time
from urllib.request import urlopen
date = ak.tool_trade_date_hist_sina()
date =date.loc[date['trade_date']>='2019-01-01']
df1 = pd.DataFrame()
for j in date['trade_date']:
s = datetime.datetime.strptime(j,'%Y-%m-%d').strftime('%Y%m')
s2 = datetime.datetime.strptime(j,'%Y-%m-%d').strftime('%d')
url = 'http://query.sse.com.cn/derivative/downloadRisk.do?trade_date=%(YM)s%(D)s&productType=0'%{'YM':s,'D':s2}
with closing(requests.get(url, stream=True)) as r:
f = (line.decode('gbk') for line in r.iter_lines())
reader = csv.reader(f,delimiter=',', quotechar=',')
for row in reader:
print(row)
df = pd.DataFrame(row)
df1=df1.append(df.T)
df1.to_csv('sse.csv')
爬取中金所
import datetime
import requests
from lxml import etree
import pandas as pd
import akshare as ak
import time
date = ak.tool_trade_date_hist_sina()
date =date.loc[date['trade_date']>='2019-01-01']
df1 = pd.DataFrame()
for j in date['trade_date']:
s = datetime.datetime.strptime(j,'%Y-%m-%d').strftime('%Y%m')
s2 = datetime.datetime.strptime(j,'%Y-%m-%d').strftime('%d')
url = 'http://www.cffex.com.cn/sj/hqsj/rtj/%(YM)s/%(D)s/index.xml?id=39'%{'YM':s,'D':s2}
response = requests.get(url)
p = etree.HTML((response.content))
df = pd.DataFrame()
for i in range(1,len(p.xpath('//dailydata'))):
try:
df.loc[i,'instrumentid']=(p.xpath('//dailydata[{}]/instrumentid/text()'.format(i)))
except:
df.loc[i,'instrumentid']=0
try:
df.loc[i,'tradingday']=(p.xpath('//dailydata[{}]/tradingday/text()'.format(i)))
except:
df.loc[i,'tradingday']=0
try:
df.loc[i,'openprice']=(p.xpath('//dailydata[{}]/openprice/text()'.format(i)))
except:
df.loc[i,'openprice']=0
try:
df.loc[i,'highestprice']=(p.xpath('//dailydata[{}]/highestprice/text()'.format(i)))
except:
df.loc[i,'highestprice'] =0
try:
df.loc[i,'lowestprice']=(p.xpath('//dailydata[{}]/lowestprice/text()'.format(i)))
except:
df.loc[i,'lowestprice']=0
try:
df.loc[i,'closeprice']=(p.xpath('//dailydata[{}]/closeprice/text()'.format(i)))
except:
df.loc[i,'closeprice'] = 0
try:
df.loc[i,'preopeninterest']=(p.xpath('//dailydata[{}]/preopeninterest/text()'.format(i)))
except:
df.loc[i,'preopeninterest'] = 0
try:
df.loc[i,'openinterest']=(p.xpath('//dailydata[{}]/openinterest/text()'.format(i)))
except:
df.loc[i,'openinterest'] = 0
try:
df.loc[i,'presettlementprice']=(p.xpath('//dailydata[{}]/presettlementprice/text()'.format(i)))
except:
df.loc[i,'presettlementprice'] = 0
try:
df.loc[i,'settlementpriceif']=(p.xpath('//dailydata[{}]/settlementpriceif/text()'.format(i)))
except:
df.loc[i,'settlementpriceif'] = 0
try:
df.loc[i,'settlementprice']=(p.xpath('//dailydata[{}]/settlementprice/text()'.format(i)))
except:
df.loc[i,'settlementprice'] = 0
try:
df.loc[i,'volume']=(p.xpath('//dailydata[{}]/volume/text()'.format(i)))
except:
df.loc[i,'volume'] = 0
try:
df.loc[i,'turnover']=(p.xpath('//dailydata[{}]/turnover/text()'.format(i)))
except:
df.loc[i,'turnover'] = 0
try:
df.loc[i,'productid']=(p.xpath('//dailydata[{}]/productid/text()'.format(i)))
except:
df.loc[i,'productid'] = 0
try:
df.loc[i,'delta']=(p.xpath('//dailydata[{}]/delta/text()'.format(i)))
except:
df.loc[i,'delta'] = 0
try:
df.loc[i,'expiredate']=(p.xpath('//dailydata[i]/expiredate/text()'.format(i)))
except:
df.loc[i,'expiredate'] = 0
df1 = df1.append(df)
df1.to_csv('cffex.csv')
以上是爬取三大交易所期权数据的源代码,可以直接使用,也可以修改保存至数据库。
先从深交所开始:直接上传源码:from bs4 import BeautifulSoupfrom lxml import etreeimport pandas as pdimport akshare as akimport datetimeimport requestsimport csvfrom contextlib import closingimport timefrom urllib.request import urlopenimport requestsfrom urll
想要弄点数据要求高的可以找收费的数据服务商,例如wind,东方财富,后者便宜点,tushare也提供了期权行情数据,但是门槛是有积分限制,其他的地方只能爬取了。做期权策略分析没有数据怎么行,没钱就写一个吧。
新浪财经:https://stock.finance.sina.com.cn/option/quotes.html
主要涉及的接口
当前交易的期权合约月份
http://stock.finance.sina.com.cn/futures/api/openapi.php/StockO
Colly 主体类是 Collector类,Collector管理网络通信,当Collector的任务运行时也负责执行注册的回调函数。
初始化过程如下:
c:=colly.NewCollector()
你可以注册不同的回调函数,通过Collector来控制任务或检索信息。
c.OnRequest(func(r *colly.Request) {
//在Request请求之前调用
fmt.Println("Visit
在期权回测中我用到了三种数据:期权日数据、ETF日数据和期权合约数据。其中前两种数据的获取方法已经在本系列的第1篇文章中做了说明,这里补充一下怎么获取期权合约数据。
期权合约数据是从上交所和深交所下载的。虽然深交所的合约可以手工下载excel文件再转化为CSV之后通过python程序读取。然而,如果需要长期持续地获取数据,最好还是通过爬虫自动爬取。
本文演示怎么通过scrapy爬虫获取上交所/深交所的期权合约信息。假定读者对scrapy有一定的了解,知道scrapy的基础用法。对scrapy不了解的读者可以
python爬取新浪财经商品期权并生成excel表格连接Navicat然后将数据存入数据库
为什么在做了东方财富网的大商所爬取代码后还要搞一个这个?
因为新浪财经的看涨合约和看跌合约是在一块的(相当于一次要爬取两个模块还要进行排版)
这里先给大家捋一下逻辑
1.我是先将爬取下来的数据存为txt文件(因为不知道怎么直接存为excel文件)
2.然后将txt文件转化为excel文件
3.将excel文件导入数据库
在做的时候,要注意变量的命名,不要重复了。。然后一直爆红改错(泪啊都是)
附上代码如下
impor
先上代码:https://github.com/knotgd/option_data
可以获取期权tick数据、greeks数据、分时数据、k线数据、可以查询指定月份和时间的可交易看涨和看跌期权, 可以获取股票tick行情等
from apps.option_data import *
1、获取合约名称
test_contract_name = contract_name('10001011')
print(test_contract_name)
50ETF购11月260
期货行情数据API接口一般由期货交易所或第三方数据提供商提供,可以用于获取实时或历史的期货行情数据。这些API接口通常提供以下数据:
1. 行情数据:包括期货合约的开盘价、收盘价、最高价、最低价、成交量、持仓量等。
2. 交易数据:包括期货合约的交易时间、买卖方向、成交价格、成交数量等。
3. 历史数据:包括期货合约的历史行情数据,可以用于技术分析和回测。
一些常用的期货行情数据API接口有:
1. 中金所期货行情API:由中国金融期货交易所提供,可以获取中金所所有期货品种的实时行情数据。
2. 大商所期货行情API:由大连商品交易所提供,可以获取大商所所有期货品种的实时行情数据。
3. 上期所期货行情API:由上海期货交易所提供,可以获取上期所所有期货品种的实时行情数据。
4. 郑商所期货行情API:由郑州商品交易所提供,可以获取郑商所所有期货品种的实时行情数据。
5. 第三方数据提供商API:如Wind、东方财富等,提供了全国各大期货交易所的实时行情数据和历史数据。
antuptree8:
价值投资/指标选股(akshare)
2301_78361361:
量化学习——跟随龙虎榜交易
神出鬼没,指的就是我!: