在撰寫股票策略時,常會遇到某些策略需要篩選產業類別或是僅採用上市或上櫃股票,XQ沒辦法從一籃子股票中自動篩選產業類別,只能人工加入需要的產業類別股票,或是自訂商品組合,而這樣的方式,策略多了,常忘了每個策略要對應的股票,也不易於策略分享,而產業類別函數(stock_category),就是想要解決這個問題,把上市櫃所有股票丟進股票池,再運用自定義參數或變數的方式來篩選要使用的股票。
函數分為兩部份,第一部份在區別每個股票所對應的市場別(上市櫃)跟產業類別編碼,
input: stockid(StringSimple); input: marketid(numericref); //市場ID,1上市、2上櫃 input: catid(numericref); //股票類別ID input: catname(stringref); //股票類別名稱 if stockid="1101.tw" then begin marketid=1;catid=1; end; if stockid="1102.tw" then begin marketid=1;catid=1; end; if stockid="1103.tw" then begin marketid=1;catid=1; end; if stockid="1104.tw" then begin marketid=1;catid=1; end; if stockid="1108.tw" then begin marketid=1;catid=1; end; if stockid="1109.tw" then begin marketid=1;catid=1; end; if stockid="1110.tw" then begin marketid=1;catid=1; end; if stockid="1201.tw" then begin marketid=1;catid=2; end; if stockid="1203.tw" then begin marketid=1;catid=2; end; if stockid="1210.tw" then begin marketid=1;catid=2; end;
第二部份在找出類別編碼所對應的產業名稱
if catid=1 then catname="水泥工業類"; if catid=2 then catname="食品工業類"; if catid=3 then catname="塑膠工業類"; if catid=4 then catname="紡織纖維類"; if catid=5 then catname="電機機械類"; if catid=6 then catname="電器電纜類";
而在呼叫函數運用時,因為catname是字串,所以在變數需要定義為字串,否則無法編譯通過,下面為選股範例
if date<>date[1] then ret=1; var: marketid(0),catid(0); var: catname(""); //catname為字串,需要定義,不然無法編譯過 value1=stock_category(symbol, marketid, catid, catname); //value1可有可無,但比較容易讀 outputfield1(marketid, "市場別"); outputfield2(catid, "產業類別ID"); outputfield3(catname, "產業類別名稱");
不過,這個寫法,也是有缺點的,主要是
- 程式碼冗長,會拖慢程式執行速度
- 需要定期更新程式碼,加入新的股票
如果有其他更好的方式,也歡迎大家提出討論
PS: XQ點點滴滴有類似寫法,請看第七項,排除特定產業寫法
發佈留言
很抱歉,必須登入網站才能發佈留言。