2017年5月16日 星期二
2017年5月7日 星期日
2016年5月31日 星期二
範例 - 2D選股(列表視窗)
2D指的是個股的"時間軸"與"價格",就像看一般技術分析的K線圖一樣,只看得到當下的標的,沒辦法做整體分析,這我稱為2D。而3D就是同時能看到"所有標的"的"時間軸"與"價格",可以參考排序與過濾(選股)。
2D分析的邏輯就是僅能針對單一標的逐個執行,從腳本中可能看不太出來,不過事情就是這樣。
程式碼很好懂,看看程式註解應該就能掌握了。
比較會有問題的部分可能在設定,常有選股結果一片空白的情況,通常是下面幾種情形:
1.) 股票池的標的太少,試試看用[設定]>>[列表庫]>>[台股全部]。
2.) 報價資料的天數不夠,例如要找50ma向上的股票,但報價只有給40天。
3.) 選股條件太嚴苛。
大致上是這樣,設定的部分有哪些?可以看一下這個圖。
2D選股還有一種做法,不用寫腳本,用圖形介面點點選選就可以了,腳本在script/chart/99.AC提供/自訂選股.java。
2D分析的邏輯就是僅能針對單一標的逐個執行,從腳本中可能看不太出來,不過事情就是這樣。
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 61 62 63 64 65 66 67 | lib "personal"; public class MyScript extends CustomCorePersonal { //選單需要的變數 double MA_N = 10; double PRICE = 10; MA ma = null; public void init() { dbg.open(); //初始化圖形指標介面 (但要關閉一些項目) cc_cfg.SHOW_MENU = false; cc_cfg.PAINT_LAYER = false; CustomCore_UI_INIT(); //加入指標 (程式碼從圖形介面導出) ma = addIdct("K線", "移動平均_2", new MA("N[0]="+MA_N)); //加入欄位 tbl.addCol("日期", 2, RIGHT, true); tbl.addCol("收盤", 2, RIGHT, true); tbl.addCol(MA_N+"MA", 2, RIGHT, true); tbl.addCol("交易量", 2, RIGHT, true); } //製作選單 public void eventShowInput() { HtmlInputHelper html = new HtmlInputHelper(LIGHTGRAY); html.add("選出", new InpNum("MA_N", 1, 3), "日均線向上"); html.add("且 收盤價大於", new InpNum("PRICE", 1, 3), "的股票"); updateInput(html.get()); } public void endOfPeriod(int type) { //於EOH時才執行過濾判斷 if (type == EOH) { //stop()用於通知系統這個核心已經不再需要執行 //若是在盤中仍需執行則不用stop(),但須注意記憶體的用量 if (close.ref(0)<PRICE) {stop();return;} if (ma.isNullRef(1) || ma.ref(0)<ma.ref(1)) {stop();return;} //通過選股條件後,新增一列資料到列表中 AcTableRow row = tbl.newRow(symbol, name); tbl.addRow(row); row.setDate(date.ref(0)); row.setCell(0, date.ref(0).getTime(), date2Str(date.get(t), "yyyy-MM-dd"), black); row.setCell(1, close.ref(0), close.ref(0), black); row.setCell(2, ma.ref(0), round(ma.ref(0), 2), black); row.setCell(3, (long)vol.ref(0), black); stop(); } } } |
程式碼很好懂,看看程式註解應該就能掌握了。
比較會有問題的部分可能在設定,常有選股結果一片空白的情況,通常是下面幾種情形:
1.) 股票池的標的太少,試試看用[設定]>>[列表庫]>>[台股全部]。
2.) 報價資料的天數不夠,例如要找50ma向上的股票,但報價只有給40天。
3.) 選股條件太嚴苛。
大致上是這樣,設定的部分有哪些?可以看一下這個圖。
2D選股還有一種做法,不用寫腳本,用圖形介面點點選選就可以了,腳本在script/chart/99.AC提供/自訂選股.java。
2016年5月29日 星期日
怎麼進行版本更新?
AC一路上更新了很多次版本,也有改到面目全非的程度,好似換了軟體一樣,但軟體功能一直往上提升,有些陣痛也是值得的。
發展至今一直沒有"自動更新"的模組,其實也不是的,一開始是有的,但隨著更新過程不斷推翻太多的東西,自動更新也開始不適用了,所以還是要請各位手動更新,在此提供各位幾個小技巧,減少更新的陣痛。
小技巧
* 如果舊版本運做得很好,建議不要更新,或新舊版本並行。
* 要更新時,以新版本為基底,從舊版本選擇要保留的檔案覆蓋到新版本。
* 將自己開發的腳本放在屬於自己建立的目錄,更新時可以直接搬走。
* 要更新前先備份舊版本,並大膽嘗試直接覆蓋config目錄或其他xml設定檔到新版本。
* 最保險的方式就是全部用新版本,只將腳本搬過去,其餘再手動設定。
* 資料庫以5.x版為分界,前後版不能共用。
發展至今一直沒有"自動更新"的模組,其實也不是的,一開始是有的,但隨著更新過程不斷推翻太多的東西,自動更新也開始不適用了,所以還是要請各位手動更新,在此提供各位幾個小技巧,減少更新的陣痛。
小技巧
* 如果舊版本運做得很好,建議不要更新,或新舊版本並行。
* 要更新時,以新版本為基底,從舊版本選擇要保留的檔案覆蓋到新版本。
* 將自己開發的腳本放在屬於自己建立的目錄,更新時可以直接搬走。
* 要更新前先備份舊版本,並大膽嘗試直接覆蓋config目錄或其他xml設定檔到新版本。
* 最保險的方式就是全部用新版本,只將腳本搬過去,其餘再手動設定。
* 資料庫以5.x版為分界,前後版不能共用。
lib-api - 各指標API(accustomcore)
雖然我覺得很容易,但可能還是要提一下。我們已經知道如何透過圖形介面新增指標,也知道怎麼把指標的程式碼導出寫到腳本上,但是在腳本要怎麼取得這些指標的各種數值?
例如一個KD指標,我要如果分別取得k跟d值呢?我先講解一個例子,後面就依樣畫葫了。
KD (script\library\accustomcore\src\IDCTs\02.指標\KD.java)
KD指標的長的像是這樣,但剃除了多餘的部分,僅留下你們會用到的部分。
用法範例如下 : (14與15行)
MA
再看一個最常用的均線。
稍微有點不一樣,變成是一個MovinNum的陣列了,會這樣設計是為了讓使用者透過一個指標設定多條均線,但用法大同小異。
---
大致上都可以用類似kd.ref(0)直接取得該指標預設的值,除非該指標含有多種數值,就需要用類似kd.d.ref(0)的寫法。
恕我沒能將所有指標都像這樣帶各位瀏覽一遍,是覺得有點麻煩,但其實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這個部分是有開放原始碼的,大概看一下變數的宣告其實就知道有什麼變數能用,不算太難,也算是一個小小的考驗吧。
訂閱:
文章 (Atom)