Finlab價格意圖因子策略1-原始策略回測

3Shares
Image


Finlab的價格意圖因子一文提到,其中提到股價穩定上漲的股票,有可能是公司或主力有意為之,而這樣的股票,未來繼續上漲的可能性也較高,而Finlab的回測也證明了這樣的策略是可以打敗大盤的,而本文嘗試將Finlab用到的條件,變成XQ策略,看看能否得到相同的結果。

1. 策略說明

這個策略主要概念是認為穩定上漲的股票,可能是公司或主力刻意營造的趨勢,而這樣的的股票在未來持續上漲的機會會較大,而要如何評估穩定上漲,finlab的概念很簡單,採用過去60天的報酬率與股價變動率來做評估,在同樣的報酬率前提下,如果變動率越小,這個價格就越穩定,每季選出價格意圖因子前50名的股票進場交易,策略的詳細說明,可以看Finlab原文,以下列出文章內的三個主要指標跟條件

三個指標:
報酬率:計算股票過去 60 天的總報酬率。
變動率:計算過去 60 天每日報酬的絕對值總和,這樣可以衡量股票價格變化的速度。
價格意圖因子:報酬率 / 變動率,這就是所謂的價格意圖因子,在同樣的報酬下,我們希望變動率越小越好,代表股票是「直線方向上漲」。

三個條件:
收益率上限:過去 60 天的收益率需小於 20%,這樣避免挑選近期漲幅過大的股票,減少追高風險。
最低交易量:日成交量需大於 200,000 股,確保有足夠的市場流動性。
有基本面數據:必須有營收資料支持,增加投資的可靠性。

2. 運用chatGPT解讀Python程式碼

雖然Finlab文章已經將策略差不多都說明了,但實際邏輯還是要看程式碼最為準確,如果看不懂程式碼,這邊提供一個不錯的方式,就是請ChatGPT來跟你說

chatgptchatgpt
貼上程式碼請Chatgpt說明

我覺得這個方式還滿棒的,ChatGPT一條一條的跟你說明程式碼,也同時讓自己可以學習認識Python程式碼,以下為ChatGPT全部的回應,可以看看這樣的說明是不是讓自己對Python又多了一些認識呢?

ChatgptChatgpt
ChatgptChatgpt
ChatgptChatgpt

3. XS程式碼說明

根據ChatGPT的說明,要將程式碼改寫成XS程式碼就超間單的了,由於這個策略需要選出價格意圖因子排名前50的股票,所以必須寫成函數,才能運用選股中心的排行條件,程式碼如下


//計算60天總報酬率
value1 = (close[0] - open[59])/open[59]*100;

//計算過去 60 天每日報酬的絕對值總和
value2 = summation(absValue(getfield("漲跌幅", "D")),60);

//價格意圖因子
value3 = value1 / value2 ;

//遇到近期報酬過大、成交量過小或月營收為負的股票,價格意圖因子直接為0
if value1 > 20 or volume < 200 or getField("月營收", "M")<0 then linearfactor = 0 else  

linearfactor = value3; 

另外,這個策略還有每季輪動的條件,所以另外寫了一個每季第二個交易日進場的條件,之所以用第二個交易日是因為XQ無法抓到每季的最後一個交易日,所以改用每季的第一個交易日開盤出場,為避免混亂,進場就用每季第二個交易日了,以下為進場的程式碼

//1、4、7、10月的第二個交易日進場

value1 = month(date);

condition1 = value1 = 1 and value1[1]=1 and value1[2] = 12;
condition2 = value1 = 4 and value1[1]=4 and value1[2] = 3;
condition3 = value1 = 7 and value1[1]=7 and value1[2] = 6;
condition4 = value1 = 10 and value1[1]=10 and value1[2] = 9;

if condition1 or condition2 or condition3 or condition4 then ret=1;

4. XQ選股回測

選股策略,將價格意圖因子跟進場日的條件放入,這樣就可以每季的第二個交易進場了

選股條件

而在回測上,由於選股無法在特定時間出場,一個比較簡單的方式就是設定約55天出場,這樣應該可以確保在下一季開始前,就都出場了,以下為選股回測結果,勝率不算高,有六成,但報酬率似乎是不斷向上的,而且績效有打敗0050

選股回測

用朋友最近提供的交易紀錄分析工具,設定每檔投入相同金額10萬元,每次輪動就是50檔股票,最大投入資金為500萬,九年獲利約650萬,一年約72萬,大約一年是14%報酬率,已經不錯了,而且只有2018年是虧損的

累積獲利

每年獲利統計

4. XQ雷達回測

如果想要精準在每次季報進出場,就需要用到雷達回測,因為雷達可以自己撰寫程式碼決定出場的日期,回測結果跟選股的回測差異不大,勝率都在58%

雷達回測

而在每年獲利的統計上,正確依照每季輪動進出的方式,獲利比選股的差一點,但差異不大(651萬 vs 628萬),但在每年獲利統計,這組回測出現兩年虧損。

Image Not FoundImage Not Found
This is a Image Example
每年獲利統計

5. XQ雷達回測設定

有關雷達設定,可以參照下圖,進場請選選股進場,出場選14710月出場腳本,商品則用選股,找到價格意圖因子策略,及可以回測

PS: 如果你沒有訂閱雷達模組,請從XS編輯器的雷達找到選股進場,打開點回測,然後依照圖片做設定,就可以做回測了

雷達設定

6. 結語

這個策略幾乎是個可以年年獲利了,接下來就是優化這個策略,讀者可以嘗試增加一些濾網,像是價格、成交量之類的去做回測,也可以去調整下排行選取的數量、試試雷達用輪動的效果,甚至改能半年、一年進場一次,這個策略,用到很多策略比較少用到的功能,是很值得了解學習的。

至於這篇的優化,就請等下一篇囉

7. 檔案下載

3Shares


發佈留言

在〈Finlab價格意圖因子策略1-原始策略回測〉中有 11 則留言

  1. 「mask555」的個人頭像

    想請問 寫linearfactor的時候應該會需要宣告新變數吧?

    1. 「A+管理員」的個人頭像

      Linearfactor已經是函數,不需要宣告新變數

      1. 「mask555」的個人頭像

        因為我匯入的時候發現只有出現在雷達警示而已,並沒有出現在函數
        那原本這個程式是不是就需要宣告變數

        1. 「A+管理員」的個人頭像

          先匯入選股策略,linerfactor是在選股的排行使用,匯入後,就會出現函數了,而雷達只是引用選股的結果

          1. 「mask555」的個人頭像
  2. 「hunter」的個人頭像

    請問可以提供交易紀錄分析工具嗎  謝謝

  3. 「duanduan2004」的個人頭像

    查理哥Hello
    月營收有可能是負的嗎
    這樣寫是為了能 排除 當月 營收沒拿到資料的股票嗎?
    我對 資料沒拿到值 的狀況不太清楚 > <

    1. 「A+管理員」的個人頭像

      有些情況是可能是負的,但原本的邏輯是運用價格及波動計算出一個數值,數值高的就是有人在操控,未來有機會上漲,而營收的資料只是用來輔助判斷該股是不是有基本面的支持,而不是只是單純的價格操縱

  4. 「KevinWen」的個人頭像

    我覺得你的linefactor跟原始程式碼的精神是不一樣的,原始程式碼position = (s / v / volume)[(s 50_000) & (rev.notna())].is_largest(50)。他的linefactor是s/v/volume,你少除了volume當日成交量,這樣會有很大的問題。

    1. 「A+管理員」的個人頭像

      感謝提醒,之後來重新測試看看

相關文章

[VIP]用彼得林區邏輯 + XQ 選股中心打造成長型策略

本文優化用彼得林區的邏輯打造成長型策略一文,將績效進一步提升,達到今年年年獲利,而且每年平均有20%報酬率的策略。

用彼得林區邏輯 + XQ 選股中心打造成長型策略

本文將從彼得林區的選股邏輯出發,透過 XQ 選股中心工具與財報篩選條件,打造出一套適用於台股的成長型策略,並進行回測驗證其實戰效益。

為什麼基本面分析是你解鎖台股財富的關鍵?

有些投資人總能挑中像台積電(2330)這樣的贏家,而其他人卻誤踩群創(3481)的陷阱?答案是基本面分析——這就像一副透視眼鏡,幫你看穿股價背後的企業真相。在台股這場財富馬拉松中,基本面分析從獲利性、安全性、價值評估和成長性四大面向,讓你精準選股,避開風險,找到像台積電這樣的穩健巨擘!讓我們用財報數據,開啟你的財富之旅!

主流強勢操作法則-傑西里佛摩的股市操盤術

許多人都知道傳奇操盤手傑西里佛摩,市場上關於傑西里佛摩的書籍數不勝數,然而涉及到里佛摩操作手法的書卻少之又少;今天我們就來介紹傑西里佛摩的具體操作手法。

最近發文

加入我們

Categories

最新留言