『壹』 做量化交易一般用什麼軟體
需要懂一些數學模型,比如統計分析、人工智慧演算法之類的,他的本質是利用數學模型分析數據潛在的規律尋找交易機會,並利用計算機程序來搜尋交易時機以及完成自動化交易。並沒有現成的軟體可以做這個,因為它需要一個搭建一個專業的平台,這不是一個人可以完成的。
國內有一些軟體,比如大智慧提供數量分析,還有一些軟體提供股票、期貨的程序化交易。但是實際上這並不是真正意義上的量化交易。事實上,做一款純粹的適合個人投資者的量化投資軟體,難度是非常大的,因為量化策略並不想傳統的基本面、技術面那樣存在已有既定的必然規律。他需要跨越多學科,多領域去挖掘數據的規律,然後利用得出的規律進行交易。但是不同時間、空間的數據的潛在規律並不一致,所以對量化過程進行標准化是一件很難完成的事情。
如果是計算機或者數學專業的人士,可以考慮使用C、C++、SQL等語言,其他的可以使用MATLAB/SAS 等軟體。不管是哪一種軟體,要實現量化交易,肯定是需要一定的建模基礎和編程基礎的,其中最重要的東西是數學能力。
『貳』 什麼是α,β收益,量化投資的策略創建與分析
α收益:一攬子可以自定義低估、同質化並且有波動的股票,不斷買入更便宜的,賣出更貴的,從而獲得的收益。
例如:幾個跟著滬深300的ETF,你發現手中持有的滬深300ETF溢價2%了,而市場上同時存在一個折價1%的ETF,那麼就賣出溢價高的滬深300ETF,去買折價的,這樣雖然始終持有滬深300ETF,但獲得了超越滬深300指數本身的收益,就是α收益。
解釋一下同質化:明顯所有的滬深300ETF是同質化的,也可以認為最小市值20個股票是同質化的,所有銀行股是同質化的,分級A是同質化的。下文中有解釋自定義低估。
β收益:基本面本身上漲是β收益。
例如,自定義最小市值的10個股票為一個指數,這些最小市值從5億漲到20億,這就是β收益。自定義最低股價10個為一個指數,從牛市的5元跌到2元,那麼β收益就是負的
量化策略創建三個步驟:
策略的理論基礎
歷史回測
找到策略黑天鵝。
(一)策略的理論基礎:(大致分為三類):
基本面理論
按基本面又可以分為:1.價值型;2.成長型;3.品質型;按中國特色A股基本面又可以添加;4.小市值型;5.股價型
技術面理論
按技術面又可以分為:1.趨勢型,2.趨勢反轉型,3.縮量反彈,4.指數輪動,5.擇時
風險套利
風險套利(或者稱輪動):不斷買入更便宜的,賣出更貴的。
注意:
有些理論基礎並不牢固,並且不能很好解釋(這也導致了各種投資流派互相不服)
有些量化跳過了理論基礎,直接根據歷史統計進行量化(本文不討論),例如,統計兩會前後漲跌,一季度歷史表現最好板塊
對策略理論的解釋:
基本面策略可以定義什麼是低估,比如低PE是低估,低市值是低估,低股價是低估,高ROE是低估,高成長是低估;也可以自定義低估,PB*PE是低估,總市值*流通市值小是低估
基本面理論提供了一攬子同質化並且有波動的股票。有些基本面策略的股票間波動較小,例如最低PE股,一段時期內總是那麼幾個銀行股;有些波動較大,比如小市值型
技術面理論有些很難定義什麼是低估,比如趨勢型;有些則看似可以定義低估,例如,BIAS最小,20日跌幅最大,其實也不是
能自定義低估的策略是風險套利,不能自定義低估的策略是統計
基本面本身能上漲,就獲得了β收益
我得出的結論是:風險套利策略的核心是對自定義低估的輪動,即不斷獲得α收益!!
如何獲得α收益:大部分基本面策略的收益是因為風險套利獲得的;也就是不斷買入更低估的,賣出更貴的;也就是因為調倉周期內因不同股票的波動而產生收益,因此適當縮短周期有利於提高收益;所以在一年內交易次數越多,alpha收益越大(投資大師說的減少交易次數,並不適用於套利)
理論本身獲得的β收益並不多,甚至為負(價值型由於近幾年市場估值不斷降低,不調倉的話,收益是負的)
我們應當尋找的是:基本面理論本身能上漲,且能提供同質化,波動較大的策略(即獲得α,又獲得β)
統計策略其內在邏輯說服力小,是過去的概率來預測未來
(二)歷史回測:回測中最重要一點是:不要欺騙自己
歷史回測中要用到一個哲學思想,叫做奧卡姆剃刀:較簡單的理論比復雜的理論更好,因為它們更加可檢驗
改變測試起始時間。調倉周期超過2天的策略,應該試遍每個起始時間,取平均收益,這才最接近策略真實歷史回測,因為理論上起始時間變化一兩天對策略收益影響是不大的,如果變化很大就說明過度優化。
不要創建靜態股票池。歷史上每個階段都有大牛股,完全可以收集大牛股作為股票池,算好調倉周期,每個階段買最牛的,收益可以美到不敢想像
不要用PE.PB等指標精確逃頂抄底,最多用來確定一個大致范圍。每次大頂點位都是不同的,這樣的擇時毫無意義。
先用25個以上股票測試,確定策略有效性,再減少數量做策略,如果25個測試無效,那麼一兩個即使收益很好,也該放棄。
改變條件權重。如果稍微改變權重,收益變化很大,那麼就降低策略未來預期收益,別指望策略以後會表現這么好。
盡量從07年開始測試。除非你能確定每個時間市場的風格,顯然這是不可能的。
同一套擇時系統,如果用在策略1上回撤是30%,用在策略2上回撤是15%,你肯定會選擇策略2,如果策略1和2本質上是差不多的策略,別太高興,在未來,策略1和2表現誰好誰壞也是難說的
(三)找到黑天鵝:每個策略都有黑天鵝
價值型,成長型,品質型策略,黑天鵝是過一個季度,可能財務數據完全變了,因此持倉個數不能太少,行業要分開
小市值,低價,低交易額策略,黑天鵝是出現仙股
統計類,技術類策略,黑天鵝是理論本身就不完美
『叄』 制定了一個策略,比如5日線上穿10日線做多,反之賣出。那麼怎麼在同花順或通達信軟體上進行回測
股票操作還是以資金核心為主,無論市場消息滿天飛,莊家機構一般都是提前就獲知這些,對於我們散戶而言不如直接了當的跟庄走,莊家資金怎麼做我們怎麼做,比如我個人使用的是恆陽財經網的恆陽證券行情軟體機構版,我平時的選股賣股的過程是這樣的:第一步,設定好莊家大資金抄底活動頻繁的條件,自動篩選出符合這些資金條件股票,第二步,同時再設置好技術性支撐壓力的條件,篩選出符合條件的股票,第三步,在最終兩次篩選獲得的即符合莊家資金抄底完畢,且技術形成支撐的股票,第四步,為數不多的這些篩選好的股票中,打開5分鍾周期,看它們在5分鍾周期內有沒有庄大資金暗中抄底的股票,因為股票漲停或大漲之前比定在前3天內一般1天左右會有庄大資金暗中抄底,如果篩選的股票池中有符合5分鍾周期出現庄大資金暗中抄底的股票,全部保留,第五步,在保留的股票中選擇前期漲幅、振幅都比較活躍的,這樣當天或次日買入以後的股票漲起來才穩才快,漲幅也大,這樣雖然比較保守,但安全性相對更高一些,收益也相對更大一些。說白了,買股票就是另類投資,凡是投資就需要降低風險,增大收益性,上面的選股過程就是這個思路。個人意見僅供參考,希望對你有所幫助吧,如果有幫助就麻煩給分吧,謝謝!
『肆』 小妮選股股票池收 益好嗎
小妮選股裡面的小妮金股收益不錯,出短期內具有爆發力的金股,回測穩定勝率>60%,周平均收益高達3%,在78個交易日內累計收益超過48%
『伍』 想問一下阿法的金融都有些什麼業務呀
主要業務有三方面:智能預測—交易日實時預測大盤漲跌;智能選股—交易日實時推送短線股票池;定製量化選股策略,並支持策略的歷史回測;智能搜索—搜索板塊、股票及財經事件相關的股票。
『陸』 量化交易員是策略研發要求高還是交易要求高
在整個量化交易策略的研發流程當中,買和賣是最為基本的量化交易策略組成部分,而這個部分的設定主要與收益情況相關。這里所說的相關,具體分為兩種不同的情形,一種是總體的關聯性,即基於買點、賣點的選擇,買賣策略應該得到一個正的整體收益。另一種則來自於對交易資產未來收益的判斷、或者說預測,即判斷交易資產的未來收益為正時,就買入資產;判斷交易資產的未來收益為負時,則賣出或賣空資產。實際操作中,這兩種關聯關系的情況可能更為復雜一些。有的時候,買和賣的具體操作也可能受到風險方面設置的影響,例如為了限制單次交易的最大損失而採取止損之類的操作時,用於清倉的買賣設置就會相應的變動,這也是作者將風險和買賣用虛線相連的原因。不過在大部分情況下,買賣這一最為基本的組成部分還是與收益的關系最大,研究者也應該在研發這一個組成部分時,著重考慮收益情況的具體影響。
對量化交易策略風險的控制可能會影響到量化交易策略中的買賣設置,但是在更普遍的情況下,風險這一因素主要影響的是交易倉位的設置。當然,前提條件還是需要買賣策略的總體收益為正,在這樣的條件下再結合倉位的設置,才能夠在合適的風險水平下取得達到要求的收益。通過對交易資產具體倉位的調整,交易者可以比較直接的控制單次交易以及整個交易策略的風險水平。例如在滿倉交易的情況下,定量的判斷了當前交易的風險之後,覺得風險過大無法承受,那麼最為直接的處理方法就是在滿倉的基礎上相應的降低倉位的大小。在倉位降低之後,對於整體資金而言風險也就隨之降低了。由於倉位本身具有量化、直觀的特性,因此當交易者希望將風險處理到一個特定的水平時,調整倉位是一個比較方便的手段。
需要說明的是,前面已經提到了買和賣是量化交易策略最為基本的組成部分,實際上倉位的設定是根據買賣決策和風險兩個因素共同形成的,不建立在買賣之上的倉位選擇是空洞沒有意義的。此外還有一個更為極端的情況,倉位的正確設定有助於進一步優化策略的整體收益,之後要介紹的凱利公式的意義正在於此。在圖1中由買賣到倉位的箭頭,實際上可以看作是收益、買賣這一個整體部分指向倉位的箭頭。不過在實際使用中,凱利公式所導出的倉位設定往往過於偏激,超過正常風險控制下的最高倉位值,因此倉位仍然與風險的關系更為緊密。
在圖1這個較為鬆散的量化交易策略研發流程中,交易成本是和買賣以及倉位具有同等地位的組成部分。在實際操作中,就是首先基於對收益和風險的判斷得出合適的買賣和倉位選擇,然後在買賣和倉位共同組成的量化交易策略當中考慮交易成本,也就是在建立倉位和退出倉位等操作中扣除所需要承擔的交易成本。隨後再次判斷該量化交易策略所代表的收益和風險情況,只有這兩個因素仍然在接受范圍之內,才能確認這是一個可行的量化交易策略。雖然最後用來執行的組成部分只有買賣和倉位,但是交易成本作為對量化交易策略的一個實際化修正,也是策略研發流程中一個不可或缺的組成部分。
上面提到的對量化交易策略收益和風險情況的判斷,實際上是一個綜合性的評價問題。一個最為重要的參考依據應該是策略在整個交易過程中的凈值走勢,通過對策略凈值走勢的分析,就可以建立起該量化交易策略運行情況的全面判斷。但是凈值走勢本身由於細節過多,因此無法簡單的用來進行策略之間的橫向對比。這時就需要精煉凈值走勢中所包含的信息,選取合適的部分形成量化的評價指標,從而進行量化交易策略的進一步判定。就作者看來,評判一個策略的標准中最重要的仍然是策略在整個交易過程下的收益情況,一個負收益的量化交易策略根本無需考慮其風險即可排除。而當收益為正時,再結合風險的度量進行具體的取捨,就可以直觀的給出量化交易策略是否合格的評判標准了。作者心目中最重要的風險指標是策略凈值的回撤水平,在後面的案例分析中也會重點查看回撤的結果。
於此同時,一些量化交易策略在進行收益和風險情況的判斷時,僅僅針對策略自身的凈值走勢進行研究是不夠的,給出一個合理的基準來進行對比往往是更為有效的判別方法。例如後面的案例中會涉及到的量化選股策略,當交易選擇僅限為對具體的股票進行持倉,而不考慮空倉或者賣空時,選取一個特定的基準進行對比就會是一個更為有效的判別方法。這主要是由於量化選股策略的倉位始終為多頭,因此不論如何配置,策略所持倉位都含有資本資產定價模型中所提到的市場成分。而選股策略本身的意義在於選擇更好的股票、不在於獲取市場收益,因此將市場走勢作為對比、或者在策略收益中剔除掉市場成分就是一個更合理的做法。
上述所有的操作,都需要建立在對歷史數據的分析之上,在量化交易領域當中一般稱之為回溯測試,或者簡稱回測。所謂回溯,也就是將交易的過程在歷史數據上復現一遍,這裡麵包含了一個假設,即歷史數據在量化交易策略中展現出的樣本特徵在未來的交易中依然存在,否則回溯測試就失去了意義。關於這一假設的分析其實在諸多技術分析著作中均有涉及,一般被稱為「歷史會重演」,這里不再繼續展開。不同於傳統技術分析的是,量化交易策略的研發過程更加深入具體,在涉及到策略的參數設定、模型設置等具體問題時,需要採用數量化的方法、也就是最優化等技術手段進行解決。例如如何設置買點和賣點可以使得相應的總體收益最大等等,都是很典型的最優化數學問題,那麼找到合適的最優化技術和演算法並加以應用,就能夠確定量化交易策略的最終形式,用以進行實際交易。
圖1中所展示的是一個較為鬆散的一般性框架,用來總領性的說明量化交易策略的基本研發流程。在具體的策略研發過程中,這個框架經常會因為具體研發設置和策略設置的不同而產生變化。例如當量化交易策略的主要作用不是在時間軸上選擇具體的買賣時點,而是在同一個時間點上對多個資產進行選擇和配置時,圖1中的一些說明就顯得有些含混不清。量化選股策略就是這一類策略中最為常見的形式,因此這里在整體框架不變動的情況下,針對圖1進行了文字上的調整,用以說明量化選股策略的運行框架與研發流程。當然,使用選股策略的框架體系來處理多個資產甚至多個策略的挑選、配置也是可以的,在不復雜的情況下只需要稍作聯想即可。
買賣和倉位雖然是更為通用的說法,但是更適合於描述擇時策略,放在選股策略的研發框架中會顯得比較突兀,因此圖2將買賣換成了選股,倉位則換成了配比,這樣更容易讓讀者領會該研發流程的含義。實際上,對於每一期的選股而言,如果選擇了原先沒有倉位的股票,那麼對應的操作就是買入該股票,如果已經建倉的股票沒有被選入這一期的股票池,那麼對應的操作就是賣出該股票。而配比則是在買賣的基礎上,通過倉位大小的變化來實現具體配置。因此,選股和配比實際上可以算作是買賣和倉位選擇的特殊情況,只是這種說法更為貼合量化選股策略本身。
略有不同的,是風險在量化選股策略研發流程中的具體含義。由於選股策略的倉位操作涉及到多個股票之間的配比問題,因此這里的風險不僅包括單支股票的風險,也涉及到多支股票之間的風險程度,後一種風險一般採用股票收益之間的相關性來進行描述。例如在一般性的最優投資組合理論當中,經常使用協方差矩陣來刻畫整個資產組合的風險水平。雖然從實際情況來看,相關性這一度量方式與風險的直觀感受之間有一定的差距,但是在多資產環境下,一般都將資產間的相關性視為風險的來源之一,這是一個偏學術的、約定俗成的做法。
上面的例子是針對選股策略進行的文字上的變動,實際上量化交易策略研發流程的變化更多來自於各個研發組成部分不同的結合方式。而不同的結合方式,對應的是策略研發過程中不同的目標和需求。例如圖1所介紹的鬆散的研發流程,是在確定好買賣行為和倉位設定之後,再針對實際交易中所產生的交易成本進行二次測試。這樣的做法雖然簡便易行,但是忽視了交易成本本身對於收益的影響,以及更進一步對於買點和賣點的影響。因此,在確定買賣設置的步驟中就考慮交易成本的影響,應該是一個更貼近於實際的研究框架。圖3給出了相應的流程刻畫,如圖所示,在判斷收益因素時,同時考慮交易成本對於收益的影響,從而優化出更為實際的買賣設置。再根據相應的風險控制,結合買賣點的選擇,得出最後的倉位設置。在確定了買賣和倉位這兩個部分之後,就獲得了一個完整的量化交易策略。
圖4給出了一個更緊湊、更貼合實際操作的量化交易策略研發流程。在該流程中,買賣和倉位的設置是同時作為參數進行優化的,優化的目標函數也進行了唯一化,即量化交易策略的風險調整後收益。而在確定需要優化的目標函數時,交易成本也如同上一個研發流程一樣同時被考慮進去,從而保證買賣和倉位優化結果的准確性。毫無疑問,相較於上面所涉及到的研發流程、特別是圖1中較為鬆散的研發流程,該量化交易策略研發流程的各個組成部分更為緊密,因此在優化過程中所產生的與實際操作的偏離也就越小,買賣和倉位設置的准確度也就更高。但是在實際工作中,如果想參照這一流程進行研發,那麼就需要比較強的計算能力,數據量的大小也要達到一定要求,同時優化方法和目標函數的設定要能夠同時覆蓋買賣和倉位的所有參數,因此往往也只有極為簡單的策略思路可以採用這樣的流程框架進行研發。
在實際的量化交易策略相關工作中,研發只是整個工作流程的一部分,還有兩個組成部分需要著重強調。基於此,圖5在圖1所示的研發流程的基礎上給出了一個更為完整的工作流程。如圖所示,需要增加的部分包括處於研發過程之前的數據准備工作以及處於研發過程之後的策略執行工作。這兩項工作與前面所論述的研發流程具有很強的邏輯關聯性與內在依賴性,三者結合起來形成的一個整體,基本上可以涵蓋量化交易策略具體工作的絕大部分內容。
首先論述數據准備的工作,循著圖5中的箭頭可以看到,在量化交易策略的整體工作中,既要為研發過程准備相應的研究數據,也要為策略執行准備相應的實時數據。在研究數據方面,由於尋找合適的量化交易策略需要不斷重復研發流程,因此對於數據的要求更偏重於准確性和覆蓋能力。同時,對數據的清洗和轉換也是一項重點工作,在大部分的數據科學研究、包括量化交易策略的研發當中,數據特徵的合理抽取對於整體效果提升的重要性有時甚至要高於精巧的模型,當然很多時候數據的轉換和模型的構造是相互融合的,針對具體情況應當採取具體的分析和處理。而在策略執行數據方面,則更應該關注於數據獲取的及時性。至於數據的清洗和變換,只需要完全復制研發得到的量化交易策略下的數據准備工作即可。另外,為了保證數據的及時性,最終進行的數據清洗工作對時間消耗存在一定的要求。
然後討論策略執行的工作。策略執行,是在量化交易策略研發完成之後,最終產出實際效能的組成部分。執行時應該遵循盡量貼近研發完成的量化交易策略的原則,與量化交易策略所確定的買賣、倉位等設置盡可能的保持一致,這樣才能最真實的反映出前面量化交易策略的研發結果。同時,策略執行的結果也可以用來反向支持具體的研發流程,通過對策略執行所得到的收益、風險情況的判斷,實時的重新進行研發,對量化交易策略進行修改,從而使得策略能夠及時的得到現實的反饋,增強自身的穩健程度。值得一提的是,後面將要介紹的推進分析是一種模擬策略執行的回溯測試技術,讀者可以在運行推進分析時有限度的了解到量化交易策略實際執行時的種種狀態。
『柒』 股票如何做資金流模型
在市場中,經常存在交易性機會,這是指股價在短期內可能受到某些消息的影響,或者某些市場內在因素的改變從而產生劇烈波動帶來的價差投資機會。其中,一個典型的交易性策略就是資金流模型,該模型使用資金流流向來判斷股票在未來一段時間的漲跌情況,如果是資金流入的股票,則股價在未來一段時間將可能會上漲;如果是資金流出的股票,則股價在未來一段時間可能會下跌,那麼,根據資金流向就可以構建相應的投資策略。
基本概念資金流是一種反映股票供求關系的指標。傳統的量價無法區分市場微觀結構中的流動性和私有信息對股價的影響,而根據委託測算的資金流,能夠有效地觀察微觀市場交易者的真實意圖及對股價造成的影響。資金流定義如下:證券價格在約定的時間段中處於上升狀態時產生的成交額是推動指數上漲的力量,這部分成交額被定義為資金流入;證券價格在約定的時間段中下跌時的成交額是推動指數下跌的力量,這部分成交額被定義為資金流出;若證券價格在約定的時間段前後沒有發生變化,則這段時間中的成交額不計入資金流量。策略模型1.逆向選擇理論在非強勢有效的A股市場,普遍存在信息不對稱的問題。機構投資者與散戶投資者在對同一信息的評估能力上存在差異。在大部分情況下,散戶投資者缺乏專業的投資能力和精力,那麼根據「搭便車」理論,希望藉助機構投資者對股價的判斷進行投資。一旦機構投資者率先對潛在市場信息做出反應,羊群效應的散戶投資者則追漲殺跌,往往導致在很多情況下市場對潛在信息反應過度。這樣根據逆向選擇理論,能夠准確評估信息價值的投資者便會對反應過度的股價做出交易,買入低估的、賣出高估的股票,從而糾正這種信息反應過度行為。根據市場對潛在信息反應過度的結論及市場投資者的行為特徵,可以採取逆向選擇模型理論來構建選股模型,即賣出前期資金流入、價格上漲的股票,買入前期資金流出、價格下跌的股票。按照這個思路,對一些指標參數進行回測分析,可以得到穩定的選股模型。2.策略模型根據資金流各種指標的特點,在選股模型中採用比較簡單的方法,即以指標排序打分的方式來篩選股票。首先通過對各個資金流指標進行排序打分,然後將股票對各個指標的得分進行求和,最後以總得分值大小來篩選股票,具體步驟如下:(1)確定待選股票池。在選擇組合構建時,剔除上市不滿一個月的股票,剔除調倉期漲跌停及停牌的股票,防止因漲/跌停無法交易。剔除信息含量小於10%的股票,因為這部分股票信號不明顯,無法取得有效信息。(2)構建股票組合。①指標打分:首先將待選股票池中的股票按照資金流指標進行排序,然後採用百分制整數打分法進行指標打分,即以股票在各個指標中所處位置的百分數作為股票對於該指標的得分,前1%得分為1,依次遞減,最後1%得分為100。②求和排序:將股票相對於各個指標的得分進行求和,將和值從小到大排序,進行分組比較;另外,選擇排名靠前的N只股票構建組合。③股票權重:採用等量權重。(3)組合定期調整,調整時間從1到3個月不等。持有到期後,利用更新後的指標數據重新確定待選股票池,重復步驟(2)打分求和過程,並將股票按照指標得分從小到大排序,將原來分組中跌出組合的股票剔除,調進新的股票,同時將新組合內樣本股的權重調整到相等。(4)統計檢驗。分別計算各組合的收益率情況,考察組合的效果。
『捌』 如何用python實現Markowitz投資組合優化
多股票策略回測時常常遇到問題。
倉位如何分配?
你以為基金經理都是一拍腦袋就等分倉位了嗎?
或者玩點玄乎的斐波拉契數列?
OMG,誰說的黃金比例,讓我看到你的腦袋(不削才怪)!!
其實,這個問題,好多好多年前馬科維茨(Markowitz)我喜愛的小馬哥就給出答案——投資組合理論。
根據這個理論,我們可以對多資產的組合配置進行三方面的優化。
1.找到有效前沿。在既定的收益率下使組合的方差最小。
2.找到sharpe最優的組合(收益-風險均衡點)
3.找到風險最小的組合
跟著我,一步兩步,輕松實現。
該理論基於用均值和方差來表述組合的優劣的前提。將選取幾只股票,用蒙特卡洛模擬初步探究組合的有效前沿。
通過最大Sharpe和最小方差兩種優化來找到最優的資產組合配置權重參數。
最後,刻畫出可能的分布,兩種最優以及組合的有效前沿。
註:
文中的數據API來自量化平台聚寬,在此表示感謝。
原文見【組合管理】——投資組合理論(有效前沿)(包含正態檢驗部分)
0.導入需要的包
import pandas as pd
import numpy as np
import statsmodels.api as sm #統計運算
import scipy.stats as scs #科學計算
import matplotlib.pyplot as plt #繪圖
1.選取幾只感興趣的股票
000413 東旭光電,000063 中興通訊,002007 華蘭生物,000001 平安銀行,000002 萬科A
並比較一下數據(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = df['close']
#規范化後時序數據
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:
2.計算不同證券的均值、協方差
每年252個交易日,用每日收益得到年化收益。計算投資資產的協方差是構建資產組合過程的核心部分。運用pandas內置方法生產協方差矩陣。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:
000413.XSHE 0.184516
000063.XSHE 0.176790
002007.XSHE 0.309077
000001.XSHE -0.102059
000002.XSHE 0.547441
In [3]:
returns.cov()*252
Out[3]:
3.給不同資產隨機分配初始權重
由於A股不允許建立空頭頭寸,所有的權重系數均在0-1之間
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:
array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])
4.計算預期組合年化收益、組合方差和組合標准差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:
0.21622558669017816
In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:
0.23595133640121463
In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:
0.4857482232609962
5.用蒙特卡洛模擬產生大量隨機組合
進行到此,我們最想知道的是給定的一個股票池(證券組合)如何找到風險和收益平衡的位置。
下面通過一次蒙特卡洛模擬,產生大量隨機的權重向量,並記錄隨機組合的預期收益和方差。
In [8]:
port_returns = []
port_variance = []
for p in range(4000):
weights = np.random.random(noa)
weights /=np.sum(weights)
port_returns.append(np.sum(returns.mean()*252*weights))
port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))
port_returns = np.array(port_returns)
port_variance = np.array(port_variance)
#無風險利率設定為4%
risk_free = 0.04
plt.figure(figsize = (8,4))
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')
plt.grid(True)
plt.xlabel('excepted volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[8]:
6.投資組合優化1——sharpe最大
建立statistics函數來記錄重要的投資組合統計數據(收益,方差和夏普比)
通過對約束最優問題的求解,得到最優解。其中約束是權重總和為1。
In [9]:
def statistics(weights):
weights = np.array(weights)
port_returns = np.sum(returns.mean()*weights)*252
port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))
return np.array([port_returns, port_variance, port_returns/port_variance])
#最優化投資組合的推導是一個約束最優化問題
import scipy.optimize as sco
#最小化夏普指數的負值
def min_sharpe(weights):
return -statistics(weights)[2]
#約束是所有參數(權重)的總和為1。這可以用minimize函數的約定表達如下
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})
#我們還將參數值(權重)限制在0和1之間。這些值以多個元組組成的一個元組形式提供給最小化函數
bnds = tuple((0,1) for x in range(noa))
#優化函數調用中忽略的唯一輸入是起始參數列表(對權重的初始猜測)。我們簡單的使用平均分布。
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)
opts
Out[9]:
status: 0
success: True
njev: 4
nfev: 28
fun: -1.1623048291871221
x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])
message: 'Optimization terminated successfully.'
jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])
nit: 4
得到的最優組合權重向量為:
In [10]:
opts['x'].round(3)
Out[10]:
array([-0. , 0. , 0.164, -0. , 0.836])
sharpe最大的組合3個統計數據分別為:
In [11]:
#預期收益率、預期波動率、最優夏普指數
statistics(opts['x']).round(3)
Out[11]:
array([ 0.508, 0.437, 1.162])
7.投資組合優化2——方差最小
接下來,我們通過方差最小來選出最優投資組合。
In [12]:
#但是我們定義一個函數對 方差進行最小化
def min_variance(weights):
return statistics(weights)[1]
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
optv
Out[12]:
status: 0
success: True
njev: 7
nfev: 50
fun: 0.38542969450547221
x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])
message: 'Optimization terminated successfully.'
jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])
nit: 7
方差最小的最優組合權重向量及組合的統計數據分別為:
In [13]:
optv['x'].round(3)
Out[13]:
array([ 0.115, 0. , 0.21 , 0.353, 0.322])
In [14]:
#得到的預期收益率、波動率和夏普指數
statistics(optv['x']).round(3)
Out[14]:
array([ 0.226, 0.385, 0.587])
8.組合的有效前沿
有效前沿有既定的目標收益率下方差最小的投資組合構成。
在最優化時採用兩個約束,1.給定目標收益率,2.投資組合權重和為1。
In [15]:
def min_variance(weights):
return statistics(weights)[1]
#在不同目標收益率水平(target_returns)循環時,最小化的一個約束條件會變化。
target_returns = np.linspace(0.0,0.5,50)
target_variance = []
for tar in target_returns:
cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})
res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
target_variance.append(res['fun'])
target_variance = np.array(target_variance)
下面是最優化結果的展示。
叉號:構成的曲線是有效前沿(目標收益率下最優的投資組合)
紅星:sharpe最大的投資組合
黃星:方差最小的投資組合
In [16]:
plt.figure(figsize = (8,4))
#圓圈:蒙特卡洛隨機產生的組合分布
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')
#叉號:有效前沿
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')
#紅星:標記最高sharpe組合
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)
#黃星:標記最小方差組合
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)
plt.grid(True)
plt.xlabel('expected volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[16]:
『玖』 光子量化的智能投資策略是怎樣實現的
以下內容取自其官網 :
AI量化策略構建流程
類比挑瓜過程,我們可以對AI量化策略流程進行分解:
第一步:確定數據(如股票池),劃分訓練集、測試集
首先我們應明確我們構建何種AI量化策略,如A股、港股還是期貨等,確定數據後,接著我們把歷史數據按時間順序切分為兩部分,類比於分瓜任務中的兩堆瓜。
訓練集: 第一部分的數據用來訓練模型,類比第一堆瓜;
驗證集: 第二部分的數據用來驗證模型效果,類比第二堆瓜;
第二步:定目標:數據標注
其次我們要明確我們模型的訓練目標,是預測股票收益率高低還是波動率高低,就好比是預測西瓜好壞還是年份;
在樣例模板中,我們用5日收益率高低來定義股票的走勢好壞等級,並將每隻對應等級標記在每隻股票上,類比於上述切瓜後記錄每個瓜的好壞。
AI量化策略的目標(Label):人為定義的模型預測目標,例如未來N日收益率、未來N日波動率、未來N日的收益率排序等統計量,平台AI量化策略默認使用股票收益率作為目標。
AI量化策略的標註: 我們計算訓練集數據所在時間階段的每日目標值,比如按每日的未來N日收益率高低來定義股票的走勢好壞等級,計算出每隻股票未來N日收益率的好壞等級並標記在每隻股票上。
第三步:找因子
選擇構建可能影響目標的特徵(量化策略中可稱為因子),如模板策略中的return_5(5日收益)、return_10(10日收益)等,類比於瓜的產地、大小等特徵。
AI量化策略的特徵(features): 反映事物在某方面的表現或性質的事項,在AI量化策略中,特徵可以是換手率、市盈率、KDJ技術指標等等
第四步:數據連接+缺失數據處理
將上述每隻股票的標注數據與特徵數據注意鏈接,以便下一步模型的學習與使用,類比於上述將每個西瓜特徵與好壞一一對應;
第五步:模型訓練+股票預測
我們通過「好壞等級」對股票進行標注,貼上標簽,連同其所對應的特徵值一起來構建訓練模型,類比於上述我們獲取每個瓜的特徵與其對應的好壞結果,通過歸納總結找到瓜的好壞與瓜的屬性之間的關聯,總結出瓜的分類經驗;
用驗證集數據來檢驗訓練前面構建好的模型,即檢驗模型根據驗證集的特徵數據預測出的目標值(股票走勢好壞等級)是否准確。這步類比於鑒瓜任務中根據第一堆瓜總結的鑒瓜經驗用第二堆西瓜的大小、顏色等特徵數據來判斷預測瓜的好壞。
第六步:回測
將驗證集的預測結果放入歷史真實數據中檢測,類比於鑒瓜過程中根據第二堆瓜預測出瓜的好壞最後進行切瓜驗證。
『拾』 中國量化投資網這種模式在國外做的怎麼樣
作者:楊博理
在整個量化交易策略的研發流程當中,買和賣是最為基本的量化交易策略組成部分,而這個部分的設定主要與收益情況相關。這里所說的相關,具體分為兩種不同的情形,一種是總體的關聯性,即基於買點、賣點的選擇,買賣策略應該得到一個正的整體收益。另一種則來自於對交易資產未來收益的判斷、或者說預測,即判斷交易資產的未來收益為正時,就買入資產;判斷交易資產的未來收益為負時,則賣出或賣空資產。實際操作中,這兩種關聯關系的情況可能更為復雜一些。有的時候,買和賣的具體操作也可能受到風險方面設置的影響,例如為了限制單次交易的最大損失而採取止損之類的操作時,用於清倉的買賣設置就會相應的變動,這也是作者將風險和買賣用虛線相連的原因。不過在大部分情況下,買賣這一最為基本的組成部分還是與收益的關系最大,研究者也應該在研發這一個組成部分時,著重考慮收益情況的具體影響。
對量化交易策略風險的控制可能會影響到量化交易策略中的買賣設置,但是在更普遍的情況下,風險這一因素主要影響的是交易倉位的設置。當然,前提條件還是需要買賣策略的總體收益為正,在這樣的條件下再結合倉位的設置,才能夠在合適的風險水平下取得達到要求的收益。通過對交易資產具體倉位的調整,交易者可以比較直接的控制單次交易以及整個交易策略的風險水平。例如在滿倉交易的情況下,定量的判斷了當前交易的風險之後,覺得風險過大無法承受,那麼最為直接的處理方法就是在滿倉的基礎上相應的降低倉位的大小。在倉位降低之後,對於整體資金而言風險也就隨之降低了。由於倉位本身具有量化、直觀的特性,因此當交易者希望將風險處理到一個特定的水平時,調整倉位是一個比較方便的手段。
需要說明的是,前面已經提到了買和賣是量化交易策略最為基本的組成部分,實際上倉位的設定是根據買賣決策和風險兩個因素共同形成的,不建立在買賣之上的倉位選擇是空洞沒有意義的。此外還有一個更為極端的情況,倉位的正確設定有助於進一步優化策略的整體收益,之後要介紹的凱利公式的意義正在於此。在圖1中由買賣到倉位的箭頭,實際上可以看作是收益、買賣這一個整體部分指向倉位的箭頭。不過在實際使用中,凱利公式所導出的倉位設定往往過於偏激,超過正常風險控制下的最高倉位值,因此倉位仍然與風險的關系更為緊密。
在圖1這個較為鬆散的量化交易策略研發流程中,交易成本是和買賣以及倉位具有同等地位的組成部分。在實際操作中,就是首先基於對收益和風險的判斷得出合適的買賣和倉位選擇,然後在買賣和倉位共同組成的量化交易策略當中考慮交易成本,也就是在建立倉位和退出倉位等操作中扣除所需要承擔的交易成本。隨後再次判斷該量化交易策略所代表的收益和風險情況,只有這兩個因素仍然在接受范圍之內,才能確認這是一個可行的量化交易策略。雖然最後用來執行的組成部分只有買賣和倉位,但是交易成本作為對量化交易策略的一個實際化修正,也是策略研發流程中一個不可或缺的組成部分。
上面提到的對量化交易策略收益和風險情況的判斷,實際上是一個綜合性的評價問題。一個最為重要的參考依據應該是策略在整個交易過程中的凈值走勢,通過對策略凈值走勢的分析,就可以建立起該量化交易策略運行情況的全面判斷。但是凈值走勢本身由於細節過多,因此無法簡單的用來進行策略之間的橫向對比。這時就需要精煉凈值走勢中所包含的信息,選取合適的部分形成量化的評價指標,從而進行量化交易策略的進一步判定。就作者看來,評判一個策略的標准中最重要的仍然是策略在整個交易過程下的收益情況,一個負收益的量化交易策略根本無需考慮其風險即可排除。而當收益為正時,再結合風險的度量進行具體的取捨,就可以直觀的給出量化交易策略是否合格的評判標准了。作者心目中最重要的風險指標是策略凈值的回撤水平,在後面的案例分析中也會重點查看回撤的結果。
於此同時,一些量化交易策略在進行收益和風險情況的判斷時,僅僅針對策略自身的凈值走勢進行研究是不夠的,給出一個合理的基準來進行對比往往是更為有效的判別方法。例如後面的案例中會涉及到的量化選股策略,當交易選擇僅限為對具體的股票進行持倉,而不考慮空倉或者賣空時,選取一個特定的基準進行對比就會是一個更為有效的判別方法。這主要是由於量化選股策略的倉位始終為多頭,因此不論如何配置,策略所持倉位都含有資本資產定價模型中所提到的市場成分。而選股策略本身的意義在於選擇更好的股票、不在於獲取市場收益,因此將市場走勢作為對比、或者在策略收益中剔除掉市場成分就是一個更合理的做法。
上述所有的操作,都需要建立在對歷史數據的分析之上,在量化交易領域當中一般稱之為回溯測試,或者簡稱回測。所謂回溯,也就是將交易的過程在歷史數據上復現一遍,這裡麵包含了一個假設,即歷史數據在量化交易策略中展現出的樣本特徵在未來的交易中依然存在,否則回溯測試就失去了意義。關於這一假設的分析其實在諸多技術分析著作中均有涉及,一般被稱為「歷史會重演」,這里不再繼續展開。不同於傳統技術分析的是,量化交易策略的研發過程更加深入具體,在涉及到策略的參數設定、模型設置等具體問題時,需要採用數量化的方法、也就是最優化等技術手段進行解決。例如如何設置買點和賣點可以使得相應的總體收益最大等等,都是很典型的最優化數學問題,那麼找到合適的最優化技術和演算法並加以應用,就能夠確定量化交易策略的最終形式,用以進行實際交易。
圖1中所展示的是一個較為鬆散的一般性框架,用來總領性的說明量化交易策略的基本研發流程。在具體的策略研發過程中,這個框架經常會因為具體研發設置和策略設置的不同而產生變化。例如當量化交易策略的主要作用不是在時間軸上選擇具體的買賣時點,而是在同一個時間點上對多個資產進行選擇和配置時,圖1中的一些說明就顯得有些含混不清。量化選股策略就是這一類策略中最為常見的形式,因此這里在整體框架不變動的情況下,針對圖1進行了文字上的調整,用以說明量化選股策略的運行框架與研發流程。當然,使用選股策略的框架體系來處理多個資產甚至多個策略的挑選、配置也是可以的,在不復雜的情況下只需要稍作聯想即可。
買賣和倉位雖然是更為通用的說法,但是更適合於描述擇時策略,放在選股策略的研發框架中會顯得比較突兀,因此圖2將買賣換成了選股,倉位則換成了配比,這樣更容易讓讀者領會該研發流程的含義。實際上,對於每一期的選股而言,如果選擇了原先沒有倉位的股票,那麼對應的操作就是買入該股票,如果已經建倉的股票沒有被選入這一期的股票池,那麼對應的操作就是賣出該股票。而配比則是在買賣的基礎上,通過倉位大小的變化來實現具體配置。因此,選股和配比實際上可以算作是買賣和倉位選擇的特殊情況,只是這種說法更為貼合量化選股策略本身。
略有不同的,是風險在量化選股策略研發流程中的具體含義。由於選股策略的倉位操作涉及到多個股票之間的配比問題,因此這里的風險不僅包括單支股票的風險,也涉及到多支股票之間的風險程度,後一種風險一般採用股票收益之間的相關性來進行描述。例如在一般性的最優投資組合理論當中,經常使用協方差矩陣來刻畫整個資產組合的風險水平。雖然從實際情況來看,相關性這一度量方式與風險的直觀感受之間有一定的差距,但是在多資產環境下,一般都將資產間的相關性視為風險的來源之一,這是一個偏學術的、約定俗成的做法。
上面的例子是針對選股策略進行的文字上的變動,實際上量化交易策略研發流程的變化更多來自於各個研發組成部分不同的結合方式。而不同的結合方式,對應的是策略研發過程中不同的目標和需求。例如圖1所介紹的鬆散的研發流程,是在確定好買賣行為和倉位設定之後,再針對實際交易中所產生的交易成本進行二次測試。這樣的做法雖然簡便易行,但是忽視了交易成本本身對於收益的影響,以及更進一步對於買點和賣點的影響。因此,在確定買賣設置的步驟中就考慮交易成本的影響,應該是一個更貼近於實際的研究框架。圖3給出了相應的流程刻畫,如圖所示,在判斷收益因素時,同時考慮交易成本對於收益的影響,從而優化出更為實際的買賣設置。再根據相應的風險控制,結合買賣點的選擇,得出最後的倉位設置。在確定了買賣和倉位這兩個部分之後,就獲得了一個完整的量化交易策略。
圖4給出了一個更緊湊、更貼合實際操作的量化交易策略研發流程。在該流程中,買賣和倉位的設置是同時作為參數進行優化的,優化的目標函數也進行了唯一化,即量化交易策略的風險調整後收益。而在確定需要優化的目標函數時,交易成本也如同上一個研發流程一樣同時被考慮進去,從而保證買賣和倉位優化結果的准確性。毫無疑問,相較於上面所涉及到的研發流程、特別是圖1中較為鬆散的研發流程,該量化交易策略研發流程的各個組成部分更為緊密,因此在優化過程中所產生的與實際操作的偏離也就越小,買賣和倉位設置的准確度也就更高。但是在實際工作中,如果想參照這一流程進行研發,那麼就需要比較強的計算能力,數據量的大小也要達到一定要求,同時優化方法和目標函數的設定要能夠同時覆蓋買賣和倉位的所有參數,因此往往也只有極為簡單的策略思路可以採用這樣的流程框架進行研發。
在實際的量化交易策略相關工作中,研發只是整個工作流程的一部分,還有兩個組成部分需要著重強調。基於此,圖5在圖1所示的研發流程的基礎上給出了一個更為完整的工作流程。如圖所示,需要增加的部分包括處於研發過程之前的數據准備工作以及處於研發過程之後的策略執行工作。這兩項工作與前面所論述的研發流程具有很強的邏輯關聯性與內在依賴性,三者結合起來形成的一個整體,基本上可以涵蓋量化交易策略具體工作的絕大部分內容。
首先論述數據准備的工作,循著圖5中的箭頭可以看到,在量化交易策略的整體工作中,既要為研發過程准備相應的研究數據,也要為策略執行准備相應的實時數據。在研究數據方面,由於尋找合適的量化交易策略需要不斷重復研發流程,因此對於數據的要求更偏重於准確性和覆蓋能力。同時,對數據的清洗和轉換也是一項重點工作,在大部分的數據科學研究、包括量化交易策略的研發當中,數據特徵的合理抽取對於整體效果提升的重要性有時甚至要高於精巧的模型,當然很多時候數據的轉換和模型的構造是相互融合的,針對具體情況應當採取具體的分析和處理。而在策略執行數據方面,則更應該關注於數據獲取的及時性。至於數據的清洗和變換,只需要完全復制研發得到的量化交易策略下的數據准備工作即可。另外,為了保證數據的及時性,最終進行的數據清洗工作對時間消耗存在一定的要求。
然後討論策略執行的工作。策略執行,是在量化交易策略研發完成之後,最終產出實際效能的組成部分。執行時應該遵循盡量貼近研發完成的量化交易策略的原則,與量化交易策略所確定的買賣、倉位等設置盡可能的保持一致,這樣才能最真實的反映出前面量化交易策略的研發結果。同時,策略執行的結果也可以用來反向支持具體的研發流程,通過對策略執行所得到的收益、風險情況的判斷,實時的重新進行研發,對量化交易策略進行修改,從而使得策略能夠及時的得到現實的反饋,增強自身的穩健程度。值得一提的是,後面將要介紹的推進分析是一種模擬策略執行的回溯測試技術,讀者可以在運行推進分析時有限度的了解到量化交易策略實際執行時的種種狀態。