『壹』 python的量化代碼怎麼用到股市中
2010 ~ 2017 滬深A股各行業量化分析
在開始各行業的量化分析之前,我們需要先弄清楚兩個問題:
第一,A股市場上都有哪些行業;
第二,各行業自2010年以來的營收、凈利潤增速表現如何?
第一個問題
很好回答,我們使用JQData提供的獲取行業成分股的方法,輸入get_instries(name='sw_l1')
得到申萬一級行業分類結果如下:它們分別是:【農林牧漁、採掘、化工、鋼鐵、有色金屬、電子、家用電器、食品飲料、紡織服裝、輕工製造、醫葯生物、公用事業、交通運輸、房地產、商業貿易、休閑服務、綜合、建築材料、建築裝飾、電器設備、國防軍工、計算機、傳媒、通信、銀行、非銀金融、汽車、機械設備】共計28個行業。
第二個問題
要知道各行業自2010年以來的營收、凈利潤增速表現,我們首先需要知道各行業在各個年度都有哪些成分股,然後加總該行業在該年度各成分股的總營收和凈利潤,就能得到整個行業在該年度的總營收和總利潤了。這部分數據JQData也為我們提供了方便的介面:通過調用get_instry_stocks(instry_code=『行業編碼』, date=『統計日期』),獲取申萬一級行業指定日期下的行業成分股列表,然後再調用查詢財務的數據介面:get_fundamentals(query_object=『query_object』, statDate=year)來獲取各個成分股在對應年度的總營收和凈利潤,最後通過加總得到整個行業的總營收和總利潤。這里為了避免非經常性損益的影響,我們對凈利潤指標最終選取的扣除非經常性損益的凈利潤數據。
我們已經獲取到想要的行業數據了。接下來,我們需要進一步分析,這些行業都有什麼樣的增長特徵。
我們發現,在28個申萬一級行業中,有18個行業自2010年以來在總營收方面保持了持續穩定的增長。它們分別是:【農林牧漁,電子,食品飲料,紡織服裝,輕工製造,醫葯生物,公用事業,交通運輸,房地產,休閑服務,建築裝飾,電氣設備,國防軍工,計算機,傳媒,通信,銀行,汽車】;其他行業在該時間范圍內出現了不同程度的負增長。
那麼,自2010年以來凈利潤保持持續增長的行業又會是哪些呢?結果是只有5個行業保持了基業長青,他們分別是醫葯生物,建築裝飾,電氣設備,銀行和汽車。(註:由於申萬行業在2014年發生過一次大的調整,建築裝飾,電氣設備,銀行和汽車實際從2014年才開始統計。)
從上面的分析結果可以看到,真正能夠保持持續穩定增長的行業並不多,如果以扣非凈利潤為標准,那麼只有醫葯生物,建築裝飾,電氣設備,銀行和汽車這五個行業可以稱之為優質行業,實際投資中,就可以只從這幾個行業中去投資。這樣做的目的是,一方面,能夠從行業大格局層面避免行業下行的風險,繞開一個可能出現負增長的的行業,從而降低投資的風險;另一方面,也大大縮短了我們的投資范圍,讓投資者能夠專注於從真正好的行業去挑選公司進行投資。
「2010-2017」投資於優質行業龍頭的收益表現
選好行業之後,下面進入選公司環節。我們知道,即便是一個好的行業也仍然存在表現不好的公司,那麼什麼是好的公司呢,本文試圖從營業收入規模和利潤規模和來考察以上五個基業長青的行業,從它們中去篩選公司作為投資標的。
3.1按營業收入規模構建的行業龍頭投資組合
首先,我們按照營業收入規模,篩選出以上5個行業【醫葯生物,建築裝飾,電氣設備,銀行和汽車】從2010年至今的行業龍頭如下表所示:
結論
通過以上行業分析和投資組合的歷史回測可以看到:
先選行業,再選公司,即使是從2015年股災期間開始投資,至2018年5月1號,仍然能夠獲得相對理想的收益,可以說,紅杉資本的賽道投資法則對於一般投資者還是比較靠譜的。
在構建行業龍頭投資組合時,凈利潤指標顯著優於營業收入指標,獲得的投資收益能夠更大的跑贏全市場收益率
市場是不斷波動的,如果一個投資者從股災期間開始投資,那麼即使他買入了上述優質行業的龍頭組合,在近3年也只能獲得12%左右的累計收益;而如果從2016年5月3日開始投資,那麼至2018年5月2日,2年時間就能獲得超過50%以上的收益了。所以,在投資過程中選擇時機也非常重要。
出自:JoinQuant 聚寬數據 JQData
『貳』 如何建立一個股票量化交易模型並模擬
用python:金融想法->數據處理->模型回測->模擬交易->業績歸因->模型修正。
量化交易是指以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史數據中海選能帶來超額收益的多種「大概率」事件以制定策略,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下作出非理性的投資決策。
量化交易具有以下幾個方面的特點:
1、紀律性。根據模型的運行結果進行決策,而不是憑感覺。紀律性既可以剋制人性中貪婪、恐懼和僥幸心理等弱點,也可以克服認知偏差,且可跟蹤。
2、系統性。具體表現為「三多」。一是多層次,包括在大類資產配置、行業選擇、精選具體資產三個層次上都有模型;二是多角度,定量投資的核心思想包括宏觀周期、市場結構、估值、成長、盈利質量、分析師盈利預測、市場情緒等多個角度;三是多數據,即對海量數據的處理。
3、套利思想。定量投資通過全面、系統性的掃描捕捉錯誤定價、錯誤估值帶來的機會,從而發現估值窪地,並通過買入低估資產、賣出高估資產而獲利。
4、概率取勝。一是定量投資不斷從歷史數據中挖掘有望重復的規律並加以利用;二是依靠組合資產取勝,而不是單個資產取勝。
『叄』 用Python怎麼做量化投資
本文將會講解量化投資過程中的基本流程,量化投資無非這幾個流程,數據輸入------策略書寫------回測輸出
其中策略書寫部分還涉及到編程語言的選擇,如果不想苦惱數據輸入和回測輸出的話,還要選擇回測平台。
一、數據
首先,必須是數據,數據是量化投資的基礎
如何得到數據?
Wind:數據來源的最全的還是Wind,但是要付費,學生可以有免費試用的機會,之後還會和大家分享一下怎樣才Wind里摘取數據,Wind有很多軟體的借口,Excel,Matlab,Python,C++。
預測者網:不經意間發現,一個免費提供股票數據網站 預測者網,下載的是CSV格式
TB交易開拓者:Tradeblazer,感謝@孫存浩提供數據源
TuShare:TuShare -財經數據介麵包,基於Python的財經數據包,利用Python進行摘取
如何存儲數據?
Mysql
如何預處理數據?
空值處理:利用DataFrame的fill.na()函數,將空值(Nan)替換成列的平均數、中位數或者眾數
數據標准化
數據如何分類?
行情數據
財務數據
宏觀數據
二、計算語言&軟體
已經有很多人在網上詢問過該選擇什麼語言?筆者一開始用的是matlab,但最終選擇了python
python:庫很多,只有你找不到的,沒有你想不到,和量化這塊結合比較緊密的有:
Numpy&Scipy:科學計算庫,矩陣計算
Pandas:金融數據分析神器,原AQR資本員工寫的一個庫,處理時間序列的標配
Matplotlib:畫圖庫
scikit-learn:機器學習庫
statsmodels:統計分析模塊
TuShare:免費、開源的python財經數據介麵包
Zipline:回測系統
TaLib:技術指標庫
matlab:主要是矩陣運算、科學運算這一塊很強大,主要有優點是WorkSpace變數可視化
python的Numpy+Scipy兩個庫完全可以替代Matlab的矩陣運算
Matplotlib完克Matlab的畫圖功能
python還有很多其他的功能
pycharm(python的一款IDE)有很棒的調試功能,能代替Matlab的WorkSpace變數可視化
推薦的python學習文檔和書籍
關於python的基礎,建議廖雪峰Python 2.7教程,適合於沒有程序基礎的人來先看,涉及到python的基本數據類型、循環語句、條件語句、函數、類與對象、文件讀寫等很重要的基礎知識。
涉及到數據運算的話,其實基礎教程沒什麼應用,python各類包都幫你寫好了,最好的學習資料還是它的官方文檔,文檔中的不僅有API,還會有寫實例教程
pandas文檔
statsmodels文檔
scipy和numpy文檔
matplotlib文檔
TuShare文檔
第二,推薦《利用Python進行數據分析》,pandas的開發初衷就是用來處理金融數據的
三、回測框架和網站
兩個開源的回測框架
PyAlgoTrade - Algorithmic Trading
Zipline, a Pythonic Algorithmic Trading Library
『肆』 如何用python計算某支股票持有90天的收益率
defget(self,get,money):
print「ATM:」
print「yourmoneyis+「,self.get,」%aday
self.today=self.money*(self.get/100)+self.money
print「nowyouhave」,self.today
self.tomorrow=self.today*(self.get/100)+self.today
print「tomorrowyouwellhave」,self.tomorrow
get(50,10000)
這個代碼會給你1天後和2天後的余額,如果要顯示九十天,還請您自己打完
『伍』 怎麼學習python量化交易
下面教你八步寫個量化交易策略——單股票均線策略
1 確定策略內容與框架
若昨日收盤價高出過去20日平均價今天開盤買入股票
若昨日收盤價低於過去20日平均價今天開盤賣出股票
只操作一隻股票,很簡單對吧,但怎麼用代碼說給計算機聽呢?
想想人是怎麼操作的,應該包括這樣兩個部分
既然是單股票策略,事先決定好交易哪一個股票。
每天看看昨日收盤價是否高出過去20日平均價,是的話開盤就買入,不是開盤就賣出。每天都這么做,循環下去。
對應代碼也是這兩個部分
definitialize(context):
用來寫最開始要做什麼的地方
defhandle_data(context,data):
用來寫每天循環要做什麼的地方
2 初始化
我們要寫設置要交易的股票的代碼,比如 兔寶寶(002043)
definitialize(context):
g.security='002043.XSHE'#存入兔寶寶的股票代碼
3 獲取收盤價與均價
首先,獲取昨日股票的收盤價
#用法:變數=data[股票代碼].close
last_price=data[g.security].close#取得最近日收盤價,命名為last_price
然後,獲取近二十日股票收盤價的平均價
#用法:變數=data[股票代碼].mavg(天數,『close』)
#獲取近二十日股票收盤價的平均價,命名為average_price
average_price=data[g.security].mavg(20,'close')
4 判斷是否買賣
數據都獲取完,該做買賣判斷了
#如果昨日收盤價高出二十日平均價,則買入,否則賣出
iflast_price>average_price:
買入
eliflast_price<average_price:
賣出
問題來了,現在該寫買賣下單了,但是拿多少錢去買我們還沒有告訴計算機,所以每天還要獲取賬戶里現金量。
#用法:變數=context.portfolio.cash
cash=context.portfolio.cash#取得當前的現金量,命名為cash
5 買入賣出
#用法:order_value(要買入股票股票的股票代碼,要多少錢去買)
order_value(g.security,cash)#用當前所有資金買入股票
#用法:order_target(要買賣股票的股票代碼,目標持倉金額)
order_target(g.security,0)#將股票倉位調整到0,即全賣出
6 策略代碼寫完,進行回測
把買入賣出的代碼寫好,策略就寫完了,如下
definitialize(context):#初始化
g.security='002043.XSHE'#股票名:兔寶寶
defhandle_data(context,data):#每日循環
last_price=data[g.security].close#取得最近日收盤價
#取得過去二十天的平均價格
average_price=data[g.security].mavg(20,'close')
cash=context.portfolio.cash#取得當前的現金
#如果昨日收盤價高出二十日平均價,則買入,否則賣出。
iflast_price>average_price:
order_value(g.security,cash)#用當前所有資金買入股票
eliflast_price<average_price:
order_target(g.security,0)#將股票倉位調整到0,即全賣出
現在,在策略回測界面右上部,設置回測時間從20140101到20160601,設置初始資金100000,設置回測頻率,然後點擊運行回測。
7 建立模擬交易,使策略和行情實時連接自動運行
策略寫好,回測完成,點擊回測結果界面(如上圖)右上部紅色模擬交易按鈕,新建模擬交易如下圖。 寫好交易名稱,設置初始資金,數據頻率,此處是每天,設置好後點提交。
8 開啟微信通知,接收交易信號
點擊聚寬導航欄我的交易,可以看到創建的模擬交易,如下圖。 點擊右邊的微信通知開關,將OFF調到ON,按照指示掃描二維碼,綁定微信,就能微信接收交易信號了。
『陸』 用python怎麼做量化投資
我目前也在學習量化,現在在學習Python,還有一些具體的模型,太多了!沒事可以多交流
『柒』 股票交易盈利問題如何計算的
股票收益率是反映股票收益水平的指標。投資者購買股票或債券最關心的是能獲得多少收益,衡量一項證券投資收益大小以收益率來表示。反映股票收益率的高低,一般有三個指標:①本期股利收益率。是以現行價格購買股票的預期收益率。②持有期收益率。股票沒有到期,投資者持有股票的時間有長有短,股票在持有期間的收益率為持有期收益率。③折股後的持有期收益率。股份公司進行折股後,出現股份增加和股價下降的情況,因此,折股後股票的價格必須調整。
股票收益率(stock yield),是指投資於股票所獲得的收益總額與原始投資額的比率。股票得到了投資者的青睞,因為購買股票所帶來的收益。股票絕對收益率是股息,相對收益是股票收益率。
股票收益率=收益額/原始投資額
當股票未出賣時,收益額即為股利。
衡量股票投資收益水平指標主要有股利收益率、持有期收益率與拆股後持有期收益率等。
股票收益率指投資於股票所獲得的收益總額與原始投資額的比率。股票得到投資者的青睞,是因為購買股票所帶來的收益。股票的絕對收益率就是股息,相對收益就是股票收益率。
股票收益率=收益額/原始投資額
當股票未出賣時,收益額即為股利。
衡量股票投資收益的水平指標主要有股利收益率與持有期收益率和拆股後持有期收益率等。
1.股利收益率
股利收益率,又稱獲利率,是指股份公司以現金形式派發的股息或紅利與股票市場價格的比率其計算公式為:
該收益率可用計算已得的股利收益率,也能用於預測未來可能的股利收益率。
2.持有期收益率
持有期收益率指投資者持有股票期間的股息收入和買賣差價之和與股票買入價的比率。其計算公式為:
股票還沒有到期日的,投資者持有股票時間短則幾天、長則為數年,持有期收益率就是反映投資者在一定持有期中的全部股利收入以及資本利得占投資本金的比重。持有期收益率是投資者最關心的指標之一,但如果要將其與債券收益率、銀行利率等其他金融資產的收益率作一比較,須注意時間可比性,即要將持有期收益率轉化成年率。
3.持有期回收率
持有期回收率說的是投資者持有股票期間的現金股利收入和股票賣出價之和與股票買入價比率。本指標主要反映其投資回收情況,如果投資者買入股票後股價下跌或操作不當,均有可能出現股票賣出價低於其買入價,甚至出現了持有期收益率為負值的情況,此時,持有期回收率能作為持有期收益率的補充指標,計算投資本金的回收比率。其計算公式為:
4.拆股後的持有期收益率
投資者在買入股票後,在該股份公司發放股票股利或進行股票分割(即拆股)的情況下,股票的市場的市場價格及其投資者持股數量都會發生變化。因此,有必要在拆股後對股票價格及其股票數量作相應調整,以計算拆股後的持有期收益率。其計算公式為:(收盤價格-開盤價格)/開盤價格股票收益率的計算公式 股票收益率= 收益額 /原始投資額 其中:收益額=收回投資額+全部股利-(原始投資額+全部傭金+稅款)
當股票未出賣時,收益額即為股利。
衡量其股票投資收益水平指標主要有股利收益率及持有期收益率及其拆股後持有期收益率等。
股利收益率 股利收益率,又稱獲利率,是指股份公司以現金形式派發的股息或紅利與股票市場價格的比率。
股票持有期收益率 持有期收益率指投資者持有股票期間的股息收入與買賣差價之和與股票買入價的比率。
股票持有期回收率 持有期回收率是指投資者持有股票期間的現金股利收入與股票賣出價之和與股票買入價的比率。該指標主要反映投資回收情況,如果投資者買入股票後股價下跌或是操作不當,均有可能出現股票賣出價低於買入價,甚至出現持有期收益率為負值的情況,此時,持有期回收率可作為持有期收益率的補充指標,計算投資本金的回收比率。
拆股後的持有期收益率 投資者在買入股票後,在該股份公司發放股票股利或進行股票分割(即拆股)的情況下,股票的市場的市場價格和投資者持股數量都會發生變化。因此,有必要在拆股後對股票價格和股票數量作相應調整,以計算拆股後的持有期收益率。
本收益率可用於計算已得的股利收益率,也可用預測將來可能的股利收益率。
股票沒有到期日,投資者持有股票的時間短則幾天,長則數年,持有期收益率就是反映投資者在一定的持有期內的全部股利收入和資本利得占投資本金的比重。持有期收益率是投資者最關心的指標,但如果要將它與債券收益率、銀行利率等其他金融資產的收益率作比較,須注意時間的可比性,即要將持有期收益率轉化為年率。
在投資決策時的股票收益率計算公式:
假設股票價格是公平的市場價格,證劵市場處於均衡狀態,在任一時點證劵的價格都能完全反映有關該公司的任何可獲得的公開信息,而且證劵價格對新信息能迅速做出反應。在這種假設條件下,股票的期望收益率等於其必要的收益率。
而股票的總收益率可以分為兩個部分:第一部分:D1/P0 這是股利收益率。解釋為預期(下一期)現金股利除以當前股價,那下一期股利如何算呢,D1=D0*(1+g).第二部分是固定增長率g,解釋為股利增長率,由於g與股價增長速度相同,故此g可以解釋為股價增長率或資本利得收益率。也可以用天字一號量化交易系統。
舉個例子來說明:股價20元,預計下一期股利1元,該股價將以10%速度持續增長
則:股票收益率=1/20+10%=15%
這個例子中的難點是10%,她就是g,g的數值可根據公司的可持續增長率估計,可持續增長率大家應該都知道了吧。g算出後,下一期股利1元也是由她算出的,公式上面已經列出。有了股票收益率15%,股東可作出決定期望公司賺取15%,則可購買。
『捌』 怎麼用python計算股票
作為一個python新手,在學習中遇到很多問題,要善於運用各種方法。今天,在學習中,碰到了如何通過收盤價計算股票的漲跌幅。
第一種:
讀取數據並建立函數:
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
總結:python是一種非常好的編程語言,一般而言,我們可以運用構建相關函數來實現自己的思想,但是,眾所周知,python中裡面的有很多科學計算包,裡面有很多方法可以快速解決計算的需要,如上面提到的pandas中的pct_change()。因此在平時的使用中應當學會尋找更好的方法,提高運算速度。
『玖』 如何用Python和機器學習炒股賺錢
相信很多人都想過讓人工智慧來幫你賺錢,但到底該如何做呢?瑞士日內瓦的一位金融數據顧問 Gaëtan Rickter 近日發表文章介紹了他利用 Python 和機器學習來幫助炒股的經驗,其最終成果的收益率跑贏了長期處於牛市的標准普爾 500 指數。雖然這篇文章並沒有將他的方法完全徹底公開,但已公開的內容或許能給我們帶來如何用人工智慧炒股的啟迪。
我終於跑贏了標准普爾 500 指數 10 個百分點!聽起來可能不是很多,但是當我們處理的是大量流動性很高的資本時,對沖基金的利潤就相當可觀。更激進的做法還能得到更高的回報。
這一切都始於我閱讀了 Gur Huberman 的一篇題為《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的論文。該研究描述了一件發生在 1998 年的涉及到一家上市公司 EntreMed(當時股票代碼是 ENMD)的事件:
「星期天《紐約時報》上發表的一篇關於癌症治療新葯開發潛力的文章導致 EntreMed 的股價從周五收盤時的 12.063 飆升至 85,在周一收盤時接近 52。在接下來的三周,它的收盤價都在 30 以上。這股投資熱情也讓其它生物科技股得到了溢價。但是,這個癌症研究方面的可能突破在至少五個月前就已經被 Nature 期刊和各種流行的報紙報道過了,其中甚至包括《泰晤士報》!因此,僅僅是熱情的公眾關注就能引發股價的持續上漲,即便實際上並沒有出現真正的新信息。」
在研究者給出的許多有見地的觀察中,其中有一個總結很突出:
「(股價)運動可能會集中於有一些共同之處的股票上,但這些共同之處不一定要是經濟基礎。」
我就想,能不能基於通常所用的指標之外的其它指標來劃分股票。我開始在資料庫裡面挖掘,幾周之後我發現了一個,其包含了一個分數,描述了股票和元素周期表中的元素之間的「已知和隱藏關系」的強度。
我有計算基因組學的背景,這讓我想起了基因和它們的細胞信號網路之間的關系是如何地不為人所知。但是,當我們分析數據時,我們又會開始看到我們之前可能無法預測的新關系和相關性。
如果你使用機器學習,就可能在具有已知和隱藏關系的上市公司的寄生、共生和共情關系之上搶佔先機,這是很有趣而且可以盈利的。最後,一個人的盈利能力似乎完全關乎他在生成這些類別的數據時想出特徵標簽(即概念(concept))的強大組合的能力。
我在這類模型上的下一次迭代應該會包含一個用於自動生成特徵組合或獨特列表的單獨演算法。也許會基於近乎實時的事件,這可能會影響那些具有隻有配備了無監督學習演算法的人類才能預測的隱藏關系的股票組。
『拾』 怎麼用python panda 算股票市場收益率
1.收集數據,開盤價,收盤價,交易量
2.用pandas處理數據,處理缺失值
3.用股票收益率的公式帶入
說白了,pandas只是個好用的工具,方法都是一樣的,只是效率問題
有多少人工,就有多少智能