[原創] 過去五次的除息成功率統計

0Shares
Image

除權息的旺季再過幾個月就來了,習慣上會提前準備好,免得到時手忙腳亂的,而我說的準備是啥呢,就是統計出過去股票除息的成功率,當作今年要參與除息股票的參考,免得到時都要除息了,還不知道該不該參加。

為了計算過去的除息成功率,用選股寫了一個腳本,計算每個股票過去五次除息後在一定天數內的成功次數,而為什麼是過去五次而不是過去五年是因為現在有些股票開始採用半年或季配息,懶得去區分了,所以就用過去五次,不過,程式碼內還是有限制在過去的五次要在近五年內發生,免得出現一堆很久以前有配息的股票也被篩出來。

選股結果
以下,先上選股結果,不想理程式碼的,可以到下方直接下載檔案取用,裡面統計了20天內跟40天內除息的成功次數,最多就是5次。

選股設定
選股內只有一個參數要設定,就是要統計幾天內的除息成功次數

由於程式碼寫的較沒有效率,所以在跑選股時,請注意以下兩點,免得跑很久都跑不出來,

  1. 持有區間,不要設定太長,40天以內最好
  2. 每次選股時,數量最好限制在100檔之內

程式碼說明

這個選股腳本,由於想要計算除息後一定的交易天數內的成功次數,因此在找到除息日之後,需要能找到N個交易天後的日期,而這個部分,在XQ內會有點困難,因為用dateadd函數時,並不會聰明的跳過非交易日,只是單純的日期相加,因此,這邊用了迴圈+getbaroffset去找到N天後且不包含非交易日的正確日期

而在找到正確的N天日期後,再往前比對N天,找到區間內最高點,反正就是這樣來來回回的計算日期、確認日期有無錯誤、區間有無錯誤…….,剩下就子己看程式碼了

input:gap(20,"查看幾天內");
var: x(0); //第X次除息

for i=gap*1.2 to gap*2 begin
    if getbaroffset(getfield("除息日期")[x])-getbaroffset(DateAdd(getfield("除息日期")[x], "D", i))+1=gap then begin 
        value3=DateAdd(getfield("除息日期")[x], "D", i);
        value4=i;
//		value5=date[getbaroffset(DateAdd(getfield("除息日期")[x], "D", i))+gap-1];
        value6=highest(high,gap)[getbaroffset(DateAdd(getfield("除息日期")[x], "D", i))];
        if value6>=close[getbaroffset(getfield("除息日期")[x])+1] then win201=1 else win201=0;
        break;
    end;
end;

程式碼比較沒效率,看看有沒有大師能幫忙修改了~~~

檔案下載

0Shares


發佈留言

在〈[原創] 過去五次的除息成功率統計〉中有 7 則留言

  1. 「youthful」的個人頭像
    youthful

    可以請教一下 要如何修改成近10次的除息成功率的腳本如何編寫?

    1. 「查理哥」的個人頭像
      查理哥

      我的寫法比較沒效率,所以需要增加6~10年的變數,及增加計算每一年成功或失敗的程式碼(原程式碼內一直重複的部分),不過不建議用到十年,XQ跑不太出來,我用五年,就已經要把股票拆好幾組分開回測了,用到10年會更慘

      還有個方式,不用修改程式碼,就是 2022年選股一次,2017年底找一天選股一次,匯到excel,把兩邊結果加總,一樣可以得出各個股票10年的除息成功率,不過,有的股票現在一年除息兩次到四次,這種就需要單獨挑出來去測了

    2. 「查理哥」的個人頭像
      查理哥

      您可以試著修改看看,看哪裡搞不懂,再提出討論

      1. 「youthful」的個人頭像
        youthful

        謝謝查理哥的建議 這個提問我有在XQ討論區提問 小幫手是給我這樣的建議 但我還是不懂

        https://forum.xq.com.tw/thread/%e6%83%b3%e8%ab%8b%e6%95%99%e4%b8%80%e4%b8%8b-%e9%80%99%e5%80%8b%e8%85%b3%e6%9c%ac%e6%83%b3%e6%94%b9%e7%82%ba%e8%bf%9110%e6%ac%a1%e6%88%90%e5%8a%9f%e9%99%a4%e6%81%af%e7%9a%84%e6%ac%a1%e6%95%b8%e8%a6%81%e5%a6%82%e4%bd%95%e6%94%b9/

        1.腳本裡面是用變數x來控制計算第幾次的除息。

        您可以寫個迴圈包住原本的腳本讓其計算近10次的成功次數,但這會導致大量運算,若商品數量過多可能會逾時。

        另外需注意,這樣的話要將 if value6>=close[getbaroffset(getfield(“除息日期”)[x])+1] then win201=1 else win201=0;

        改為 if value6>=close[getbaroffset(getfield(“除息日期”)[x])+1] then win201+=1,並在迴圈開始前將其歸0,這樣才會是計算總合次數。

        2.highest是用節省效能的寫法,所以文章中的 value6=highest(high,gap)[getbaroffset(DateAdd(getfield(“除息日期”)[x], “D”, i))]; 寫法計算應該會出錯。

        建議您可以改用 simplehighest。

        3.其用到 getbaroffset,故計算時需要有足夠的資料讀取筆數。

        您需要將資料讀取筆數設定的比往前10次除息的日期還要長,才可以正常運作。

        1. 「查理哥」的個人頭像
          查理哥

          哈,讚,我有看到您後來的回覆,希望小編能幫忙改出來

          XQ小幫手的建議中用迴圈,是比較聰明的寫法,但就會改動到比較多原本的程式碼,當初寫這個腳本花了很多時間,主要都是在比對是不是能正確的找出每次除權息的結果,不過我寫的方法是比較笨,硬寫出來

          另外,到底要用highest or simplehighest,我在XQ討論區應該也有詢問過,但我自己最終試出的結果是要用highest,不過,XQ後來幾次改版有動到highest的寫法,會不會出問題,還沒時間驗證過

          我的建議是,先用我原本建議的方法二,用不改動程式碼的方式做回測,順便檢查看看出來的數據是否有問題,腳本內有很多outputfield,就是用來檢查比對用的,可以將註解符號取消,回測時,就可以顯示出來了

          如您會去改寫或是小幫手有協助寫出來,真的要去細細比對出來的結果

          1. 「youthful」的個人頭像
            youthful

            這邊通知查理哥 小幫手有修改好摟 謝謝查理哥的研發製作

    3. 「查理哥」的個人頭像
      查理哥

      感謝喔

相關文章

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

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

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

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

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

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

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

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

最近發文

加入我們

Categories

最新留言