(1)設(shè)置環(huán)境變量:我的電腦-右鍵-屬性-高級(jí)-環(huán)境變量 在Path中加入
創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元卓資做網(wǎng)站,已為上家服務(wù),為卓資各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
;c:\python26 (注意前面的分號(hào)和路徑)
(2)此時(shí),還是只能通過(guò)"python *.py"運(yùn)行python腳本,若希望直接運(yùn)行*.py,只需再修改另一個(gè)環(huán)境變量PATHEXT:
;.PY;.PYM
3,測(cè)試是否安裝成功
cmd進(jìn)入命令行 輸入python –v 若是輸出版本信息,則表示安裝完畢
4,建一個(gè)hello.py
print ("hello world")
5,cmd 進(jìn)入命令行 找到文件路徑 hello.py
會(huì)輸出"hello world"
6,接受用戶輸入
x= input("x:")
y= input("y:")
print (x * y)
2010 ~ 2017 滬深A(yù)股各行業(yè)量化分析
在開(kāi)始各行業(yè)的量化分析之前,我們需要先弄清楚兩個(gè)問(wèn)題:
第一,A股市場(chǎng)上都有哪些行業(yè);
第二,各行業(yè)自2010年以來(lái)的營(yíng)收、凈利潤(rùn)增速表現(xiàn)如何?
第一個(gè)問(wèn)題
很好回答,我們使用JQData提供的獲取行業(yè)成分股的方法,輸入get_industries(name='sw_l1')
得到申萬(wàn)一級(jí)行業(yè)分類結(jié)果如下:它們分別是:【農(nóng)林牧漁、采掘、化工、鋼鐵、有色金屬、電子、家用電器、食品飲料、紡織服裝、輕工制造、醫(yī)藥生物、公用事業(yè)、交通運(yùn)輸、房地產(chǎn)、商業(yè)貿(mào)易、休閑服務(wù)、綜合、建筑材料、建筑裝飾、電器設(shè)備、國(guó)防軍工、計(jì)算機(jī)、傳媒、通信、銀行、非銀金融、汽車、機(jī)械設(shè)備】共計(jì)28個(gè)行業(yè)。
第二個(gè)問(wèn)題
要知道各行業(yè)自2010年以來(lái)的營(yíng)收、凈利潤(rùn)增速表現(xiàn),我們首先需要知道各行業(yè)在各個(gè)年度都有哪些成分股,然后加總該行業(yè)在該年度各成分股的總營(yíng)收和凈利潤(rùn),就能得到整個(gè)行業(yè)在該年度的總營(yíng)收和總利潤(rùn)了。這部分?jǐn)?shù)據(jù)JQData也為我們提供了方便的接口:通過(guò)調(diào)用get_industry_stocks(industry_code=‘行業(yè)編碼’, date=‘統(tǒng)計(jì)日期’),獲取申萬(wàn)一級(jí)行業(yè)指定日期下的行業(yè)成分股列表,然后再調(diào)用查詢財(cái)務(wù)的數(shù)據(jù)接口:get_fundamentals(query_object=‘query_object’, statDate=year)來(lái)獲取各個(gè)成分股在對(duì)應(yīng)年度的總營(yíng)收和凈利潤(rùn),最后通過(guò)加總得到整個(gè)行業(yè)的總營(yíng)收和總利潤(rùn)。這里為了避免非經(jīng)常性損益的影響,我們對(duì)凈利潤(rùn)指標(biāo)最終選取的扣除非經(jīng)常性損益的凈利潤(rùn)數(shù)據(jù)。
我們已經(jīng)獲取到想要的行業(yè)數(shù)據(jù)了。接下來(lái),我們需要進(jìn)一步分析,這些行業(yè)都有什么樣的增長(zhǎng)特征。
我們發(fā)現(xiàn),在28個(gè)申萬(wàn)一級(jí)行業(yè)中,有18個(gè)行業(yè)自2010年以來(lái)在總營(yíng)收方面保持了持續(xù)穩(wěn)定的增長(zhǎng)。它們分別是:【農(nóng)林牧漁,電子,食品飲料,紡織服裝,輕工制造,醫(yī)藥生物,公用事業(yè),交通運(yùn)輸,房地產(chǎn),休閑服務(wù),建筑裝飾,電氣設(shè)備,國(guó)防軍工,計(jì)算機(jī),傳媒,通信,銀行,汽車】;其他行業(yè)在該時(shí)間范圍內(nèi)出現(xiàn)了不同程度的負(fù)增長(zhǎng)。
那么,自2010年以來(lái)凈利潤(rùn)保持持續(xù)增長(zhǎng)的行業(yè)又會(huì)是哪些呢?結(jié)果是只有5個(gè)行業(yè)保持了基業(yè)長(zhǎng)青,他們分別是醫(yī)藥生物,建筑裝飾,電氣設(shè)備,銀行和汽車。(注:由于申萬(wàn)行業(yè)在2014年發(fā)生過(guò)一次大的調(diào)整,建筑裝飾,電氣設(shè)備,銀行和汽車實(shí)際從2014年才開(kāi)始統(tǒng)計(jì)。)
從上面的分析結(jié)果可以看到,真正能夠保持持續(xù)穩(wěn)定增長(zhǎng)的行業(yè)并不多,如果以扣非凈利潤(rùn)為標(biāo)準(zhǔn),那么只有醫(yī)藥生物,建筑裝飾,電氣設(shè)備,銀行和汽車這五個(gè)行業(yè)可以稱之為優(yōu)質(zhì)行業(yè),實(shí)際投資中,就可以只從這幾個(gè)行業(yè)中去投資。這樣做的目的是,一方面,能夠從行業(yè)大格局層面避免行業(yè)下行的風(fēng)險(xiǎn),繞開(kāi)一個(gè)可能出現(xiàn)負(fù)增長(zhǎng)的的行業(yè),從而降低投資的風(fēng)險(xiǎn);另一方面,也大大縮短了我們的投資范圍,讓投資者能夠?qū)W⒂趶恼嬲玫男袠I(yè)去挑選公司進(jìn)行投資。
「2010-2017」投資于優(yōu)質(zhì)行業(yè)龍頭的收益表現(xiàn)
選好行業(yè)之后,下面進(jìn)入選公司環(huán)節(jié)。我們知道,即便是一個(gè)好的行業(yè)也仍然存在表現(xiàn)不好的公司,那么什么是好的公司呢,本文試圖從營(yíng)業(yè)收入規(guī)模和利潤(rùn)規(guī)模和來(lái)考察以上五個(gè)基業(yè)長(zhǎng)青的行業(yè),從它們中去篩選公司作為投資標(biāo)的。
3.1按營(yíng)業(yè)收入規(guī)模構(gòu)建的行業(yè)龍頭投資組合
首先,我們按照營(yíng)業(yè)收入規(guī)模,篩選出以上5個(gè)行業(yè)【醫(yī)藥生物,建筑裝飾,電氣設(shè)備,銀行和汽車】從2010年至今的行業(yè)龍頭如下表所示:
可以看到,雖然時(shí)間跨度很長(zhǎng),但是在這5個(gè)行業(yè)中,營(yíng)收規(guī)模大的公司始終處于領(lǐng)先地位。它們分別是【上海醫(yī)藥,中國(guó)建筑,上海電氣,工商銀行,上汽集團(tuán)】。
由于各年度上市公司年報(bào)的公布截止日是4月30日,待所有上市公司年報(bào)公布后,確定行業(yè)龍頭,然后將這些行業(yè)龍頭構(gòu)建成一個(gè)投資組合。那么,持有投資組合的收益表現(xiàn)如何呢?為了保證投資時(shí)間的一致性,我們假設(shè)從2015年4月30號(hào)之后的第一個(gè)交易日開(kāi)始投資,本金是100萬(wàn),每個(gè)標(biāo)的投資權(quán)重相同,都是20%,并且忽略交易成本,那么持有該組合至2018年4月30號(hào)的投資收益是多少呢?
我們利用JQData提供的獲取行情接口get_price(security='股票代碼', start_date='開(kāi)始交易日', end_date='投資截止日', frequency='daily', fields=None, skip_paused=False, fq='pre'),分別獲取組合中各個(gè)公司在各年度開(kāi)始交易日和投資截止日(4.30之后的第一個(gè)交易日)的價(jià)格,得到最終的投資結(jié)果如下圖所示:
可以看到,除了2015.5.4-2016.5.3股災(zāi)期間,該組合投資收益率和上證指數(shù)、滬深300指數(shù)有一個(gè)同步的大幅下跌外,從2016.5.3至2018年5.2,改組合連續(xù)兩年獲得了正收益,并在2016年大幅跑贏另外兩個(gè)基準(zhǔn)指數(shù)20%以上。
聰明的讀者一定會(huì)問(wèn)這樣一個(gè)問(wèn)題,如果我從2018年5月2號(hào)開(kāi)始,投資100萬(wàn)買入這樣一個(gè)按營(yíng)收規(guī)模衡量的行業(yè)龍頭組合,至2018年5月30號(hào),收益表現(xiàn)會(huì)如何呢?答案是【3.04%】,而同期上證指數(shù)收益率和滬深300收益率分別是【-0.20%】和【-0.39%】,可以說(shuō)表現(xiàn)非常之好了。具體收益如下表所示:
3.2按扣非凈利潤(rùn)規(guī)模構(gòu)建的行業(yè)龍頭投資組合
如果我們按照扣除非經(jīng)常性損益的凈利潤(rùn)來(lái)衡量,以上5個(gè)行業(yè)從2010年至今的行業(yè)龍頭又會(huì)是哪些呢,我們查出來(lái)如下表所示:
可以看到,按照扣非凈利潤(rùn)來(lái)構(gòu)建投資組合,醫(yī)藥生物和電氣設(shè)備兩個(gè)行業(yè)分別發(fā)生了行業(yè)龍頭的更替,如果要構(gòu)建基于扣非凈利潤(rùn)的投資組合,那么我們就需要每年去調(diào)整我們的組合標(biāo)的以保證組合中都是上一年度的行業(yè)龍頭。和上述投資回測(cè)方式一樣,我們從2015年5月4號(hào)買入這樣一個(gè)組合,并在之后每年4月30號(hào)之后的第一個(gè)交易日調(diào)整組合中的行業(yè)龍頭標(biāo)的,最終的投資結(jié)果如下表所示:
可以看到,即使是2015.4.30-2016.5.3股災(zāi)期間,該組合也跑贏上證指數(shù)和滬深300指數(shù)3%左右;而2016.5.3至2018年5.2期間更是大幅跑贏兩個(gè)基準(zhǔn)指數(shù)高達(dá)30%以上。
同樣的,如果從2018年5月2號(hào)開(kāi)始,投資100萬(wàn)買入這樣一個(gè)按扣非凈利潤(rùn)規(guī)模衡量的行業(yè)龍頭組合,至2018年5月30號(hào),收益表現(xiàn)會(huì)如何呢?答案是【2.83%】,對(duì)比同期上證指數(shù)收益率和滬深300指數(shù)的【-0.20%】和【-0.39%】,仍然維持了非常良好的表現(xiàn)。具體收益如下表所示:
結(jié)論
通過(guò)以上行業(yè)分析和投資組合的歷史回測(cè)可以看到:
先選行業(yè),再選公司,即使是從2015年股災(zāi)期間開(kāi)始投資,至2018年5月1號(hào),仍然能夠獲得相對(duì)理想的收益,可以說(shuō),紅杉資本的賽道投資法則對(duì)于一般投資者還是比較靠譜的。
在構(gòu)建行業(yè)龍頭投資組合時(shí),凈利潤(rùn)指標(biāo)顯著優(yōu)于營(yíng)業(yè)收入指標(biāo),獲得的投資收益能夠更大的跑贏全市場(chǎng)收益率
市場(chǎng)是不斷波動(dòng)的,如果一個(gè)投資者從股災(zāi)期間開(kāi)始投資,那么即使他買入了上述優(yōu)質(zhì)行業(yè)的龍頭組合,在近3年也只能獲得12%左右的累計(jì)收益;而如果從2016年5月3日開(kāi)始投資,那么至2018年5月2日,2年時(shí)間就能獲得超過(guò)50%以上的收益了。所以,在投資過(guò)程中選擇時(shí)機(jī)也非常重要。
出自:JoinQuant 聚寬數(shù)據(jù) JQData
作為一個(gè)python新手,在學(xué)習(xí)中遇到很多問(wèn)題,要善于運(yùn)用各種方法。今天,在學(xué)習(xí)中,碰到了如何通過(guò)收盤價(jià)計(jì)算股票的漲跌幅。
第一種:
讀取數(shù)據(jù)并建立函數(shù):
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import spline
from pylab import *
import pandas as pd
from pandas import Series
a=pd.read_csv('d:///1.csv',sep=',')#文件位置
t=a['close']
def f(t):
s=[]
for i in range(1,len(t)):
if i==1:
continue
else:
s.append((t[i]-t[i-1])/t[i]*100)
print s
plot(s)
plt.show()
f(t)
第二種:
利用pandas里面的方法:
import pandas as pd
a=pd.read_csv('d:///1.csv')
rets = a['close'].pct_change() * 100
print rets
第三種:
close=a['close']
rets=close/close.shift(1)-1
print rets
總結(jié):python是一種非常好的編程語(yǔ)言,一般而言,我們可以運(yùn)用構(gòu)建相關(guān)函數(shù)來(lái)實(shí)現(xiàn)自己的思想,但是,眾所周知,python中里面的有很多科學(xué)計(jì)算包,里面有很多方法可以快速解決計(jì)算的需要,如上面提到的pandas中的pct_change()。因此在平時(shí)的使用中應(yīng)當(dāng)學(xué)會(huì)尋找更好的方法,提高運(yùn)算速度。
股票自動(dòng)交易助手提供了一個(gè) Python 自動(dòng)下單接口,參考代碼
#股票自動(dòng)交易助手?Python?自動(dòng)下單使用?例子
#把此腳本和?StockOrderApi.py?Order.dll?放到你自己編寫(xiě)的腳本同一目錄
from?StockOrderApi?import?*
#買入測(cè)試
#Buy(u"600000"?,?100,?0,?1,?0)
#賣出測(cè)試,是持倉(cāng)股才會(huì)有動(dòng)作
#Sell(u"000100"?,?100,?0,?1,?0)
#賬戶信息
print("股票自動(dòng)交易接口測(cè)試")
print("賬戶信息")
print("--------------------------------")
arrAccountInfo?=?["總資產(chǎn)",?"可用資金",?"持倉(cāng)總市值",?"總盈利金額",?"持倉(cāng)數(shù)量"];
for?i?in?range(0,?len(arrAccountInfo)):
value?=?GetAccountInfo(?u""??,?i,?0)
print?("%s?%f?"%(arrAccountInfo[i],?value))
print("--------------------------------")
print("?")
print("股票持倉(cāng)")
print("--------------------------------")
#取出所有的持倉(cāng)股票代碼,結(jié)果以?','隔開(kāi)的
allStockCode?=?GetAllPositionCode(0)
allStockCodeArray?=?allStockCode.split(',')
for?i?in?range(0,?len(allStockCodeArray)):
vol?=?GetPosInfo(?allStockCodeArray[i]??,?0?,?0)
changeP?=?GetPosInfo(?allStockCodeArray[i]??,?4?,?0)
print?("%s?%d?%.2f%%"%(allStockCodeArray[i],?vol,?changeP))
print("--------------------------------")
股票池用python構(gòu)建的方法是:使用第三方平臺(tái),目前可以使用的是聚寬,對(duì)比一下聚寬、優(yōu)礦、大寬網(wǎng)(已經(jīng)倒閉了),都大同小異,選哪個(gè)都一樣。
雖然這些平臺(tái)都大同小異,但是代碼可不能簡(jiǎn)單復(fù)制粘貼,因?yàn)榈讓雍瘮?shù)庫(kù)是不一樣的,有可能在別的平臺(tái)根本用不了某個(gè)函數(shù),并且簡(jiǎn)單復(fù)制到自己電腦中的python的話百分之百用不了。
代碼的思路是,每個(gè)月底進(jìn)行調(diào)倉(cāng),選出市值最小的股票交易,去掉ST/*ST/停牌/漲停的股票,然后選擇最小市值的10只,基準(zhǔn)是創(chuàng)業(yè)板綜指,看看結(jié)果。
python構(gòu)建數(shù)據(jù)獲取方法是:
這里使用為了接下來(lái)的操作需要將一定歷史范圍的股票數(shù)據(jù)下載下來(lái),這里下載起始時(shí)間為20160101,截至?xí)r間為運(yùn)行代碼的時(shí)間范圍的歷史日線數(shù)據(jù)。
這里以tushare為例, tushare獲取歷史數(shù)據(jù)有兩種方式。
第一種是以迭代歷史交易日的方式獲取所有歷史數(shù)據(jù),假設(shè)獲取三年的歷史數(shù)據(jù),一年一般220個(gè)交易日左右,那么3年需要請(qǐng)求660多次左右,如果以這種方式的話,就下載數(shù)據(jù)的時(shí)間只需要1分鐘多點(diǎn)的樣子。
第二種是以迭代所有股票代碼的方式獲取所有歷史數(shù)據(jù),股票數(shù)量有大概3800多個(gè),需要請(qǐng)求3800多次,但是在積分有限的情況下一分鐘最多請(qǐng)求500次,也就意味著僅下載數(shù)據(jù)的時(shí)間至少需要大概8分鐘時(shí)間。
理論上,你獲取的歷史范圍超過(guò)17.3年,那么使用第一種方式才比第二種方式快。
在Python的QSTK中,是通過(guò)s_datapath變量,定義相應(yīng)股票數(shù)據(jù)所在的文件夾。一般可以通過(guò)QSDATA這個(gè)環(huán)境變量來(lái)設(shè)置對(duì)應(yīng)的數(shù)據(jù)文件夾。具體的股票數(shù)據(jù)來(lái)源,例如滬深、港股等市場(chǎng),你可以使用免費(fèi)的WDZ程序輸出相應(yīng)日線、5分鐘數(shù)據(jù)到s_datapath變量所指定的文件夾中。然后可使用Python的QSTK中,qstkutil.DataAccess進(jìn)行數(shù)據(jù)訪問(wèn)。