Ⅰ 使用python做量化交易策略測試和回驗,有哪些比較成熟一些的庫
量化交易大多用在股票交易上,量化是指將某隻股票或者摸個行業的數據進行量化,在更具各家機構自己的量化公式進行選擇,量化交易只是選擇,並不涉及交易
程序化交易也是一種量化交易,但是是更具已有的數據進行,比如各種行情指標,MACD KDJ等,無法像量化交易那樣把能涉及到的所有數據進行量化,程序化交易更側重交易的自動進行,沒有認為干預,且模型編寫簡單,個人用戶也可以進行!
Ⅱ 用Python怎麼做量化投資
r語言和Python都可以做量化投資分析,在此功能上沒有太大的區別。讓語言和Python主要區別是,他們是不同的兩個軟體,就好比excel和wps的區別。
Ⅲ Python 與 Matlab 哪一個對量化投資和分析更有幫助
python是語言,matlab是工具,這倆不該放在一起比對
做投資分析顯然是matlab的優勢,其他數學工具也沒有matlab好,用它沒錯
Ⅳ 量化投資中用python主要是負責什麼
python作為一門編程語言,簡單說它在量化投資主要是進行量化策略模型的編譯。
Ⅳ 求Python量化交易投資課程學習
我這有幾本基礎的入門Python的書籍,想要的可以私信我
Ⅵ 用python怎麼做量化投資
我目前也在學習量化,現在在學習Python,還有一些具體的模型,太多了!沒事可以多交流
Ⅶ Python和金融分析的關系量化交易內容深度
Python是一種腳本語言,就是程序員用的代碼語言。
Python的功能不可以說不大,在金融數據分析裡面有著很方便的應用。
但是需要你專門去學Python,不然看到一堆代碼只會懵逼。
Ⅷ 量化投資 用python好 還是c++
Python是非常適合做quant類工作的語言,本身就是科學計算方面的統治級語言,現在加入了IPython,pandas等重量級神器,為Quant類工作量身定做,而且仍在飛速發展中,以後會越來越重要。
關於其他語言,首先介紹一下我自己最喜歡的一個比較小眾的組合,Mathematica+Java/Scala。 Mathematica的優點在於:本身提供函數式的編程語言,表達能力非常強大,比如Map/Rece是標配,很多時候不需要去做煩人的for循環或下標控制,排版經常可以直接照數學公式原樣輸入,即直觀又不容易寫錯;代碼和輸出混排的排版方式使得建模時的演算和推理過程非常流暢,甚至還可以直接生成動畫,對於找直觀理解非常有幫助(這幾點分別被IPython和R偷師了一部分)。Mathematica的缺點在於對金融類的時間序列數據沒有很好的內建支持,使得存儲和計算都會比較低效,因此需要用內嵌Java的方式來補足,對於數據格式或性能敏感的操作都可以用Java/Scala實現。這個組合在我心目中無出其右,不論是快速建模,還是建模轉生產,都遠遠領先於其他選擇。但Mathematica的商用授權很貴,如果公司本身不認可的話很難得到支持,這是最致命的缺陷。另外隨著Python系的逐漸成熟,領先優勢在逐漸縮小,長遠看Python的勢頭更好一些。
其他答案里也列舉了不少其他語言,我自己既做Quant的工作,也做軟體開發的工作,這里想從一個軟體工程師的角度,說說我的理解。平時工作中會和一些偏Quant背景的人合作,很容易發現建模能力好的人往往在計算機方面基礎比較薄弱(因為以前的訓練重點不在這里)。他們也可以快速學習掌握一種像C++,Java這樣的語言,實現很多必要的功能。但是一方面這些語言陡峭的學習曲線和繁瑣的開發步驟會給他們真正要做的工作增加不必要的負擔,另一方面一旦涉及到性能敏感的情景,他們對計算機體系結構缺乏理解的缺點就容易暴露,比如說很可能他們沒有計算復雜度,內存碎片,cache miss,甚至多線程等概念,導致寫出的程序存在相當大的隱患。
即使是計算機功底扎實,如果每天的工作需要在C++,Python,R/Matlab,甚至一眾腳本語言之前來回切換,思維負擔也會非常重,人的精力是有限的,很難同時兼顧數學建模和底層代碼調試這種差距巨大的工作。長期發展下去最可能的結果就是要麼遠離建模,專心做生產環境開發,要麼遠離生產環境,專心建模。這種局面顯然不論對個人還是團隊都是有很大弊端的。
如果深入思考這個問題,相信不難得出結論,對於Quant來說,C++這種相當面向機器的語言肯定不是最佳選擇。的確在歷史上,它比更面向機器的C已經友好了很多,但是在計算機技術飛速發展的今天,如果還需要Quant大量使用C++做建模類的工作顯然是很遺憾的事情。設想一下你拿到一份股票數據,不論你是想分析價格走勢,成交量分布,還是波動性,第一件要做的事一定是畫出圖來看看,有一個直觀認識。如果你的工具是C++,肯定有很多時間花在編譯,調試,再編譯的過程上,好容易能解析文件了,接下來怎麼算移動平均?怎麼算波動性?全都要自己寫代碼。再然後怎麼畫圖?這整個工作流簡直慘不忍睹,這些問題浪費掉你大部分精力,而他們全部和你真正感興趣的工作毫無關系。所以如果你是一個數理金融等背景的新人打算開始Quant生涯,在決定是否要投資到這項重量級技術上時需要慎重,即便它目前的市場定價可能仍在峰值。相比之下我認為Python會是更理想的選擇,即能很好的完成建模工作,也可以訓練一定的編程技巧,使你在必要時也能勝任一些簡單的C++工作。
最後同意 @袁浩瀚,不要拘泥於語言,不論學習那一種,對其他的語言還是要抱有開放的心態。另外世界變化很快,你會發現單一的語言分類方式其實是沒有意義的,每一門語言在發展過程中都會逐漸吸收其他語言的特性,比如Python本身就既有C/C++/Java那樣命令式的特點,也有函數式的特點,像pandas甚至還提供類似SQL的使用方式,在其他語言或系統里也都或多或少包含了不同的特點,可以在學習過程里慢慢體會。
Ⅸ 怎麼學習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的量化代碼怎麼用到股市中
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