陳帆的手指還懸在鼠標上方,盯著主屏右下角那條剛剛彈出的警告信息。係統判定新一輪基差機會出現,信號清晰,邏輯閉環完整。他正要開口,張遠卻先動了。
沒有提加倉,也沒問要不要再跑一遍流程。張遠調出後台數據流,把過去七十二小時的所有套利記錄導了出來,連同曆史價差波動曲線、成交密度分布圖一起拖進分析窗口。他的動作很穩,但敲擊鍵盤的節奏比平時快半拍。
“我想試試看,能不能找出規律。”他說。
李陽從代碼界麵抬眼:“什麼規律?”
“不是單次操作的節奏,是整個過程的共性。”張遠指著屏幕上三組並列的折線,“每次偏離發生時,市場狀態其實不一樣。有的流動性差,有的機構持倉突變,有的是政策預期擾動。但我們每次都用同一套邏輯應對。我在想,能不能反過來——先判斷環境,再決定是否介入。”
陳帆靠向椅背,沒打斷。他知道張遠的意思。跨市場套利的成功讓他們看到了係統的價值,但也暴露了一個問題:策略模塊太依賴預設條件,缺乏對“何時不該出手”的識彆能力。
“你想建個篩選器?”陳帆問。
“更像是一個前置模型。”張遠點頭,“隻盯上證50成分股,結合估值、動量和股東結構,提前判斷哪些時候容易出現定價偏差。”
李陽皺眉:“三個因子?怎麼加權?你有回測數據支撐嗎?”
“還沒有。”張遠坦然承認,“但我可以試。”
陳帆看了他一眼:“那就做。先把框架搭出來,我們一起來調。”
接下來兩天,張遠幾乎沒離開過操作台。他把係統裡所有與個股相關的底層模塊拆解了一遍,參考了波動率計算層的時間序列處理方式,也借用了MACD背離檢測中的滑動窗口邏輯。但他沒照搬,而是重新定義了輸入變量。
第一個因子是“估值分位數”,取每隻股票近五年市盈率所處的曆史位置;第二個是“動量斜率”,不采用簡單漲跌幅,而是通過線性回歸擬合最近二十個交易日的價格趨勢線,提取斜率值;第三個是“機構持倉集中度”,用前十大流通股東持股比例之和,剔除大股東後計算變動率。
初版模型運行結果並不理想。第一次輸出名單裡,出現了好幾隻基本麵疲軟、短期被炒作的標的。李陽立刻指出問題:“動量因子權重過高,你在追高。”
“我知道。”張遠沒反駁,“是因為窗口期選得太短,反應滯後。我打算改用動態周期——當價格突破布林帶上軌且成交量放大時,自動縮短觀察區間,增強敏感性。”
“那你得加上衰減機製。”李陽提醒,“不然容易反複打臉。”
張遠記下建議,當晚就把算法重寫了一遍。他在趨勢判定部分引入了陳帆在國債分析中使用的“持續性驗證”邏輯:隻有連續兩個周期方向一致,才確認趨勢成立。同時為每個因子設置置信區間,低於閾值的直接過濾。
第三天清晨,新版本模型首次跑通回測。測試範圍是過去兩年內上證50成分股中漲幅進入前10%的個股,共47隻。模型成功覆蓋其中31隻,準確率66%,顯著高於隨機選擇。
更關鍵的是,它避開了大部分“偽強勢”行情。比如某白酒股在一季度末因渠道囤貨導致短期放量上漲,傳統動量策略會誤判為啟動信號,但該模型因估值已處98%分位而自動排除。
“可以試實盤了。”張遠說。
李陽仍持保留意見:“樣本量不夠大,而且沒經曆極端行情檢驗。萬一遇到暴跌或停牌呢?”
“那就小規模驗證。”陳帆開口,“用社團資金5%,建個模擬組合。不下實單,隻走全流程,看信號穩定性。”
三人達成一致。係統接入實時行情後,模型開始每日掃描。第一天無提示,第二天觸發兩隻備選,均因流動性不足被自動過濾。直到第三日早盤,屏幕中央跳出一條醒目標記:
【三因子模型信號激活】
標的:浦發銀行(600000)
當前評分:8.3/10
觸發原因:估值位於曆史低位(23%分位),動量斜率由負轉正持續兩日,機構持倉集中度環比上升4.7個百分點