農曆年後個股上漲機率統計

0Shares
Image

本文的完成要感謝貓老大跟院長的協助,搞出超有效率的程式碼

院長的社團在這,歡迎加入,很多好東西

每到農曆年前,就會看到新聞在討論台股年後的上漲機率,不過,這些討論多集中在大盤,少有個股,有沒有個股在過去的上漲機率統計呢? 來看看吧

 勝率統計表
下面表格為統計過去10年,每檔股票,年後第一個交易日開盤進場,持有不同天數的勝率,1勝率,代表的是年後第一個交易日收盤出場,2勝率代表的是年後第一個交易日收盤出場,其他依此類推

另外,要注意的是,總次數那邊的數字,如果是新股,總次數會<10,所以如果看到勝率100%的個股,先不要太高興,有可能是總次數沒有太多的關係

將不符合10次的股票去除後,上市櫃股只剩1317檔,將每檔個股勝率跟出場時間,做了一個統計,從下表可以看出,持股三天以上的且紅K的占比,比持股2天以內的占比高不少,似乎持股10天再出場,占比都比其他天還高,或可從在持股10天出場且佔九成以上勝率的個股去篩選接下來開紅盤要進場的股票

PS: 統計表的檔案,在下方,請自己匯入,可以自己調整要計算過去幾年,最多23年

 100%勝率個股數統計 
除了上面的統計外,這邊還用了幾個不同的條件做了交叉統計,在計算100%勝率出現的次數,這個統計的進出場及週期說明如下

  • 進場日分為封關日當天收盤進場跟開紅盤當日開盤進場
  • 出場則為開紅盤當天開盤出場、紅盤當天收盤出場,及年後第2、3、5、10、20個交易日的收盤出場
  • 統計過去5、10、15、20年,100%賺錢的個股數量

從上面的表格可以看出來,統計超過15年以後,100%賺錢的個股數量急速的減少,而且多是要等到持股10天以上才會獲利,而統計過去20,則100%能賺錢的個股數量則為0,這樣是不是代表過去10年勝率100%的個股,之後出現賠的機率變大了!!! 不過這個數據每年都會變化,是不是這樣,需要再做更深入的研究,這邊就先暫不討論

 封關日進場勝率較高嗎?
很多人應該每年都在糾結是不是該抱股過年,根據上面的比較表可以看出來,不管是統計過去幾年,不管是持股幾天出場,封關日收盤進場後,出現100%勝率的股票機率遠低於開紅盤再進場的方式

不過,這樣是不是代表,不應該封關日收盤進場呢? 應該也不一定,兩個進場方式,最終成為勝率高的股票是不同的,那如果封關日要進場,又該如何篩選股票呢?

以下表為例,統計的是過去10年的勝率,可以先把持股20天且勝率100%的股票列出,然後再看看其他持股天數的勝率,如果其他持股天數出現勝率較低的狀況,如和益、欣雄、達欣工,或許就可以不要列入考慮,只保留各持股天數勝率都比較高的個股,或許會比較有機會在前期就獲利先出場

上面篩選方式只是一個想法,沒有實證,大家可以自己調整,或再加入其他條件篩選

 開紅盤進場賺的到錢嗎?
採用跟上面同樣的方式,先將持股20天,勝率100%的股票列出,再挑選其他持股天數勝率至少能達到七成以上的股票,原本34檔股票,最後挑出15檔,不過,這只是我想測試的方式,可以年後來驗證看看,大家也可以測試自己的方式,看看年後會有怎樣的表現

PS: 第1天的勝率我是忽略的

 勝率高的一定賺錢嗎?
這也是個很有趣的問題,有沒有可能勝率高的股票是賺少賠多呢?這還真的是有可能的,院長也幫忙做了一個統計,用過去23年來看,有五檔股票紅K次數高達20次,但損益總和來看,有2檔依然是虧損的,如果把出場的停損利用的小點會不會好點呢? 那就有待大家試試了

 程式碼
這個選股方式的程式碼,還滿值得討論的,原本我是先用陣列列出過去每年開紅盤後第20個交易日的日期,然後用getbaroffset去找出年後各相對應日期的開盤價或收盤價,不過,這樣的寫法,資料讀取筆數會需要比要取的陣列日期還要長才能正確抓到相關數值,也造成選股要花非常久的時間,甚至失敗

input: n(15,"計算幾期勝率");

if date <> date[1] then ret=1;

Array: date20[23](0);   //農曆年開盤後的第20個交易日

date20[1] = 20000306;
date20[2] = 20010223;
date20[3] = 20020318;
date20[4] = 20030306;
date20[5] = 20040223;
date20[6] = 20050314;
date20[7] = 20060303;
date20[8] = 20070323;
date20[9] = 20080311;
date20[10] = 20090227;
date20[11] = 20100319;
date20[12] = 20110308;
date20[13] = 20120223;
date20[14] = 20130315;
date20[15] = 20140305;
date20[16] = 20150323;
date20[17] = 20160314;
date20[18] = 20170302;
date20[19] = 20180321;
date20[20] = 20190312;
date20[21] = 20200226;
date20[22] = 20210317;
date20[23] = 20220307;

value1=array_GetMaxIndex(date20);  //取得陣列最大值
if n > value1 then raiseRunTimeError("期數設定超出範圍");

vars: i(0),j(0);
i=0;
j=0;

    For i = (value1 - n + 1) to value1 
    //For i = 22 to 23 
    
    begin
    
        value2 = close[getbarOffset(date20[i])] - open[getbarOffset(date20[i])+19];
    
        if value2 >0 then i = 1 else i = 0;
        j = j + 1;
    
        outputField1(j, "20天勝率");

    end;

不過,在貓大跟院長的大力協助下,花了一個下午的時間,終於找出了一個高效率的寫法,資料讀取只要2筆,全部的股票放進去選,大概3分鐘內就可以跑出結果來

這個寫法非常有趣,用到了一個getfieldstartoffset函數,運用getfieldstartoffset(“date”,”D”),抓到個股起始日期的K棒數,然後用迴圈開始比對日期是否跟陣列日期是否相符,並同時取得該日期距今的K棒數,就可用來取得所需要的開盤價或收盤價,真的是很神奇的寫法,推薦大家了解下,真的超高效率

var: TotalBars (0);

TotalBars = GetFieldStartOffset ("Date", "D");

value3 = 0;

var: i(0), j(0);

for i = TotalBars downTo 0
   begin
     for j = 1 to 23
       begin
         if Date [i] = Date20 [j] then
           begin
             value2 = close[i - 19] - open[i];
             if value2 >0 then value3 = value3 + 1;
    if j=23 then
         begin
           outputField3(open[i], "2022開盤價");
                 outputField4(date[i],"2022開盤日");
                 outputField5(close[i - 19], "2022收盤價");
                 outputField6(date[i - 19], "2022收盤日");
         end;
           end;
       end;
  end;

 檔案下載 


檔案包含兩個選股策略,一個為封關收盤進場,一個為年後第一個交易日開盤進場

0Shares


發佈留言

在〈農曆年後個股上漲機率統計〉中有 5 則留言

  1. 「youthful」的個人頭像
    youthful

    if Date [i] = Date20 [j] then
    上面的程式碼是不是有問題?因為我用編譯的時候出現錯誤?

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

      程式碼沒有完全貼出來,請下載檔案匯入

      1. 「youthful」的個人頭像
        youthful

        好 另外,可以再請教一下,他是用日線讀取就好,還是有限定要年線頻率?是不是每一年都要更新腳本 因為我看裡面是用2022年為基礎的方式編寫的!謝謝哦!

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

          這個是用日線跑的,因為是要看最近幾年的勝率,2023年農曆年還沒過,所以一定是要從2022年開始起算,原本用陣列是想簡化程式,直接抓到每年年後的第一個交易日,但這樣就會需要每年新增陣列,如果想要更自動點,或許可以不用陣列,而是去判斷一二月時,是否有出現今天跟前一天K棒的日期差到7天以上,來判斷是不是遇到過年了,然後去做需要的計算,這樣應該就不用每年都調整code

          1. 「youthful」的個人頭像
            youthful

            謝謝查理哥的用心解答!

相關文章

[VIP] 當沖交易如何做到收K進場即時出場2

上一篇文章大概說明了如何在逐筆中運用condition[1]做到收K進場,即時出場,不過,這樣的運用還有些需要注意的細節,將會在本篇文章說明,不過寫的有點複雜,請耐心閱讀,對你的回測一定會有幫助的。

當沖交易如何做到收K進場即時出場1

想要讓回測績效貼近實單績效,你一定要知道如何做到收K進場即時出場,本文將不同的回測設定與程式碼撰寫方式做了比較,證明在逐筆回測中是可以收K後進場的,而且這樣的作法,自動交易也可以執行,不需要向過往把進場跟出場分開寫,更容易維護策略。

如何運用AI修正XS程式碼錯誤

現在很多人都在用AI來寫程式,使用XQ的你,是不是超級羨慕也去嘗試讓AI撰寫XS程式碼了呢? 相信你試過之後的結果都會很失望吧,你以為他給你的是XS程式碼,但常常都是其他軟體的語法。

[AI] 定期定額投資績效計算頁面

定期定額投資的績效表現在XQ上並不容易回測,本文將會介紹我如何運用量化交易實驗室的AI,在短時間內就寫出一個可以計算定期定投入績效的XQ看盤頁面。

最近發文

加入我們

Categories

最新留言