2011年10月11日 星期二

軟體介紹:自訂指標 (詳細說明文件) 2011/10/24 updated.

Chap 1. 架構與概念

"自訂指標" 模組的設計概念希望結合可程式化的彈性和圖形介面的方便性。

程式語言的抽象結構與多樣的函式庫能力,賦予程式師相當高的彈性以設計出不同軟體功能,但對金融商品來說,比較重要的是 "資料處理" 與 "資料呈現" 兩大功能,因此所需要的並不是一般性的程式語言,而是特定的語法結構、以及特殊的函式需求。為求讓一般使用者皆能使用,我們採用最易理解、最簡單的語句,以接近自然語言的方式來設計我們的語法。

圖形介面的設計需符合 "簡明"、"易學" 兩大主軸。將常用的語法結構以拆解的形式在圖形介面上呈現出來,可方便使用者快速組合出想達到的 "資料處理" 功能。而 "資料呈現" 目的是在畫面上做資料處理後的顯示工作,因此更適合以圖形介面的方式來設計。

簡單的說,"自訂指標" 模組為 "資料處理" 與 "資料呈現" 抽象化之後的架構,以簡明語法與圖形介面實作而得的產物,卻又不失其涵蓋性與擴充性。

以功能來區分的話,包含語法的 parser 和 error detector、語意的 interpreter、功能函式庫、中介抽象層、與程式的實作連結.... 等等。

指標的目的在指示適當的買賣動作,因此我們也結合買賣訊號的功能,讓此模組可自動做買賣建倉、加碼、平倉、反手、停損、停利等動作。

而以上所述功能,與回測機制整合後,將可對策略做反覆的檢驗及修正。除了可選擇日期做回測,我們也提供針對某種盤勢 (上漲、下跌、殺多、嘎空等等) 的回測功能,如此才能更明確檢驗策略的可用性。

除了做回測外,自訂的指標也可在模擬練習時套用,以便運用個人喜好指標來訓練各種盤勢變化。在今日/本月即時模式亦可使用,可練習適應真實盤勢的速度及緊張感。


Chap 2. 語法

資料處理基本語法結構如下:

一元運算子1    運算元1    二元運算子    一元運算子2    運算元2

以不同運算式舉例解釋,

Sec 2.1 數值運算式

範例 1: 5 × 9
=> 由 運算元1  二元運算子  運算元2 組成,運算元1 為 5, 二元運算子 為乘號 × , 運算元2 為 9,運算結果為數值 45


範例 2:√4 × √9 
=> 由一元運算子 "√ (開根號)" 分別對4和9做運算後,再用二元運算子 "乘號 ×" 將結果相乘,得到運算結果 6。

範例 3:(3 + 5) × (4 ÷ 2)
=> 括號 "("、"["、或 "{"  及其配對 ")"、"]"、或 "}" 用意在給予優先順序,括號內的運算式先運算,然後再運算剩下的部份。此例子得到數值 16。

範例 4 (巢狀括號運算式):{ (3 + 4) * [ (9 - 3) ÷ 2] }
=> 運算結果為數值 21 。

以上範例稱為數值運算式,顧名思義,算式裡的運算子與運算元只能處理數值,算式結果得到的也是數值。目前可使用的數值運算子如下:

  • + (加號)、- (減號)、× (乘號)、÷ (除號)
  • mod (取餘數):例如,(10 mod 3) 得到 1
  • +=  (累加號):此運算子將變數裡的值做累加後再存回此變數。例如,變數 X = 1,然後再做 X += 2,則 X 得到 3。(Note: 在 Sec 2.5 會解釋 "變數"、"設值" 的意義)
  • √:開根號,左方可帶數值 n (開 n 次方之意),例如 3√8 得到 2


Sec 2.2 比較運算式


範例 5:8 > 3
=> 此範例意義為比較數值 8 與 3  的大小,如 8 大於 ( > ) 3,則得到邏輯值 "是 (True, 常用 T 表示)",反之,得到邏輯值 "否 (False, 常用 F 表示)"。此範例得到邏輯值 "是 (True)"。運算子 ">" 稱為數值比較運算子, 左右兩方皆為數值。


範例 6:(3 > 1) equ (1 ≧ 3)
=> 運算子 "equ" 用來比較左右兩邊的值是否相等。此範例運算順序為:先運算 (3 > 1) 得到 "T",再運算 (1 > 3) 得到 "F",然後運算 (T equ F) 得到 F (False) 的邏輯值。


範例 7:(3 + 1) equ (1 + 3)
=> 先運算 (3 + 1) 得到 4,再運算 (1 + 3) 得到 4,然後運算 (4 equ 4) 得到 T (True) 的邏輯值。

以上範例稱為比較運算式,顧名思義,此類算式用於比較運算子左右兩方運算元的值 (可以是數值或邏輯值,但必須兩方同為數值或同為邏輯值),算式結果得到的是邏輯值。目前可使用的比較運算子如下:
  • < (小於)、> (大於)、≦ (小於或等於)、≧ (大於或等於)
  • ueq 或 ≠ (不等於):例如 (3 ≠ 3) 得到 False
  • equ (等於)
  • ucross:左方運算元往上突破右方運算元
  • dcross:左方運算元往下跌穿右方運算元 (Note: ucross 及 dcross 在 Sec 2.4 介紹 "陣列" 時會再說明)


Sec 2.3 邏輯運算式


範例 8:(3 > 1) and (1 ≧ 3)
=> 運算子 "and" 左右兩方的邏輯值皆為 T 時才得到邏輯值 T。先運算 (3 > 1) 得到 "T",再運算 (1 > 3) 得到 "F",然後運算 (T and F) 得到 F (False) 的邏輯值。


範例 9:(3 > 1) or (2 ≧ 4)
=> 運算子 "or" 的左右方只要有一個為 T,則得到 T。此範例得到邏輯值 True。


範例 10:Not (3 > 1)
=> 運算子 "Not" 為單元運算子,對右方的邏輯運算元取相反的邏輯值。此範例先算 (3 > 1) 得 T,再算 (Not T) 得到 False。

以上範例稱為邏輯運算式,顧名思義,此類算式用於對邏輯運算元做邏輯運算,算式結果得到邏輯值。目前可使用的邏輯運算子如下:
  • and ( "且" 之意義,左右兩方的邏輯值皆為 T 才得到 T,否則為 F)
  • or ( "或" 之意義,左右兩方的邏輯值其一為 T 則得到 T,否則為 F)
  • Not (對右方邏輯值取相反值)


範例 11:{ [ Not (3 equ 1) ] or (5 ≦ 5) } and [3 ueq (2 × 6) ]
=> 此複雜巢狀算式結合數值算式、邏輯算式、與比較算式。先算 (3 equ 1) 得 F,再算 [ Not F] 得 T,再算 (5 ≦ 5) 得 T,再算 { T or T } 得 T,再算 (2 × 6) 得 12,再算 [3 ueq 12] 得 T,最後算 T and T 最終得到邏輯值 True。

Sec 2.4 陣列


陣列的意義為依序排列的數值集合,其中個別元素的型態必須相同。

範例 1:{1,3,5,7,9} 為一個有5 個數值的數值陣列,依序包含 1、3、5、7、9。
範例 2:{T,T,F,F,T} 為一個有5 個邏輯值的邏輯陣列,依序包含 T、T、F、F、T。
範例 3:如果要用陣列表示台指期日K線收盤值,其值由第一日至第 N 日假設為

{8000, 8005, 7995, 7880, 7900, ... , 9100}

則以上陣列由 N 個數值組成,由左至右為第一日的收盤價、第二日收盤價、... 至第 N 日。

範例 4:如果要用陣列表示 5 分K棒的10 均線 (由前 10 根K棒計算出的均值),其值從第一個至第 N 個假設為

{8003.5, 8009.2, ... , 8013.4}

則以上陣列由 N 個數值組成,由左至右為第一個均值、第二個均值、... 至第 N 個均值。舉例來說,第一個均值為 08:50am 5 分K往前算 10 根K棒的均值,第二個為 08:55am 的均值,... 以此類推。

範例 5:由以上範例可推演出代表其他函式或指標計算得到的值的陣列,例如:成交量 STD (標準差) 取 20 (前 20 日)  的陣列;KD 指標中,取 K 值所得到的陣列;... 等等。

以陣列搭配之前提及的各種運算式時,其意義為取個別 index 的值出來做運算,例如:

範例 6:A × B, 其中 A 與 B 為數值陣列
=> 其意義為 {A1, A2, ..., An} × {B1, B2, ..., Bn} 得到 C 陣列 {C1, C2, ..., Cn},其中 C1 = A1 × B1, C2 = A2 × B2, ..., Cn = An × Bn。

同樣地,數值運算子只能搭配數值陣列,邏輯運算子只能搭配邏輯陣列,比較運算子的左右兩邊的陣列形態必須同為數值或同為邏輯。

範例 7:A + B, 其中 A 為數值陣列, B 為數值 5 
=> 其意義為 {A1, A2, ..., An} + 5,得到 C 陣列 {C1, C2, ..., Cn},其中 C1 = A1 + 5, C2 = A2 + 5, ..., Cn = An + 5。

範例 7 表示運算子的兩旁可以是陣列或是單個數值,只要其形態滿足運算子的限制即可。


範例 8:A ucross B
=> 假設 n 為陣列裡任一個索引,上述運算式等同運算 [ (An-1 < Bn-1) and (An > Bn) ],得到一個邏輯值。對陣列的每個索引做此運算,則得到一個邏輯陣列。


範例 9:A dcross B
=> 假設 n 為陣列裡任一個索引,上述運算式等同運算 [ (An-1 > Bn-1) and (An < Bn) ],得到一個邏輯值。對陣列的每個索引做此運算,則得到一個邏輯陣列。


Sec 2.5 變數、形態、命名、與設值運算子 (Assignment Operator )


上述各種運算式運算出來的結果,必須儲存起來 (存到電腦的儲存裝置, 記憶體或硬碟等),才能做後續使用。"變數" 的功能便是以某個名稱表示某種形態的值,其形態可以是:算數值、邏輯值、或陣列值共3種。名稱的目的是方便記憶,變數的 "變" 表示其值可以被改變。

範例 1:isALtB = (9 > 4)
=> 將 (9 > 4) 運算過後的值設定給變數 isALtB。此範例 isALtB 的值為邏輯值 True。


範例 2:numA = [ (2 * 3) + (4 * 5) ]
=> 將右方算式運算過後的值 26 設定給變數 numA。此處 numA 為算數值。

假設後續有另一個運算式如下:

numA = 9 ,則 numA 的值將被改變為 9。

變數的命名規則如下:
a) Case-sensitive:
也就是說 AA 與 aa 與 Aa 與 aA皆為不同的變數,但為了避免混淆,實作上請勿如此命名,只會造成自己的困擾。
b) 名稱第一個字母必須是文字,後續可以是文字或數字:
合法名稱 - 例如:"A1", "AB3n", 也可以是中文字, 如 "標準差5"
不合法名稱 - 例如:"1A", "123B3n", 或是將運算子當作變數 "+5", "A÷3"

符號 "=" 為 assignment operator,其意義為將右方的運算元之值 assign 給左方的變數。因此 "=" 不可出現在運算式的中間,例如:"num = (A = B)", "num + (A = B)", 如需要 "等於" 意義的比較運算,請使用之前提到的 equ 或 ueq。


Sec 2.6 條件式取值


條件式取值的基本結構如下:


( 邏輯運算元 ) ? ( 運算元)


其意義為,當 "邏輯運算元" 的邏輯值為 True 時,取 "運算元" 的值,如為 False,則延續上一個值。


範例 1:diff = [ ( var1 ucross var2 ) ? ( var1 - var2 ) ]
=> 當 var1 往上突破 var2 時,將 (var1 - var2) 的值存入變數 diff;如 ( var1 ucross var2 ) 不成立時,diff 的值不變動。因 var1 及 var2 為數值陣列 (因 ucross 只作用於數值陣列),所以 (var1 - var2) 也是數值陣列,使得 diff 也是數值陣列。
=> 舉例來說,假設 var1 為 {1, 3, 5, 7, 9},var2 為 {2, 4, 3, 3, 2},而 diff 初始值為 {-1, -1, -1, -1, -1}。當計算至第三個位置時,(var1 ucross var2) 成立,於是將 (var1 - var2) 的值 1 存入 diff 相對位置,因此 diff 變為 {-1, -1, 2, -1, -1}。接下來計算第 4 個及第 5 個位置,條件式皆為 False,所以 diff 維持上一個值,而最終得到陣列  {-1, -1, 2, 2, 2}。


Chap 3 運算式資料來源


簡單地說,運算式可拆解為運算子與運算元的組合。上述章節說明了各種運算子 (數值/比較/邏輯運算子),也提及運算元的資料形態 (數值/邏輯/陣列)。本章將進一步說明運算元的內涵及運用方式。

運算元可以是以下所列的幾種情況之其中一種:

a) 常數:
例如,"25"、"35.78"、"-5"

b) K棒相關數值:
選定 "週期" ( n 分K或 日/週/月K),"欄位" ("開盤值"、"最高值"、"最低值"、"收盤值"、"成交量"),及 "位移量" (往前或後位移,0 代表目前K棒、1 代表下一根K棒、-1 代表上根K棒,以此類推) 後所得到的數值

c) 已經建立的元件
將之前建立好的元件,當作運算元放入運算式中,以便得到新的運算結果。

d) 函式的輸出
將內建函式的運算結果,當作運算元放入運算式中,以便得到新的運算結果。

e) 指標的輸出
將內建指標的運算結果,當作運算元放入運算式中,以便得到新的運算結果。

以下分別敘述之。

Sec 3.1 常數為運算元

範例 1:[ (3 + 5) * 2 ]
=> 對運算子 + 來說,3 和 5 為其運算元;而對運算子 × 而言,(3+5) 得到的值 8 與右方的 2 為其運算元。3、5、8、2 皆為常數運算元。

Sec 3.2 K線相關數值為運算元

之前曾提及以陣列表示日K線收盤價的例子。如用數學式表示,如下

KSrc(日, Close)

此表示式的名稱為 KSrc (K Source 之意),包含 2 個參數:"週期" 和 "欄位"。此範例的週期為 "日",欄位為 "Close" (也就是收盤價)。所以此表示式以自然語言來說,為 "取得日K線中的收盤價"。

如果要進一步得到某個時間點的值,如下

KSrc(日, Close, shift)

"shift" 為位移量,表示要取K線中的哪個值 (也就是哪根K棒)。如為 0 則取今日之值,-5 則取前第 5 日之值。

範例 1:k日C = KSrc(日, Close, 0)
=> 將日K線收盤價設值給變數 "k日C",此變數的型態為數值陣列。

範例 2:k昨C = KSrc(日, Close, -1)
=> 將日K線昨日收盤價設值給變數 "k昨C",此變數的型態為數值陣列。

結合範例 1 & 2,以實際的值來說明,假設 "k日C" 的值為 {8000, 8001, 8002, 8003,...., 8010, 8011},則 "k昨C" 的值為 {7999, 8000, 8001, 8002,...., 8009, 8010}

範例 3:difCO = [ KSrc(日, Close, 0) - KSrc(日, Open, 0) ]
=> 將日K線收盤價減去日K線開盤價後設值給變數 "difCO",此變數的型態為數值陣列。
Sec 3.3 元件為運算元

元件為結合運算式、其資料形態、運算中間過程、引用或繼承、使用者註解... 等等資訊,抽象化後的產物。

對使用者或程式設計者來說,可將元件簡單看待成 "變數",則可較容易理解。而元件可當作另外一個新元件的運算元,以得到新的運算結果。
範例 1:

K日LC = KSrc(日, Close, -1)
K日O = KSrc(日, Open, 0)
diff = K日O - K日LC

則 diff 為一數值陣列,儲存了日K棒開盤價減去昨日收盤價之數值。

Sec 3.4 函式的輸出為運算元

"內建函式" 的意義為軟體內附的特定功能,實作成函數形式,讓使用者可以直接使用得到此功能的運算結果,亦可將運算結果做後續使用。由軟體提供常用功能的函式庫,可免除使用者重複撰寫相同功能的麻煩。

範例 1:max20 = MAX( KSrc(1,Close,0), 20 )
=> MAX(A, Len) 函式必須輸入兩個參數,第一個為數值陣列 A,第二個為長度 Len。其意義為從陣列 A 裡取前 Len 個數值,並得到其中最大值。故此範例得到 1 分K前 20 個收盤價裡的最大值,並存入 max20 變數,其形態為數值陣列。

範例 2:min20 = MIN( KSrc(1,Close,0), 20 )
=> MIN(A, Len) 函式與 MAX 函式用法類似,但取最小值。此範例得到 1 分K前 20 個收盤價裡的最小值,並存入 min20 變數,其形態為數值陣列。

範例 3:SMA( max20, 5)
=>SMA(A, Len) 函式取陣列 A 前 Len 個數值來做 Simple Moving Average (簡單數值平均)。此範例將 max20 (範例 1 的輸出) 做 SMA 計算,輸出為數值陣列 (因 max20 為數值陣列)。

以實際數值舉例,假設 max20 為 {7999, 8000, 8001, 8002, 8003, 8004, 8005, 8006, ...},則範例 3 的輸出為 {7999, 7999.2, 7999.6, 8000.2, 8001, 8002, 8003, 8004, ...}。當要取值的位置超出範圍時,則取極值。例如:要計算第一個位置時,前四個值皆超出範圍,故取極值 7999 替代。

範例 4:mUq = SMA( KSrc(日,Close,0), 20 ) ucross SMA( KSrc(日,Close,0), 60 )

可用的內建函式請參考 Chap 5 總結與摘要

Sec 3.5 指標的輸出為運算元

指標的意義與函式類似,只是指標為 well-known 的函式,常被用來指示金融商品的價格趨勢。指標的輸出可能有好幾個值,使用者可自選其中的值來做後續的處理。

範例 1:toBuy = [ MACD( KSrc(日,Close,0),12,26,9 ) > 50 ]
=> MACD (Moving Average Convergence / Divergence) 是常用的指標之一,其格式為 MACD(A, Len1, Len2, Len3),A 為數值陣列、Len1/Len2/Len3 為整數參數。此範例意義為 "以日K線計算其 MACD,當 MACD 的值大於 50 時,得到邏輯值 True,反之得到 False,並存入 toBuy 邏輯陣列中。

以實際數值舉例,假設計算而得的 MACD 為 {-20, 15, 37, 55, 69, 88, 112, ...},則 toBuy 的值為 {F, F, F, T, T, T, T, ...}

可用的指標函式請參考 Chap 5 總結與摘要


Chap 4 圖形介面使用簡介


在 "自訂指標" 視窗最左方有 "建立元件"、"建立指標"、及 "買賣訊號" 三個功能按鈕。依序簡介如下。


Sec 4.1 建立元件


透過下圖右方的 "建立算式" 圖形介面或是在 "運算式" 裡直接編輯,可以建立不同的運算式,而得到不同資料型態的元件 (算數值元件、邏輯值元件、數值陣列元件、邏輯陣列元件)。






當建立元件時,如使用設值運算子 (=) 並給定變數名稱,則元件建立後,在左上方元件列表裡的新建立元件會顯示此變數名稱以方便與其他元件區別。如沒有用 "=" ,則元件名稱會顯示 "ObjX" (第 X 個 "Object" 之意)。X 的初始值為 0,新建一個元件時,X 便會自動加 1。


任何點選動作的結果都會顯示於 "建立結果" 以及其下方的 "運算式"。"建立結果" 單純秀出對應動作的選擇值 (以顏色對應之)。"運算式" 則是實際用來做運算的表示式 (或 "程式"),可直接在此編輯算式,然後按 "新增" 或 "修改" 來 增加一個新元件 或 變更一個已存元件。


Note:要 "修改" 元件,必須先在列表中點選一個元件 (選定之元件會變為 "紅底白字")。


"元件註解" 用來輔助說明元件的涵義。當滑鼠移至某元件時,此註解會連同元件相關資訊顯示於右上方的 "說明區"。 

在元件列表裡,數值元件/數值陣列元件的預設顏色為背景白色、文字顏色為黑色;而邏輯元件/邏輯陣列元件的預設顏色為背景綠色、文字黑色。使用者可自行變更元件的文字顏色或背景顏色,以便凸顯其獨特意義。

Sec 4.2 建立指標


在步驟 1) 依照需求建立好各種元件之後,透過下圖裡的 "指標設定" 區,可選擇要顯示在線圖裡的數值陣列元件,並設定其顯示方式,並且可以進一步設定當邏輯陣列元件的值為 True 時,要如何改變之前所選定的數值陣列元件的顯示設定。


每一個數值陣列顯示於線圖時,便是一條線。選擇了 n 個數值元件,線圖中就會有 n 條線。因每條線的數值大小不同,而線圖的 Y-軸 會受限於最大最小值的顯示比例,必須注意有些線可能因此而不明顯。邏輯元件可做為進一步指示之用,當某個邏輯值為 True,可能代表多空轉折、壓力/支撐點、或者其他意義,使用者可根據需求自行定義。


邏輯陣列元件亦可用來改變K棒的外觀 (在 "條件式K線" 區設定),當其值為 True 時,可改變K棒的顏色、線條 style、比例、及顯示特定符號等。


"條件式K線" 區尚有一個 "依成交量畫線" 選項,其意義為 "當成交量達設定值 (如 500) 的倍數時,依此 500 個交易量的成交值畫出其相對K線"。




"其他設定" 區可選擇將指標顯示於原來的K線圖,或是獨立於一個新的指標線圖。另外亦可設定 "超買" 及 "超賣" 線,當線條進入超買 (或超賣) 區時,指示超買 (或超賣) 之意。


在指標列表裡,每個指標的預設顏色為背景白色、文字顏色為黑色。使用者可自行變更指標的文字顏色或背景顏色,以便凸顯其獨特意義。


建立好指標後,便可以按 "套用" 按鈕將設定套用至K線圖上,如下圖為一個範例,5分K與日K套用同一個自訂指標





在青色壓力趨勢線之下將K棒秀為綠色;而在紫色支撐趨勢線之上,則將K棒秀為紅色。另外有兩種關鍵K棒,當壓力趨勢線改變為支撐趨勢線時 (表示往上突破),則將K棒畫成上半紅色/下半黃色;而當支撐趨勢線改變為壓力趨勢線時 (表示往下跌穿),則將K棒畫成上半藍色/下半青色。


在5分K線圖中,另有各種層級壓力/支撐橫線,從上至下以藍色、青色、紅色+符號、紫色、亮紅色表示。


當練習交易時或者盤後分析時,都可以套用自訂指標輔助決策,進行買賣動作。



Sec 4.3 買賣訊號


透過下圖裡的圖形介面,可設定當邏輯陣列元件的值為 True 時,要做買入或賣出的動作。並可設定多 (或空) 單加碼條件、口數、及次數;以及多 (或空) 單平倉的條件。



在 "買入條件" 區中,還可以設定建倉口數,以及當買入條件成立但有空單時,是否平掉所有空單並買入多單。相同地,在 "賣出條件" 區,亦可設定口數,及當條件成立但有多單時,是否平多單並建倉空單。


在 "加碼條件" 區,可設定不同加碼方式/口數/次數。而在 "平倉條件" 區,則可以設立不同的停損/停利的方式。


下圖為一範例,買賣訊號設定為在關鍵K棒出現後的下一根K棒做市價買進或賣出的動作。






Sec 4.4 策略回測

當選定好買賣訊號,可搭配以下 "策略回測" 介面做回測動作。選項如下:

(1) 選擇商品:台指期、小台指、電子期、金融期
(2) 選擇線型 (週期):1 / 5 / 10 / 15 / 30 / 60 分K、自行輸入 1~30 間數字的 n 分K、日 / 週 / 月 K
(3) 選擇回測日期:某日 / 月、日期區間、最近數日 / 週 / 月 / 年、全部資料日期
(4) 選擇某盤勢做回測:上漲、下跌、盤整、殺多、嘎空、結算日、高低差
(5) "以日為單位" 或 "以月為單位":
此項可搭配 (4) 盤勢選擇,如選 "以日為單位" + "上漲",也就是選擇任一上漲日來做回測 (通常是搭配分K線型);如選 "以月為單位" + "下跌",則是任選一下跌月來做回測 (通常是搭配日K線型) ,月的開始日為某結算日的下一日,結束日為當月結算日。
(6) 某盤勢全部日期:
此項為搭配 (4) 盤勢選擇,如未勾選擇任選一日或一月 (以 (5) 為依據),如勾選,則是回測某盤勢所有日期。例如:選 "以日為單位" + "上漲" + "某盤勢全部日期" 則是回測所有的上漲日。


以下為一策略回測範例。選定 "自訂指標" 及 "買賣訊號" 後,在右方選擇台指期5分K,選擇回測日期區間為 2005/03/17 ~ 2005/04/20,再按下 "執行" 按鈕。


"策略回測" 結果視窗包含四個部分,詳述如下。

(1) 左上方顯示回測日期區間的K線圖:
"自訂指標" 裡的設定會套用在此K線圖上 (如下圖K線圖中的趨勢/壓力線及K棒顏色變化),根據 "買賣訊號" 得到的交易點位也會以 B 和 S 顯示。將滑鼠移至某點位上,會顯示其交易日期、買賣口數及均價、未平倉口數及均價。

(2) 左下方損益記錄圖:
顯示買賣過程及損益區線。將滑鼠移至某一圓點,會顯示此交易的平倉日期時間、單筆損益、及累計損益。使用滑鼠滾輪上下滑動,可將此損益圖放大以便觀看損益曲線全貌、或者縮小以便觀看某一交易的細節。

(3) 右上方買賣點位表:
此表列舉所有交易點位,如點選任一點位會將K線圖及損益表移至相對位置,以顯示此點位的K線圖及損益位置。

(4) 右下方最終日損益資訊:
顯示回測日期最後一日的最終回測結果。包含當日開/高/低/收/量資訊,以及最終買賣口數、已實現損益、未平倉口數及均價、和未實現損益。

Sec 4.5 儲存與載入


左下方有 "儲存" 與 "載入" 兩個按鈕。在任何時候,皆可按 "儲存" 將 元件列表/指標列表/買賣訊號列表中所有的資料儲存於本機硬碟中。但欲載入某個檔案,必須先點選 "建立元件",然後才能再按 "載入"。


Note:右方圖形介面上的選擇/設定並不會一併存入檔案,只有列表裡的資料才會儲存。如有未完成工作,請先按 "新增" 然後 "儲存",然後在下次載入後,點選未完成項,完成後按 "修改" 即可。


Sec 4.5 小結


透過以上介面,便可以達到設定自己的指標,以及自動執行買賣的動作。如此便可以交叉驗證自己對盤勢後續漲跌的解讀,是否與指標的行為一致,然後再對指標進行調整。


結合主畫面各種盤勢的載入、買賣點的呈現、與即時損益分析,更可以快速地驗證指標能否通過各種盤勢的考驗、檢驗指標的正確性、以及買賣策略是否可以達到穩定獲利的目標。




Chap 5 總結與摘要


Sec 5.1 資料形態
  • 數值 (numeric type)
    • 如 3, -5, 0.99, 8899
  • 邏輯值 (logic type)
    • True 或 False
  • 數值陣列 (numeric array)
    • {N1, N2, ...}, 其中 N1, N2, ... 皆為數值
  • 邏輯陣列 (logic array)
    • {L1, L2, ...}, 其中 L1, L2, ... 皆為邏輯值
Sec 5.2 數值運算子
  • + (加號)
  • - (減號)
  • × (乘號)
  • ÷ (除號)
  • mod (取餘數)
    • 例如,(10 mod 3) 得到 1
  • +=  (累加號)
    • 此運算子將變數裡的值做累加後再存回此變數。例如,變數 X = 1,然後再做 X += 2,則 X 得到 3 
  • √:開根號
    • 左方可帶數值 n (開 n 次方之意),例如 3√8 得到 2
Sec 5.3 邏輯運算子
  • and ( "且" 之意)
    • 左右兩方的邏輯值皆為 T 才得到 T,否則為 F)
  • or ( "或" 之意)
    • 左右兩方的邏輯值其一為 T 則得到 T,否則為 F)
  • Not (對右方邏輯值取相反值)
Sec 5.4 比較運算子
  • < (小於)
  • > (大於)
  • ≦ (小於或等於)
  • ≧ (大於或等於)
  • ueq 或 ≠ (不等於) 
  • equ (等於)
  • ucross (左方陣列往上突破右方陣列)
  • dcross (左方陣列往下跌穿右方陣列)
Sec 5.5 變數命名規則
  • Case-sensitive
    • AA 與 aa 與 Aa 與 aA皆為不同的變數,但為了避免混淆,實作上請勿如此命名,只會造成自己的困擾。
  • 名稱第一個字母必須是文字,後續可以是文字或數字:
    • 合法名稱 - 例如:"A1", "AB3n", 也可以是中文字, 如 "標準差5"
    • 不合法名稱 - 例如:"1A", "123B3n", 或是將運算子當作變數 "+5", "A÷3"
Sec 5.6 設值運算子 (assignment operator)
  • 符號 "=" 
    • 意義為將右方運算元之值 assign 給左方的變數。因此 "=" 不可出現在運算式的中間,例如:"num = (A = B)", "num + (A = B)"
    • 如需要 "等於" 意義的比較運算,請使用 equ 或 ueq
Sec 5.7 條件式取值
  • ( 邏輯運算元 ) ? ( 運算元)
    • 當 "邏輯運算元" 為 True 時,取 "運算元" 的值,如為 False,則延續上一個值。
Sec 5.8 K線及其表示式:
  • KSrc(週期, 欄位, 位移量)
    • 週期:tick,1~30 任意數,60,日,週,月
    • 欄位:Open,High,Low,Close,Volume
    • 位移量:任意負數
Sec 5.9 元件及其表示式:
  • 元件名稱
    • ObjX 或 符合命名規範之任意名稱 (中英文皆可)
  • 有位移量資訊時
    • Shft(ObjX, 位移量)
      • 位移量:任意負數
Sec 5.10 函式


以下函式定義中的 A 為數值陣列;Len 表示長度 Length 或週期 Interval,為正整數;Shft 表示位移量,為負整數。
  • ACU(A)
    • Accumulation, 做數值累加
  • SUM(A, Len)
    • Summation, 做 Len 個數值的總和
  • MAX(A, Len)
    • Maximum, 取 Len 個數值裡的最大值
  • MIN(A, Len)
    • Minimum, 取 Len 個數值裡的最小值
  • MEDIUM(A, Len)
    • Medium, 取 Len 個數值裡的中間值
  • STD(A, Len)
    • Standard Deviation, 取 Len 個數值計算其標準差
  • SMA(A, Len)
    • Simple Moving Average, 取 Len 個數值做簡單移動平均
  • WMA(A, Len)
    • Weighted Moving Average, 取 Len 個數值做加權移動平均
  • EMA(A, Len)
    • Exponential Moving Average, 取 Len 個數值做指數移動平均
  • GV(A, Shft)
    • 搭配 Shft 得到 A 中某個值,並儲存為常數
Sec 5.11 指標


以下指標定義中的 K 為 K 線資料表示式,例如 KSrc(1, Volume, 0) 或  KSrc(日, Close, -2)
LenX 表示長度 Length 或週期 Interval,為正整數。
  • BB(K, Len1, Len2, Part)
    • 名稱:Bolinger Band
    • Len1:計算 MA 的長度
    • Len2:採用的標準差倍數
    • Part:UBB 或 LBB (取 Upper Band 或 Lower Band)
  • KDJ(K, Len1, Len2, Len3, Len4, Len5, Part)
    • 名稱:KDJ 隨機指標
    • Len1:計算 RSV 的長度
    • Len2:計算 K 的平滑係數
    • Len3:計算 D 的平滑係數
    • Len4:計算 J 時,D 的倍數
    • Len5:計算 J 時,K 的倍數
    • Part:K 或 D 或 J
  • MACD(K, Len1, Len2, Len3 [, Signal])
    • 名稱:Moving Average Convergence / Divergence
    • Len1:計算 MACD 時第一個 EMA 的長度
    • Len2:計算 MACD 時第二個 EMA 的長度
    • Len3:計算 Signal 時 EMA 的長度
    • Signal:有帶 Signal 時, 取 Signal;沒有帶則取 MACD
  • PC(K, Len1, Part)
    • 名稱:Price Channel
    • Len1:計算最大/最小值時往前參考的數值個數
    • Part:UPC 或 LPC (取 Upper Band 或 Lower Band)
  • RSI(K, Len1 [, MRSI 或 PRSI])
    • 名稱:Relative Strength Index (相對強弱指標)
    • Len1:計算 RSI 往前參考的個數
    • MRSI:有帶此參數時, 採用修正計算式;沒有帶則取使用原本的簡易平均式。
    • PRSI:有帶此參數時, 採用反相計算式;沒有帶則取使用原本的簡易平均式。
  • RSV(K, Len1)
    • 名稱:Raw Stochastic Value (原始隨機值)
    • Len1:計算 RSV 往前參考的個數
  • SAR(K, AF, AFMax)
    • 名稱:Parabolic SAR - Stop and Reverse (停損點轉向指標)
    • AF:加速因子
    • AFMax:加速因子最大值
  • W%R(K, Len1)
    • 名稱:Williams %R (威廉指標)
    • Len1:計算 W%R 往前參考的個數

沒有留言:

張貼留言