2D分析的邏輯就是僅能針對單一標的逐個執行,從腳本中可能看不太出來,不過事情就是這樣。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | lib "personal"; public class MyScript extends CustomCorePersonal { //選單需要的變數 double MA_N = 10; double PRICE = 10; MA ma = null; public void init() { dbg.open(); //初始化圖形指標介面 (但要關閉一些項目) cc_cfg.SHOW_MENU = false; cc_cfg.PAINT_LAYER = false; CustomCore_UI_INIT(); //加入指標 (程式碼從圖形介面導出) ma = addIdct("K線", "移動平均_2", new MA("N[0]="+MA_N)); //加入欄位 tbl.addCol("日期", 2, RIGHT, true); tbl.addCol("收盤", 2, RIGHT, true); tbl.addCol(MA_N+"MA", 2, RIGHT, true); tbl.addCol("交易量", 2, RIGHT, true); } //製作選單 public void eventShowInput() { HtmlInputHelper html = new HtmlInputHelper(LIGHTGRAY); html.add("選出", new InpNum("MA_N", 1, 3), "日均線向上"); html.add("且 收盤價大於", new InpNum("PRICE", 1, 3), "的股票"); updateInput(html.get()); } public void endOfPeriod(int type) { //於EOH時才執行過濾判斷 if (type == EOH) { //stop()用於通知系統這個核心已經不再需要執行 //若是在盤中仍需執行則不用stop(),但須注意記憶體的用量 if (close.ref(0)<PRICE) {stop();return;} if (ma.isNullRef(1) || ma.ref(0)<ma.ref(1)) {stop();return;} //通過選股條件後,新增一列資料到列表中 AcTableRow row = tbl.newRow(symbol, name); tbl.addRow(row); row.setDate(date.ref(0)); row.setCell(0, date.ref(0).getTime(), date2Str(date.get(t), "yyyy-MM-dd"), black); row.setCell(1, close.ref(0), close.ref(0), black); row.setCell(2, ma.ref(0), round(ma.ref(0), 2), black); row.setCell(3, (long)vol.ref(0), black); stop(); } } } |
程式碼很好懂,看看程式註解應該就能掌握了。
比較會有問題的部分可能在設定,常有選股結果一片空白的情況,通常是下面幾種情形:
1.) 股票池的標的太少,試試看用[設定]>>[列表庫]>>[台股全部]。
2.) 報價資料的天數不夠,例如要找50ma向上的股票,但報價只有給40天。
3.) 選股條件太嚴苛。
大致上是這樣,設定的部分有哪些?可以看一下這個圖。
2D選股還有一種做法,不用寫腳本,用圖形介面點點選選就可以了,腳本在script/chart/99.AC提供/自訂選股.java。
沒有留言:
張貼留言