2016年5月16日 星期一

acs-api快速入門(4) - 畫圖與雜項

這是最後一個章節,也是重點比較少的章節,用一個範例快速解決它吧!剩下的以後再以範例解說。



 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
public class MyScript extends ScriptCore
{
  //建立一個圖層
  Layer layer = addLayer(null, 0, "range=0~0.98;blank=3%;Y-AXIS=價格");

  //建立一個叫ma5的資料容器
  MovinNum ma5 = addMovinNum(null);

  public void init()
  {
    //畫K線
    layer.drawSteadyKBar(open, high, low, close, new ColorRef(close, open, colorup, colorbd, colordn, colorbd));
    
    //畫均線
    layer.drawSteadyLine(ma5, 2, true, new ColorRef(blue));

    //新增標籤
    layer.addValueTag(new ValueTag()
    {
      public void update(int t)
      {
        text = new String[]{"收盤價", ""+close.get(t)};
        value = close.get(t);
        bgcolor = new Color(0x505050);
        textcolor = gold;
      }
    });
  }

  public void run()
  {
    //計算ma5
    ma5.ma(close, 0, 5);
  }

  public void eventHilightMovin(int t)
  {
    //更新標題列
    updateTitle("<b>" + date2Str(date.get(t), "yyyy-MM-dd(E) ") + name);
  }
}

執行結果:

講兩個重點就好:

1. layer.draw...與layer.drawSteady...的差別 :

drawSteady是在init()時一次性設定後就完事了,內部會依照給入參數全部K棒一起畫。而沒有加Steady的draw是針對單一K棒或單一事件的畫法,每次畫完的下一次run()必須重新再呼叫函數畫過一次,否則圖樣就會消失,若要圖樣不消失可以在draw函數呼叫前先呼叫drawSteadyNext(),即可將圖樣釘住。

千萬不要把drawSteady放在run()裡,因為run()通常有可能跑上千次,會變成一樣的東西重複畫幾千遍,導致系統緩慢。另外若是畫圖的函數不夠用其實也是可以自建的,往後的範例會再提到。

2. ColorRef是什麼?

我稱它叫顏色參考,依照給入的值與顏色,可以判斷什麼情況使用什麼顏色。詳細可以參考文件。

3. 加入價格標籤?

參考18~27行,很容易理解。

---

不知道大家有沒發現這個範例沒有CustomCore_UI_INIT();也沒繼承CustomCore而是直接繼承ScriptCore?其實就是說這個範例沒有用"指標圖形介面"的library,為什麼不用呢?因為"指標圖形介面"其實已經整合了很多相關畫圖的功能,使用者其實不太需要自己處理圖層的部分,除非不打算使用"指標圖形介面"的library,或是要做比較低階的開發。

---

四個章節大概講完了acs-api的主要議題,還有些東西要用範例講會比較好,一方面我好解說,另一方面你們可以複製貼上。就降拉~謝謝收看!

沒有留言:

張貼留言

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