除權息的旺季再過幾個月就來了,習慣上會提前準備好,免得到時手忙腳亂的,而我說的準備是啥呢,就是統計出過去股票除息的成功率,當作今年要參與除息股票的參考,免得到時都要除息了,還不知道該不該參加。
為了計算過去的除息成功率,用選股寫了一個腳本,計算每個股票過去五次除息後在一定天數內的成功次數,而為什麼是過去五次而不是過去五年是因為現在有些股票開始採用半年或季配息,懶得去區分了,所以就用過去五次,不過,程式碼內還是有限制在過去的五次要在近五年內發生,免得出現一堆很久以前有配息的股票也被篩出來。
選股結果
以下,先上選股結果,不想理程式碼的,可以到下方直接下載檔案取用,裡面統計了20天內跟40天內除息的成功次數,最多就是5次。

選股設定
選股內只有一個參數要設定,就是要統計幾天內的除息成功次數
由於程式碼寫的較沒有效率,所以在跑選股時,請注意以下兩點,免得跑很久都跑不出來,
- 持有區間,不要設定太長,40天以內最好
- 每次選股時,數量最好限制在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;
程式碼比較沒效率,看看有沒有大師能幫忙修改了~~~
檔案下載

![[VIP] XQ版RS相對強弱PR指標](https://cdn.aplus.trading/wp-content/uploads/2024/11/a-captivating-illustration-of-the-relative-strengt-t0oo_72pQ6-5mpJuqSoDQ-h1cSwJr9Qv-Gwfy41ebhgw-870x570.jpeg)
![[VIP]用彼得林區邏輯 + XQ 選股中心打造成長型策略](https://cdn.aplus.trading/wp-content/uploads/2025/07/a-captivating-modern-digital-illustratio_7OaYIF8kT4aUUDGs6AJjBw_tLDjMWjvSXWPG5ycIUliAg-870x570.jpeg)



![[VIP] 短線策略8-月營收創高策略](https://cdn.aplus.trading/wp-content/uploads/2025/11/cover-150x150.jpg)
![[VIP] 短線策略7-買賣家數集中度策略](https://cdn.aplus.trading/wp-content/uploads/2025/10/a-digital-illustration-of-a-stock-chart-_xtRnCKHdQnK_7iicsxxCHA_l-Cu3wWZQSapjzKMZmrLnw-150x150.jpeg)

可以請教一下 要如何修改成近10次的除息成功率的腳本如何編寫?
我的寫法比較沒效率,所以需要增加6~10年的變數,及增加計算每一年成功或失敗的程式碼(原程式碼內一直重複的部分),不過不建議用到十年,XQ跑不太出來,我用五年,就已經要把股票拆好幾組分開回測了,用到10年會更慘
還有個方式,不用修改程式碼,就是 2022年選股一次,2017年底找一天選股一次,匯到excel,把兩邊結果加總,一樣可以得出各個股票10年的除息成功率,不過,有的股票現在一年除息兩次到四次,這種就需要單獨挑出來去測了
您可以試著修改看看,看哪裡搞不懂,再提出討論
謝謝查理哥的建議 這個提問我有在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次除息的日期還要長,才可以正常運作。
哈,讚,我有看到您後來的回覆,希望小編能幫忙改出來
XQ小幫手的建議中用迴圈,是比較聰明的寫法,但就會改動到比較多原本的程式碼,當初寫這個腳本花了很多時間,主要都是在比對是不是能正確的找出每次除權息的結果,不過我寫的方法是比較笨,硬寫出來
另外,到底要用highest or simplehighest,我在XQ討論區應該也有詢問過,但我自己最終試出的結果是要用highest,不過,XQ後來幾次改版有動到highest的寫法,會不會出問題,還沒時間驗證過
我的建議是,先用我原本建議的方法二,用不改動程式碼的方式做回測,順便檢查看看出來的數據是否有問題,腳本內有很多outputfield,就是用來檢查比對用的,可以將註解符號取消,回測時,就可以顯示出來了
如您會去改寫或是小幫手有協助寫出來,真的要去細細比對出來的結果
這邊通知查理哥 小幫手有修改好摟 謝謝查理哥的研發製作
感謝喔