因子學習筆記、問題匯總
一、多因子問題
8、回測時股票價格數據該如何選擇?
1、周期:日、周、月、季(報告期)、年
2、時間設置:固定日期---->,起始日期,截止日期;相對日期---->前推周期(日歷日、交易日、周、月、季、年),截止日期
3、日期類型:交易日、日歷日、工作日
4、無交易數據處理:沿用之前數據、空值、自設數值(自己輸入數值)
5、貨幣:原始貨幣、人民幣、美元、港幣
6、價格修正:(!)、復權方式(適用於股票基金):不復權、前復權、後復權、定點復權 (2)、價格類型(適用債券):凈價、全價、市價、收益率
設置匯總:1、周/月 2、相對日期-->周/月 3、日歷日 4、空值 5、原始貨幣 6、復權方式-->前復權
註意:復權應該選擇向後復權,這樣收益率數據庫可以月度更新,如果向前復權,每次向前時點不一致,導致數據不一致。
7、A股比較基準是什麽?
滬深300指數 代碼 000300.SH 中證500指數 代碼 000905.SH
6、在做多因子研究時,如果回測結果較好,把y換成隨機數序列y1,用y1回歸來看模型預測能力差,是不是說明模型預測能力較好?
5、在因子去極值處理後,因子數據全部變為0,是什麽原因?
解答:dividendyield2因子在2008年5月31日數據全為0,因為中位數數據為0,極大值和極小值均為0,最後結果都為0,影響應該不大,這樣數據少,以後隨著分紅變得普遍,就不會有這種情況發生了。
4、數組標準化(變為均值為0,方差為1)後的數據唯一嗎?
解答:是唯一的,兩個標準化的差別是一個對每列標準化,一個對全部數據標準化。
data=pd.DataFrame(np.array([[0, 0], [0, 0], [1, 1], [1, 1]])) data Out[53]: 0 1 0 0 0 1 0 0 2 1 1 3 1 1 scale_fun = lambda x: (x - x.mean()) / x.std() data1=data.apply(scale_fun) data1 Out[56]: 0 1 0 -0.866025 -0.866025 1 -0.866025 -0.866025 2 0.866025 0.866025 3 0.866025 0.866025 data1.mean() Out[79]: 0 0.0 1 0.0 dtype: float64 data1.std() Out[80]: 0 1.0 1 1.0 dtype: float64 from sklearn import preprocessing scaler=preprocessing.StandardScaler() scaler.fit(data) Out[84]: StandardScaler(copy=True, with_mean=True, with_std=True) data2=scaler.transform(data) data2 Out[87]: array([[-1., -1.], [-1., -1.], [ 1., 1.], [ 1., 1.]]) data2.mean() Out[88]: 0.0 data2.std() Out[89]: 1.0 data3=DataFrame(data2) data3 Out[91]: 0 1 0 -1.0 -1.0 1 -1.0 -1.0 2 1.0 1.0 3 1.0 1.0 data3.mean() Out[92]: 0 0.0 1 0.0 dtype: float64 data3.std() Out[93]: 0 1.154701 1 1.154701 dtype: float64
3、選取回報數據的時候,是否需要復權處理?價格修正方式(股票基金)有4種:不復權、前復權、後復權、定點復權(僅用於支持定點復權指標)
解答:選擇前復權,如果不復權,價格不真實
2、有些股票當期不在交易標的中,比如ST、停牌、上市不滿三個月等。在做因子數據預處理時是該先丟掉這些數據再做預處理,還是全部因子數據數據預處理完,再丟掉?
解答:先全部預處理完,再丟,這樣包含的信息更多。
1、如果當天股票停牌,不考慮後續是否停牌情況下,單個回測周期因子回測時該如何處理?實際交易時如何處理?
回測時:該股票不在投資標的中,所有因子值設置為nan,設置時間分為因子預處理前和預處理後兩種情況。
實盤時:如果按照回測時情況來處理,該停牌股票必然會被調出股票持倉中,可能實際上該股票不應該調出,產生無效交易,加大交易成本。
這是一個問題。。。
興業三叉戟量化選股策略
1、RV選股策略:
2、3+2量化選股策略
因子學習筆記、問題匯總