python實(shí)現(xiàn)馬丁策略回測(cè)3000只股票的實(shí)例代碼
上一篇文章講解了如何實(shí)現(xiàn)馬丁策略,但沒(méi)有探索其泛化能力,所以這次來(lái)嘗試回測(cè)3000只股票來(lái)查看盈利比例。
批量爬取股票數(shù)據(jù)
這里爬取數(shù)據(jù)繼續(xù)使用tushare,根據(jù)股票代碼來(lái)遍歷,因?yàn)榕廊?shù)據(jù)需要一定時(shí)間,不妨使用多線程來(lái)爬取,這里要注意tushare規(guī)定每分鐘爬取不能超過(guò)500次,除非你有很多積分,所以線程數(shù)要適當(dāng)調(diào)低。
首先我們生成上證與深證所有股票的代碼:
#上證代碼 shanghaicode = [] for i in range(600000, 604000, 1): shanghaicode.append(str(i)) #深證代碼 shenzhencode = [] for i in range(1000000, 1005000, 1): i = str(i)[1:] shenzhencode.append(i)
然后再定義一個(gè)爬取函數(shù),broker則是上一篇文章創(chuàng)建的實(shí)例:
def getalldata(code): if os.path.exists(datapath + code + '.csv'): print(code + 'already existed!') return metadata = broker.get_stock_pro(code) if len(metadata) == 0: return metadata.to_csv('C:/Users/abc/Desktop/' + code + '.csv',index = False) print(code + 'finished!')
導(dǎo)入多線程需要的模塊
from concurrent.futures.thread import ThreadPoolExecutor #多線程
遍歷所有代碼開(kāi)始爬取,max_workers可適當(dāng)調(diào)整
executor = ThreadPoolExecutor(max_workers=3) for datatemp in executor.map(getalldata, shenzhencode): pass executor = ThreadPoolExecutor(max_workers=3) for datatemp in executor.map(getalldata, shanghaicode): pass
批量回測(cè)股票
數(shù)據(jù)爬好后則可開(kāi)始回測(cè)了,因?yàn)榛販y(cè)是CPU瓶頸運(yùn)算,所以這里就不使用多線程了,速度差不多。
首先將一只股票的回測(cè)程序封裝到函數(shù)中,回測(cè)時(shí)間設(shè)置為2020年全年,起始資金設(shè)置為20萬(wàn)元:
def martinmulti(code): broker = backtesting(200000,'20200101', '20201231') #獲取股票數(shù)據(jù) metadata = pd.read_csv(datapath + code) data = np.array(metadata['close']) exdata = np.array(metadata['pre_close']) everyChange = np.array(metadata['change']) date = metadata['trade_date'].values everyChange = everyChange/data #開(kāi)始回測(cè) broker.startbackmartin(data, exdata, everyChange, date) dicttemp = {'股票代碼': code,'終止現(xiàn)金': broker.cash} return dicttemp
遍歷股票代碼回測(cè)并記錄終止現(xiàn)金
cashlist = pd.DataFrame(columns= ['股票代碼','終止現(xiàn)金']) for code in datalist: datatemp = martinmulti(code) cashlist = cashlist.append(datatemp,ignore_index=True)
回測(cè)過(guò)程如下
接下來(lái)看看哪支股票獲得了最大利潤(rùn):
看看平均值
cashlist.mean() Out[12]: 終止現(xiàn)金 208279.115166
可以從均值看出馬丁策略賺作為一種相對(duì)保險(xiǎn)的方法賺的不多,當(dāng)然想要找到一勞永逸的方法是不可能的,并且用平均數(shù)不能代表一切,那看看盈利比例如何:
plt.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('ggplot') plt.title("盈利分布(萬(wàn)元)") bins = [] for i in range(10000, 600000, 10000): bins.append(i) plt.hist(cashlist['終止現(xiàn)金'],bins = bins) plt.axvline(x = cashlist.mean().values,ls="-",c="green")#添加垂直直線
可以看出有折腰的也有翻倍的,且絕大部分集中于20w元旁邊,分布圖形整體往20萬(wàn)右側(cè)偏移,該策略還有待改進(jìn)。
到此這篇關(guān)于python實(shí)現(xiàn)馬丁策略回測(cè)3000只股票的文章就介紹到這了,更多相關(guān)python股票策略回測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python爬蟲(chóng)回測(cè)股票的實(shí)例講解
- 使用python爬蟲(chóng)實(shí)現(xiàn)網(wǎng)絡(luò)股票信息爬取的demo
- python基于機(jī)器學(xué)習(xí)預(yù)測(cè)股票交易信號(hào)
- 如何用Python中Tushare包輕松完成股票篩選(詳細(xì)流程操作)
- python爬取股票最新數(shù)據(jù)并用excel繪制樹(shù)狀圖的示例
- 基于Python爬取搜狐證券股票過(guò)程解析
- 基于Python爬取股票數(shù)據(jù)過(guò)程詳解
- 關(guān)于python tushare Tkinter構(gòu)建的簡(jiǎn)單股票可視化查詢系統(tǒng)(Beta v0.13)
- Python爬取股票信息,并可視化數(shù)據(jù)的示例
- python用線性回歸預(yù)測(cè)股票價(jià)格的實(shí)現(xiàn)代碼
- python 簡(jiǎn)單的股票基金爬蟲(chóng)
相關(guān)文章
自學(xué)python求已知DNA模板的互補(bǔ)DNA序列
這篇文章主要為大家介紹了自學(xué)python求已知DNA模板的互補(bǔ)DNA序列的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Django使用裝飾器限制對(duì)視圖的訪問(wèn)及實(shí)現(xiàn)原理
除了可以在視圖處理中校驗(yàn)用戶身份以及驗(yàn)證用戶權(quán)限之外,Django還提供了便捷的裝飾器來(lái)完成這兩類(lèi)校驗(yàn),下面介紹這兩個(gè)裝飾器的使用方法與實(shí)現(xiàn)原理,對(duì)Django裝飾器限制視圖訪問(wèn)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10Python簡(jiǎn)繁體轉(zhuǎn)換的簡(jiǎn)單實(shí)現(xiàn)步驟
工作中需要將繁體中文轉(zhuǎn)換成簡(jiǎn)體中文上網(wǎng)找了些資料,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)簡(jiǎn)繁體轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Python3.9.0 a1安裝pygame出錯(cuò)解決全過(guò)程(小結(jié))
這篇文章主要介紹了Python3.9.0 a1安裝pygame出錯(cuò)解決全過(guò)程(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python編程O(píng)penCV和Numpy圖像處理庫(kù)實(shí)現(xiàn)圖片去水印
這篇文章主要介紹了Python編程中如何實(shí)現(xiàn)圖片去水印本文采用了OpenCV和Numpy的圖像處理的方法來(lái)實(shí)現(xiàn),文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下2021-09-09python中使用百度音樂(lè)搜索的api下載指定歌曲的lrc歌詞
這篇文章主要介紹了python中使用百度音樂(lè)搜索的api下載指定歌曲的lrc歌詞,同時(shí)也分析出了歌曲的下載地址,需要的朋友可以參考下2014-07-07Python基礎(chǔ)之?dāng)?shù)據(jù)類(lèi)型知識(shí)匯總
今天帶大家復(fù)習(xí)一下Python基礎(chǔ)知識(shí),文中對(duì)數(shù)據(jù)類(lèi)型相關(guān)知識(shí)做了詳細(xì)的匯總,對(duì)剛?cè)腴T(mén)python的小伙伴很有幫助喲,需要的朋友可以參考下2021-05-05Python利用AI接口實(shí)現(xiàn)摳圖并改圖片底色
時(shí)候我們的證件照需要換底色,又來(lái)不及去照相館拍照,用ps也不好摳圖,所以今天給你們分享一下如何用python來(lái)?yè)笀D,并換底色,需要的可以參考一下2022-09-09python 3.0 模擬用戶登錄功能并實(shí)現(xiàn)三次錯(cuò)誤鎖定
Python的3.0版本,常被稱為Python 3000,或簡(jiǎn)稱Py3k。這篇文章主要介紹了python 3.0 模擬用戶登錄功能并實(shí)現(xiàn)三次錯(cuò)誤鎖定,需要的朋友可以參考下2017-11-11