<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 量化分析師的Python日記【第14天:如何在優礦上做Alpha對沖模型】 > 來源:https://uqer.io/community/share/55e662f9f9f06c1ea481f9cf 上篇第12天講了單因子如何產生和回測,本篇主要用具體的實例來介紹如何在優礦上做Alpha對沖模型,分以下四個部分展開: + Alpha對沖模型簡介 + 優礦“三劍客”簡介 + 如何在優礦上做Alpha沖對模型 (多信號合成) 關于大賽 ## 1、Alpha對沖模型簡介 A、假設市場完全有效,那么根據CAPM模型有,`Rs=Rf+βs?(Rm?Rf)`。式中,`Rs`表示股票收益,`Rf`表示無風險收益率,`Rm`表示市場收益,`βs`表示股票相比于市場的波動程度,用以衡量股票的系統性風險。 B、遺憾的是,市場并非完全有效,個股仍存在alpha(超額收益)。 根據Jensen's alpha的定義:`αs=Rs?[Rf+βs?(Rm?Rf)]`,除掉被市場解釋的部分,超越市場基準的收益即為個股alpha。 C、實際中,股票的收益是受多方面因素影響的,比如經典的Fama French三因素就告訴我們,市值大小、估值水平、以及市場因子就能解釋股票收益,而且低市值、低估值能夠獲取超額收益。那么,我們就可以通過尋找能夠獲取alpha的驅動因子來構建組合。 D、假設我們已經知道了哪些因子能夠獲取超額收益,那么我們根據這些因子構建股票組合(比如持有低市值、低估值的股票)。那么組合的收益理論上是能夠獲取超額收益的,簡單來講就是,組合的累計收益圖應該是在基準(比如滬深300)累計收益圖之上的,而且兩者的差應該是擴大的趨勢。 E、由于組合的漲跌我們是不知道的,我們能夠確保的是組合與基準的收益差在不斷擴大,那么持有組合,做空基準,對沖獲取穩定的差額收益(alpha收益),這就是傳說中的市場中性策略 ## 2、優礦“三劍客” 針對上述研究流程,優礦提供全程服務,從金融大數據,模型的研究開發到實盤交易和組合管理: + DataAPI:提供近300個高質量的因子數據(基本面因子,技術面因子和大數據因子),為模型提供充足的原材料和讓用戶自己研究因子提供了基礎 + RDP:提供標準的因子到信號的處理函數(去極值、中性化、標準化)同時,還提供了功能強大的組合構建函數 + Quartz:提供標準的、更貼近實際的回測框架,一鍵查看對沖模型歷史表現 ## 3、實例:優礦上的對沖模型 回測框架&基礎工作簡介: + 回測區間從2011年8月1日~2015年8月1日,基準為滬深300,策略每月第一個交易日開盤之后建倉 + 因子選取:凈利潤增長率(NetProfitGrowRate)、權益收益率(ROE)、相對強弱指標(RSI) + 因子到信號的處理:用到了去極值(winsorize)、中性化(neutralize)、標準化(standardize)處理 + 組合構建:用到了RDP里的simple_long_only() PS:關于函數的詳細使用說明,可以新建`cell`輸入 `函數名+?` ,運行得到API使用文檔。比如,運行下面的代碼便可以得到`simple_long_only`的使用說明。 ``` simple_long_only? ``` ```py end = '2015-08-01' # 回測結束時間 benchmark = 'HS300' # 策略參考標準 universe = set_universe('HS300') # 證券池,支持股票和基金 capital_base = 10000000 # 起始資金 freq = 'd' # 策略類型,'d'表示日間策略使用日線回測,'m'表示日內策略使用分鐘線回測 refresh_rate = 1 # 調倉頻率,表示執行handle_data的時間間隔,若freq = 'd'時間間隔的單位為交易日,若freq = 'm'時間間隔為分鐘 # 構建日期列表 data=DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=u"20110801",endDate=u"20150801",field=['calendarDate','isMonthEnd'],pandas="1") data = data[data['isMonthEnd'] == 1] date_list = data['calendarDate'].values.tolist() cal = Calendar('China.SSE') period = Period('-1B') def initialize(account): # 初始化虛擬賬戶狀態 pass def handle_data(account): # 每個交易日的買入賣出指令 today = account.current_date today = Date.fromDateTime(account.current_date) # 向前移動一個工作日 yesterday = cal.advanceDate(today, period) yesterday = yesterday.toDateTime() if yesterday.strftime('%Y-%m-%d') in date_list: # 凈利潤增長率 NetProfitGrowRate =DataAPI.MktStockFactorsOneDayGet(tradeDate=yesterday.strftime('%Y%m%d'),secID=account.universe,field=u"secID,NetProfitGrowRate",pandas="1") NetProfitGrowRate.columns = ['secID','NetProfitGrowRate'] NetProfitGrowRate['ticker'] = NetProfitGrowRate['secID'].apply(lambda x: x[0:6]) NetProfitGrowRate.set_index('ticker',inplace=True) ep = NetProfitGrowRate['NetProfitGrowRate'].dropna().to_dict() signal_NetProfitGrowRate = standardize(neutralize(winsorize(ep),yesterday.strftime('%Y%m%d'))) # 對因子進行去極值、中性化、標準化處理得信號 # 權益收益率 ROE = DataAPI.MktStockFactorsOneDayGet(tradeDate=yesterday.strftime('%Y%m%d'),secID=account.universe,field=u"secID,ROE",pandas="1") ROE.columns = ['secID','ROE'] ROE['ticker'] = ROE['secID'].apply(lambda x: x[0:6]) ROE.set_index('ticker',inplace=True) ep = ROE['ROE'].dropna().to_dict() signal_ROE = standardize(neutralize(winsorize(ep),yesterday.strftime('%Y%m%d'))) # 對因子進行去極值、中性化、標準化處理得信號 # RSI RSI = DataAPI.MktStockFactorsOneDayGet(tradeDate=yesterday.strftime('%Y%m%d'),secID=account.universe,field=u"secID,RSI",pandas="1") RSI.columns = ['secID','RSI'] RSI['ticker'] = RSI['secID'].apply(lambda x: x[0:6]) RSI.set_index('ticker',inplace=True) ep = RSI['RSI'].dropna().to_dict() if len(ep) == 0 : return signal_RSI = standardize(neutralize(winsorize(ep),yesterday.strftime('%Y%m%d'))) # 對因子進行去極值、中性化、標準化處理得信號 # 構建組合score矩陣 weight = np.array([0.4, 0.3, 0.3]) # 信號合成,各因子權重 Total_Score = DataFrame(index=RSI.index, columns=['NetProfitGrowRate','ROE','RSI'], data=0) Total_Score['NetProfitGrowRate'][signal_NetProfitGrowRate.keys()] = signal_NetProfitGrowRate.values() Total_Score['ROE'][signal_ROE.keys()] = signal_ROE.values() Total_Score['RSI'][signal_RSI.keys()] = signal_RSI.values() Total_Score['total_score'] = np.dot(Total_Score, weight) total_score = Total_Score['total_score'].to_dict() wts = simple_long_only(total_score, today.strftime('%Y%m%d')) # 調用組合構建函數,組合構建綜合考慮各因子大小,行業配置等因素,默認返回前30%的股票 # 找載體,將ticker轉化為secID RSI['wts'] = np.nan RSI['wts'][wts.keys()] = wts.values() RSI = RSI[~np.isnan(RSI['wts'])] RSI.set_index('secID', inplace=True) RSI.drop('RSI', axis=1, inplace=True) # 先賣出 sell_list = account.valid_secpos for stk in sell_list: order_to(stk, 0) # 再買入 buy_list = RSI.index total_money = account.referencePortfolioValue prices = account.referencePrice for stk in buy_list: if np.isnan(prices[stk]) or prices[stk] == 0: # 停牌或是還沒有上市等原因不能交易 continue order(stk, int(total_money * RSI.loc[stk]['wts'] / prices[stk] /100)*100) else: return ``` ![](https://box.kancloud.cn/2016-07-30_579cb734c2576.jpg) 接下來,繪制組合和基準的累計收益圖之差,得到alpha收益,看看效果如何。 ```py ((bt['portfolio_value']/bt['portfolio_value'][0] - 1) - ((1 + bt['benchmark_return']).cumprod() - 1)).plot(figsize=(14,7)) <matplotlib.axes.AxesSubplot at 0x34eef90> ``` ![](https://box.kancloud.cn/2016-07-30_579cb734d880e.png) 可以看到,在如上三個因子驅動下的alpha收益相對來說還是比較穩定的,由于有對沖,策略是市場中性的,不論市場漲跌對我們的收益是不受影響的(當然排除一些極端情況,比如所有股票收益沒有任何差異性,例如流動性危機)。 ## 4、關于大賽 大賽的一些規則設計: + 單子股票持股不超過10%:alpha收益并不是全倉某一只股票,然后漲停;可以看到,由于有股指期貨的對沖,那么組合的持倉也應該像股指期貨一樣各行業配置很均勻,組合構建函數simple_long_only()充分考慮了行業配置、各因子alpha貢獻等因素 + 股票倉位在任意三個以上收盤日低于80%則不達標:因為alpha收益已經非常穩健,那么增加本金的投入只會帶來更多的收益,何樂而不為呢? + 相對HS300,強制平倉線90%:近似于強平線為0.9,當所選因子不能持續帶來alpha收益時,有必要對因子要仔細考慮了。 + 不能投資流動性過差以及剛上市的股票:alpha收益追求的是穩定性,沒有必要去承受額外的流動性風險以及其他風險。 ## 5、后話 優礦提供了將近300個基礎因子(包含價值/動量/質量/成長/情緒等維度)供用戶研究和合成: 可以在如下幫助頁面找到這些因子 https://uqer.io/help/api/search/MktStockFactors?page=1 在投資研究尋找新的因子就是專業量化研究員日常的工作,在研究過程中希望找到:有故事的因子,符合經濟學原理,有投資邏輯 希望優礦用戶在這里開啟你的眾包版對沖基金之旅!!!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看