IntrabarPersist

IntrabarPersist語法用來控制變數數值在執行時的變化邏輯。

在程式執行時,變數的數值會自動延續前一筆bar最後的計算值。

以下是一個簡單的示意圖,說明變數的數值在執行時的變化情形。

注意到在上圖內變數的數值都會從上一筆執行後的結果延續到下一筆bar。

如果上述的腳本被設定成逐筆洗價的話(也就是說同一筆bar可能執行很多次),則變數的數值變化情形如下:

請注意,雖然第二筆bar因為價位變化的關係被執行了兩次,可是每次執行時,Counter變數的數值還是都會先變成上一筆bar最後執行的結果(1)之後才開始執行第二筆bar。(圖示內紅色標記處)。所以雖然第二筆bar執行了兩次,Counter在離開第二筆bar的時候的數值還是為2。

這個行為是為了要保證逐筆洗價時最後算出來的數值只跟這一筆bar的價位有關,而不是跟這一筆bar被執行了多少次有關。

可是在某些情境底下可能需要保留最後一次計算後的數值(不管是否有換bar),此時就可以使用IntrabarPersist的語法:

input: atVolume(100); setinputname(1,"大單門檻");


variable: intrabarpersist Xtime(0);         //計數器


Volumestamp = q_DailyVolume;


if Date > date[1] then Xtime = 0; // 開盤那根要歸0次數


if q_tickvolume > 100 then Xtime += 1; // 量夠大就加1次


if Xtime > 10  then  
begin
	ret = 1;
	Xtime = 0;
end;

上述範例是一個警示腳本,使用日線頻率,逐筆洗價模式來執行。我們希望當大單(目前定義成單筆成交量 > 100張)的個數超過10之後就觸發。由於是日線模式,所以每次重新執行時 XTime都會變成0,無法實際統計發生大單的次數。

解決方式則是把XTime設為IntrabarPersist.一旦這樣設定之後,XTime的數值就不會因為重新執行這根bar而被還原,也因此可以正確的統計到在當日出現大單的個數。