資料讀取範圍與腳本執行的關係
2016-03-09 12:42:22
資料讀取範圍與腳本執行

當你在設定XS警示時,有沒有注意到有一個設定資料讀取範圍的參數,可以從這裡選擇筆數或是起始日期。這個參數的用意到底是什麼呢?在這一篇文章內就讓我們來為大家說明。

警示資料讀取範圍設定

XS語法入門內,我們有提到XS執行時的觀念是類似K線圖一樣,由左往右一筆一筆的執行。

BarSequence

而資料讀取範圍的這個參數,就是用來設定腳本要從哪裡開始執行起。如果你指定10筆的話,那系統就會提供最近10筆的K棒,然後從這10筆的第一根K棒(編號1)開始往右執行:

TB_1

在上圖內藍色這個區塊就是資料讀取範圍,這個數值的定義根據不同腳本類型而異:

腳本類型資料讀取範圍
指標指標總共要畫多少筆K棒,不包含當日即時的K棒範圍。 預設值是商品的全部資料長度。
警示警示腳本要先執行多少筆之後開始進行即時的洗價以及是否要觸發。請注意這個範圍不包含當日即時的K棒。預設值是200。

假設資料讀取範圍是10的話,那警示腳本會先執行當日之前的10根K棒,接下來執行當日即時的K棒,接下來等待收到即時資料後在執行時才會判斷是否要觸發。

選股選股腳本要執行多少筆之後才判斷最後一根K棒是否觸發。 預設值是10。

假設資料讀取範圍是10的話,則表示選股腳本總共要跑10筆資料,同時判斷第10筆資料是否ret=1。

那我們設定資料讀取範圍時,到底該用什麼樣子的數值才對呢?這個問題沒有一個標準答案,必須依照腳本的內容來判斷。有一些指標,例如EMA均線,或是MACD指標,由於計算時會不斷的引用前一筆計算的數值做累計的平均,像這樣子的腳本,就會需要一個比較大的資料讀取筆數。反之,如果一個腳本內只會使用到最近固定期別的數字的話,那資料讀取筆數就不用設的很大。

資料讀取參數除了可以指定最近筆數之外,也可以指定一個固定的起始日期,這樣子可以方便使用者有更精準的控制。另外如果實際上這個商品並沒有那麼多筆資料的話,系統就會自動調整資料讀取筆數,以商品有的資料為基準。

最大引用範圍

執行腳本時,除了資料讀取筆數這個參數會影響腳本執行的筆數之外,另外由於腳本內常常需要讀取之前的資料來做計算,例如要計算3日收盤價平均值時,會引用到上一根K棒的收盤價以及上上一根K棒的收盤價:

Value1 = (Close + Close[1] + Close[2]) / 3;

所以在腳本要執行之前,系統除了要準備資料讀取範圍內的K棒資料之外,另外也需要往前多準備一些K棒資料:

TB_2

在上面圖示內,資料讀取範圍左邊的這一個黃色區塊,就叫做最大引用範圍。這個範圍的目的是為了讓腳本可以正確的參考到目前執行的這根K棒往前的資料。同樣的,這個範圍的大小,會跟腳本內會參考到幾期前的資料有關。系統在開始執行時會提供一個預設值,如果在執行過程內腳本參考到了範圍之外的資料而發生錯誤的話,系統還是會繼續執行,改由下一根K棒開始重新計算。

在下面這張圖內,假如腳本的內容是

Value1 = Close - Close[5]; {計算5日漲幅}

由於最大引用筆數只有4筆,所以腳本要去讀取Close[5]的時候會發生錯誤。這時候系統就會重新調整執行的範圍,從發生錯誤的下一筆開始重新執行。

TB_3-1

發生錯誤之後系統自動重新調整最大引用範圍

TB_4

注意到系統會往右一筆重新執行,讓最大引用範圍變大,這樣子一來,執行的筆數會變少,可是就不會發生錯誤了。由於系統執行時會自動處理這種情形,使用者在大部分的情形底下可以完全忽略最大引用範圍這個參數。可是如果腳本的引用範圍很大的話,那則可以從腳本內透過函數的呼叫來告訴系統這個參數,已減少執行時發生錯誤的機會。這部分在底下會有範例說明。

講完了基本的觀念之後,接下來我們來看不同類型的腳本的設定方式。

XS自訂指標

在技術分析圖形上面放入XS自訂指標時,目前系統預設指標腳本的資料讀取筆數就是這個商品的全部歷史資料,技術分析的設定畫面上也就不提供指定資料讀取範圍的參數,你只要把指標放到技術分析圖上面就對了!!

針對特殊的情境,可以在屬性設定的視窗,直接指定計算資料的長度或起始日

IndicatorTB

或是可以透過以下的函數從腳本內控制指標資料的長度:

SetTotalBar(300);

如果在指標腳本內引用SetTotalBar(300)的話,那這個指標就只會畫最新的300筆資料(不包含當日即時的資料)。如果你希望可以從某個指定日期開始畫圖,可以使用這一版新提供的SetFirstBarDate函數:

SetFirstBarDate(20150101);

這樣子的話指標就會從20150101日開始畫圖。

至於最大引用範圍這個參數,系統會根據使用者指定的資料範圍來推算一個預設值。使用者也在腳本內透過SetBackBar這個函數來做控制:

SetBackBar(50);

另外還有一個 SetBarBack函數,他的用途跟SetBackBar是一模一樣的。

XS策略雷達

設定警示畫面內可以指定資料讀取筆數或是第一筆資料的日期:

警示資料讀取範圍設定

進階的使用者也可以從腳本內直接透過 SetTotalBar 或是 SetFirstBarDate 這兩個函數來控制資料讀取筆數。同樣的,在腳本內也可以透過 SetBackBar函數來控制最大引用筆數。

XS選股

設定選股策略時可以指定資料讀取筆數或是第一筆資料的日期:

選股腳本資料讀取範圍

進階的使用者也可以從腳本內直接透過 SetTotalBar 或是 SetFirstBarDate 這兩個函數來控制資料讀取筆數。

至於最大引用筆數這個參數,在XS選股系統內由於執行時已經事先讀取了全部的資料,所以使用者不需要再做設定。

以上為大家介紹了資料讀取筆數的觀念,以及設定的方式。相關的函數請參考函數說明文件。有任何問題或是建議的話,也歡迎您隨時跟我們說喔。