2016年5月29日 星期日

怎麼進行版本更新?

AC一路上更新了很多次版本,也有改到面目全非的程度,好似換了軟體一樣,但軟體功能一直往上提升,有些陣痛也是值得的。

發展至今一直沒有"自動更新"的模組,其實也不是的,一開始是有的,但隨著更新過程不斷推翻太多的東西,自動更新也開始不適用了,所以還是要請各位手動更新,在此提供各位幾個小技巧,減少更新的陣痛。

小技巧
* 如果舊版本運做得很好,建議不要更新,或新舊版本並行。

* 要更新時,以新版本為基底,從舊版本選擇要保留的檔案覆蓋到新版本。

* 將自己開發的腳本放在屬於自己建立的目錄,更新時可以直接搬走。

* 要更新前先備份舊版本,並大膽嘗試直接覆蓋config目錄或其他xml設定檔到新版本。

* 最保險的方式就是全部用新版本,只將腳本搬過去,其餘再手動設定。

* 資料庫以5.x版為分界,前後版不能共用。

lib-api - 各指標API(accustomcore)

雖然我覺得很容易,但可能還是要提一下。我們已經知道如何透過圖形介面新增指標,也知道怎麼把指標的程式碼導出寫到腳本上,但是在腳本要怎麼取得這些指標的各種數值?

例如一個KD指標,我要如果分別取得k跟d值呢?我先講解一個例子,後面就依樣畫葫了。

KD (script\library\accustomcore\src\IDCTs\02.指標\KD.java)
KD指標的長的像是這樣,但剃除了多餘的部分,僅留下你們會用到的部分。
1
2
3
4
5
public class KD extends IDCT
{
 public MovinNum k;
 public MovinNum d;
}

用法範例如下 : (14與15行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public class MyScript extends CustomCorePersonal
{
 KD kd = addIdct("KD", "KD_3", new KD("")); 

 public void init()
 {
  CustomCore_UI_INIT();
 }

 public void endOfPeriod(int type)
 {
  if (type == EOH)
  {
   dbg.print("K為 : " + kd.k.ref(0));
   dbg.print("D為 : " + kd.d.ref(0));
  }
 }
}


MA
再看一個最常用的均線。
1
2
3
4
public class MA extends IDCT
{
 MovinNum[] value_arr = new MovinNum[DEF_VAR_SIZE];
}

稍微有點不一樣,變成是一個MovinNum的陣列了,會這樣設計是為了讓使用者透過一個指標設定多條均線,但用法大同小異。

1
2
3
dbg.print("預設(同第一條均線) " + ma.ref(0));
dbg.print("第一條均線 " + ma.value_arr[0].ref(0));
dbg.print("第二條均線 " + ma.value_arr[1].ref(0));


---

大致上都可以用類似kd.ref(0)直接取得該指標預設的值,除非該指標含有多種數值,就需要用類似kd.d.ref(0)的寫法。

恕我沒能將所有指標都像這樣帶各位瀏覽一遍,是覺得有點麻煩,但其實accustomcore這個部分是有開放原始碼的,大概看一下變數的宣告其實就知道有什麼變數能用,不算太難,也算是一個小小的考驗吧。

程式交易系統(ACTrader)

這個交易系統我執行了差不多四、五年了,一直沒有釋出,只有幾個朋友在玩,因為早期的版本不完善、不容易上手,直到最近感覺各方面似乎都還挺不錯的,才有了釋出的想法。



2016年5月25日 星期三

lib-api - 指標圖形介面(accustomcore)

除非是要做系統應用的開發,否則這個章節用到的東西極少,一般專注在指標使用、策略、選股等的使用者可以跳過不看。

為求簡單,這個章節只就介面部分提及一些比較有可能用到的變數、函數、類別,更精準用法可以直接參考原始碼(script/library/accustomcore)。

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