這裡用一個簡單的範例說明如何加入一個副腳本(InnerCore)。
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 | lib "personal"; public class MyScript extends CustomCorePersonal implements InpEventListener { HtmlPanel my_panel = new HtmlPanel(BLACK, BLACK, false, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); MyInnerScript inner = null; public void init() { dbg.open(); CustomCore_UI_INIT(); //建立副腳本核心,並令其以周K執行 inner = new MyInnerScript(); addInnerCore(inner, "tw.IX.0001", null, null, 1, PERIOD_WEEK, PRECISE_DAY, false); //在側邊選單加入按鈕 HtmlInputHelper html = new HtmlInputHelper(LIGHTGRAY); html.add(new InpBtn("主核心", this, new Args("cmd=main"))); html.add(new InpBtn("副核心", this, new Args("cmd=inner"))); my_panel.setText(html.get()); addTabPanel("選擇顯示", my_panel); } public void endOfPeriod(int type) { //在主副腳本都執行完歷史資料時顯示最後一天的報價 if (type == EOAH) { dbg.print("主:" + name + " " + YMD(date.ref(0)) + " 收盤 : " + close.ref(0)); dbg.print("副:" + inner.name + " " + YMD(inner.date.ref(0)) + " 收盤 : " + inner.close.ref(0)); } } //處理按鈕事件 public boolean eventOccurred(InpComponent comp, Args arg) { if (arg != null && arg.get("cmd").equals("main")) changeView(this); if (arg != null && arg.get("cmd").equals("inner")) changeView(inner); return false; } } class MyInnerScript extends CustomCorePersonal { KD kd = addIdct("KD", "KD_2", new KD("")); public void init() { CustomCore_UI_INIT(); } //給副腳本一個不同於主腳本的Instance Name,可以區別兩者的指標設定 public String getInsName() { return "inner"; } } |
重點在15行,以及46~60的副腳本類別。可以在主腳本執行期間加入N個副腳本,並動態指定標的物符號、K線週期、執行時間區域等參數,詳細函數參數可以直接參考文件。
這種執行方式我又稱"多核心",核心指的是ScriptCore,但怕語意不明,所以沒用在標題上。通常都是用在選股或需要比較強弱的狀況下,後面會再有一篇介紹如何排序結果。
沒有留言:
張貼留言