2016年5月3日 星期二

腳本中預先實體化指標

在前面有介紹過指標圖形介面操作示範 ,教我們怎麼透過圖形介面在圖格中加上指標,但這樣建完了指標要怎麼在腳本中使用啊?


最陽春的腳本
既然都要提到腳本了,就先來看一下最陽春的腳本長什麼樣子
1
2
3
4
5
6
7
8
9
lib "personal";

public class MyScript extends CustomCorePersonal
{
 public void init()
 {
  CustomCore_UI_INIT();
 }
}

行1 : 引用script\library\personal下的程式碼。
行3 : MyScript是主腳本類別的固定名稱,後面並說明這個類別繼承了另一個叫CustomCorePersonal的類別。
行7 : CustomCore_UI_INIT()是指標圖形介面初始化的函數。
這樣的寫法幾乎是固定的,如果上面的解釋真的看不懂也無所謂,接觸多了自然就懂了。




腳本中預先實體化指標
1. 先點選[設定]
2. 再點選[導出指標參數],就可以在除錯視窗中看到一串程式碼。


3. 再將這串程式碼貼到你的程式中即可。如下範例的5~10行。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
lib "personal";

public class MyScript extends CustomCorePersonal
{
 IDCT_K idct_k = addIdct("K線", "K線", new IDCT_K("_tag[0]=true&_color[0]=4290752892")); 
 BOLL boll = addIdct("K線", "布林通道", new BOLL("_color[0]=4278203391")); 
 DEDUCTION deduction = addIdct("K線", "標記扣抵_3", new DEDUCTION("_color[0]=4278203391")); 
 IDCT_VOL idct_vol = addIdct("量", "成交量_4", new IDCT_VOL("")); 
 KD kd = addIdct("KD", "KD_5", new KD("")); 
 SIGNAL_TWO_LINE signal_two_line = addIdct("KD", "交叉信號_6", new SIGNAL_TWO_LINE("_ref_sample_id[0]=KD_5.K&_ref_sample_id[10]=KD_5.D")); 

 public void init()
 {
  CustomCore_UI_INIT();
 }
}

4. 之後取值可以寫成像是kd.ref(0)或kd.k.ref(0)之類,若要詳細知道指標裡有哪些變數,可以到script\library\accustomcore\src\IDCTs\下找找原始碼。

這個範例腳本執行出來會與原本用圖形介面建立的畫面有一些些差別,因為並沒有導出圖格選項的參數,未來會再加強。

是跟以往直接敲程式碼的方式有些不同,但我比較喜歡現在這樣,不用記太多類別名稱,宣告跟參數調整都透過圖形介面完成,確定了再貼上程式碼。


動態取得指標

還有另一種做法,比較不建議就是了,看看就好,或是直接跳過。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
lib "personal";

public class MyScript extends CustomCorePersonal
{
 public void init()
 {
  //對CustomCore_UI初始化
  CustomCore_UI_INIT();

  IDCT kd = getIdct("KD_5"); //若指標"KD_5"沒找到會被中斷執行,可暫時將這行移除
  dbg.print("有取得指標'KD_5'嗎?" + (kd!=null?"yes":"no"));
 }
}

看第10行就好,這個方法連宣告都免了,直接用指標的名稱取得指標物件,但因為這樣的做法變成一定要先透過圖形介面建立好指標,否則腳本也不能運作,腳本就失去了獨立執行的機能,所以我比較不建議這樣做。

在列表式腳本中加上指標

上面講的都是圖格式的腳本,那列表式的腳本呢?
 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
lib "personal";

public class MyScript extends CustomCore
{
 KD kd = addIdct("KD", "KD_5", new KD("")); 


 public void init()
 {
  cc_cfg.SHOW_MENU = false;
  cc_cfg.PAINT_LAYER = false;
  CustomCore_UI_INIT();

  tbl.addCol("收盤", 2, RIGHT, true);
  tbl.addCol("KD.K", 2, RIGHT, true);
 }

 public void endOfPeriod(int type)
 {
  if (type != EOH)
   return;
  if (t<=0)
   return;

  AcTableRow row = tbl.newRow(symbol, name);
  tbl.addRow(row);

  row.setCell(0, close.ref(0), close.ref(0), black);
  row.setCell(1, kd.ref(0), round(kd.ref(0), 1), black);
 }
}

也差不多,在CustomCore_UI_INIT()的前面加兩行,取消圖格與側邊選單的設定即可。

---

可能有人發現...KD的宣告都沒設定週期參數?...
其實只要在圖形介面設定過再導出一次就會有了,如果都沒有設定過就會用預設值,也就不會導出了。

沒有留言:

張貼留言

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