2016年5月24日 星期二

範例 - 多符號(股票)並行(InnerCore)

大多數狀況下我們的腳本都在處理單一標的物,但面對股票市場,除了單一標的物的時間價格分析外,還必須分析整體的強弱程度,不僅要讓程式告訴我們哪裡進出場,還要能告訴我們該進什麼股票...當然這是一個很大的題目,但我們在這僅討論工具的實現,如果哪天我有資格討論財富的實現,一定會大肆分享一番的XD。



這裡用一個簡單的範例說明如何加入一個副腳本(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,但怕語意不明,所以沒用在標題上。通常都是用在選股或需要比較強弱的狀況下,後面會再有一篇介紹如何排序結果。

沒有留言:

張貼留言

本人僅以個人知識經驗分享,多所無知,難免有錯,還請見諒。