python實現(xiàn)馬丁策略回測3000只股票的實例代碼
上一篇文章講解了如何實現(xiàn)馬丁策略,但沒有探索其泛化能力,所以這次來嘗試回測3000只股票來查看盈利比例。
批量爬取股票數(shù)據(jù)
這里爬取數(shù)據(jù)繼續(xù)使用tushare,根據(jù)股票代碼來遍歷,因為爬取數(shù)據(jù)需要一定時間,不妨使用多線程來爬取,這里要注意tushare規(guī)定每分鐘爬取不能超過500次,除非你有很多積分,所以線程數(shù)要適當調(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)
然后再定義一個爬取函數(shù),broker則是上一篇文章創(chuàng)建的實例:
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!')
導入多線程需要的模塊
from concurrent.futures.thread import ThreadPoolExecutor #多線程
遍歷所有代碼開始爬取,max_workers可適當調(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
批量回測股票
數(shù)據(jù)爬好后則可開始回測了,因為回測是CPU瓶頸運算,所以這里就不使用多線程了,速度差不多。
首先將一只股票的回測程序封裝到函數(shù)中,回測時間設(shè)置為2020年全年,起始資金設(shè)置為20萬元:
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
#開始回測
broker.startbackmartin(data, exdata, everyChange, date)
dicttemp = {'股票代碼': code,'終止現(xiàn)金': broker.cash}
return dicttemp
遍歷股票代碼回測并記錄終止現(xiàn)金
cashlist = pd.DataFrame(columns= ['股票代碼','終止現(xiàn)金']) for code in datalist: datatemp = martinmulti(code) cashlist = cashlist.append(datatemp,ignore_index=True)
回測過程如下

接下來看看哪支股票獲得了最大利潤:

看看平均值
cashlist.mean() Out[12]: 終止現(xiàn)金 208279.115166
可以從均值看出馬丁策略賺作為一種相對保險的方法賺的不多,當然想要找到一勞永逸的方法是不可能的,并且用平均數(shù)不能代表一切,那看看盈利比例如何:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.style.use('ggplot')
plt.title("盈利分布(萬元)")
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萬右側(cè)偏移,該策略還有待改進。
到此這篇關(guān)于python實現(xiàn)馬丁策略回測3000只股票的文章就介紹到這了,更多相關(guān)python股票策略回測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python爬蟲回測股票的實例講解
- 使用python爬蟲實現(xiàn)網(wǎng)絡(luò)股票信息爬取的demo
- python基于機器學習預測股票交易信號
- 如何用Python中Tushare包輕松完成股票篩選(詳細流程操作)
- python爬取股票最新數(shù)據(jù)并用excel繪制樹狀圖的示例
- 基于Python爬取搜狐證券股票過程解析
- 基于Python爬取股票數(shù)據(jù)過程詳解
- 關(guān)于python tushare Tkinter構(gòu)建的簡單股票可視化查詢系統(tǒng)(Beta v0.13)
- Python爬取股票信息,并可視化數(shù)據(jù)的示例
- python用線性回歸預測股票價格的實現(xiàn)代碼
- python 簡單的股票基金爬蟲
相關(guān)文章
Python3.7 dataclass使用指南小結(jié)
本文將帶你走進python3.7的新特性dataclass,通過本文你將學會dataclass的使用并避免踏入某些陷阱。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
使用Python操作Elasticsearch數(shù)據(jù)索引的教程
這篇文章主要介紹了使用Python操作Elasticsearch數(shù)據(jù)索引的教程,Elasticsearch處理數(shù)據(jù)索引非常高效,要的朋友可以參考下2015-04-04
解決導入django_filters不成功問題No module named ''django_filter''
這篇文章主要介紹了解決導入django_filters不成功問題No module named 'django_filter',具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Python中2種常用數(shù)據(jù)可視化庫Bokeh和Altair使用示例詳解
本文對Python中兩個常用的數(shù)據(jù)可視化庫?Bokeh?和?Altair?進行了比較和探討,通過對它們的特點、優(yōu)缺點以及使用示例的詳細分析,讀者可以更好地了解這兩個庫的功能和適用場景,從而更好地選擇合適的庫來進行數(shù)據(jù)可視化工作,感興趣的朋友跟隨小編一起看看吧2024-04-04

