圖片來(lái)自網(wǎng)絡(luò)
現(xiàn)在很多客戶端提供市場(chǎng)數(shù)據(jù),但只能作為觀看同诫,并不能做深入分析。另一方面樟澜,量化分析越來(lái)越火熱的今日误窖。分享自己的量化回測(cè)筆記。
既然要開始本地量化回測(cè)秩贰。首先是要有一個(gè)完整的行情數(shù)據(jù)霹俺。為了方便本教程。筆者選擇美股市場(chǎng)上的一支股票來(lái)快速的開始量化策略分析毒费。
行情數(shù)據(jù)獲取
我們使用pytdx來(lái)獲取美股的歷史行情數(shù)據(jù)
pytdx是一個(gè)github的開源項(xiàng)目丙唧,通過(guò)訪問(wèn)通達(dá)信的行情服務(wù)器來(lái)獲取美股市場(chǎng)數(shù)據(jù)。
1. 安裝pytdx
筆者使用python2.7并且安裝Anaconda包管理工具
pip install pytdx
2. 獲取數(shù)據(jù)
a.可以通過(guò)獲取市場(chǎng)列表來(lái)選擇你想要獲取的行情觅玻,這里筆者選擇美股知名公司
markets = api.get_markets()
api.to_df(markets)
得到的市場(chǎng)如下(節(jié)選):
market | name | short_name |
---|---|---|
1 | 臨時(shí)股 | TP |
4 | 鄭州商品期權(quán) | OZ |
5 | 大連商品期權(quán) | OD |
6 | 上海商品期權(quán) | OS |
8 | 上海個(gè)股期權(quán) | |
10 | 基本匯率 | FE |
11 | 交叉匯率 | FX |
31 | 香港主板 | KH |
40 | 中國(guó)概念股 | CH |
41 | 美股知名公司 | MG |
b.通過(guò)市場(chǎng)過(guò)濾想际,得到美股代碼
df_inst = api.to_df(insts)
df_inst[df_inst['market'] == 41]
得到結(jié)果如下:
知名美股列表
c.獲取歷史日K線數(shù)據(jù)
from pytdx.params import TDXParams
his_kline = api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 40, "AAPL", 0, 300)
api.to_df(his_kline)
d.取日線,劃張價(jià)格走勢(shì)圖(APPL-demo.csv)
import matplotlib.pyplot as plt
import datetime
def format(date):
return datetime.datetime.strptime(str(date), "%Y%m%d")
df = datadf
df['time'] = df['year'] * 10000 + df['month'] * 100 + df['day']
plt.plot(df['time'].apply(lambda x : format(x)), df['close'])
蘋果300天歷史K線數(shù)據(jù)
e.保存為csv格式
#保存為csv格式,命名為APPL-demo/按照逗號(hào)分隔
datadf.to_csv(r'./APPL-demo.csv',index=False,sep=',')
至此獲取任意股票的歷史行情的教程到此結(jié)束培漏。下一篇開始講述量化回測(cè)
f.獲取數(shù)據(jù)完整代碼附上(spider.py)
(代碼未經(jīng)過(guò)優(yōu)化處理,需要解決通信達(dá)超時(shí)重連問(wèn)題胡本,如需要自動(dòng)化下載移步Githut)
#spider.py
from pytdx.exhq import TdxExHq_API
from pytdx.params import TDXParams
import pandas as pd
api = TdxExHq_API(heartbeat=True)
host = "180.153.18.176" #通信達(dá)的api地址
port = 7721 #通信達(dá)的連接端口
#開始連接通信達(dá)服務(wù)器
api.connect(host, port)
insts = []
count = 500
curr_index = 0
while (True) :
insts_tmp = api.get_instrument_info(curr_index, count)
if insts_tmp is None:
break
insts.extend(insts_tmp)
curr_index = curr_index + len(insts_tmp)
if len(insts_tmp) < count:
break
#查看通信達(dá)提供的市場(chǎng)列表
#print api.to_df(api.get_markets())
df_inst = api.to_df(insts)
#這里筆者選擇的美國(guó)知名公司列表, 所以market = 41
df_inst[df_inst['market'] == 41]
#這里教程獲取AAPL單一數(shù)據(jù)共啃,如果需要全部數(shù)據(jù)可以使用列表循環(huán)下載整個(gè)數(shù)據(jù)
#筆者獲取的是蘋果公司最近300天交易日行情Day版
his_kline = api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 41, "AAPL", 0, 300)
datadf = api.to_df(his_kline)
#保存為csv格式,命名為APPL-demo/按照逗號(hào)分隔
datadf.to_csv(r'./APPL-demo.csv',index=False,sep=',')
轉(zhuǎn)載連接
pytdx官方說(shuō)明文檔