警示腳本運作的流程

一,警示腳本運作的流程


寫完警示腳本,接下來,就可以開始設定警示,讓電腦幫我們根據腳本,掃瞄我們設定的商品,然後當符合警示條件時,讓電腦通知我們。

上述的這些動作,XS提供了一個叫作"進階警示清單"的平台來做這作事。
當我們完成腳本之後,可以在XQ最上層的選單中,找到"策略"這個選項,在這選項中有一個進階警示清單的項目,點選這個項目,就可以進到進階警示設定的工作平台。

在點選"進階警示清單後,XQ會跳出一個新的視窗如下圖




按新增之後會出現以下的畫面





我們依序至少要在這個對話框做以下的動作
1.    為這個新增的進階警示取個名字
2.    選擇在這個進階警示中要使用的腳本
3.    調整參數
4.    選擇K棒的頻率,以及觸發的設定
5.    指定要讓這個進階警示跑的商品有那些
6.資料讀取及最大引用的設定



腳本撰寫流程

腳本的撰寫流程





每個腳本,都像一道食譜,每個食譜,都會要我們先準備食材,腳本的食材,就是我們要拿下去運算的每個元素,在XS的腳本中,這些要拿來加減乘除的元素,可以歸類為以下幾種
1.       即時行情的數據。包括單量,當日漲幅,內盤量,外盤量,五檔委買賣的價與委託量等等,我們可以用 Getquote的語法把它們拉出來使用。
2.       盤後數據。包括法人進出,資券變化,主力進出等等數據,我們是用Getfield的語法把這些欄位拿到腳本中來使用
3.       回傳值。開高低收成交量等語法中最基本的元素,在以K棒為基礎的架構裡,我們可以用Close[n]之類的語法,把K棒中的每一個被存下來的值拿來運算
4.       函數。不管是系統提供的,還是使用者自訂的,所有的函數都可以拿來腳本中作運算
5.       參數。為了更改參數方便而由使用者以INPUT的語法所設定的參數,也是可以被拿來腳本中作運算。
6.       變數。為了運算方便,由使用者自行宣告的變數,也是腳本中常見的元素。
7.       常數。有的時候,就是會運用到簡單的阿拉伯數字,或是Truefalse這兩個布林值,這些都是腳本運算中常用的元素。
當我們要要撰寫一個腳本時,就像食譜要先準備的食材一樣,我們得先決定要用上述七大類裡的那些元素,然後一剛開始,我們會先透過宣告的方式,把要用的變數及參數先準備好,我們為它們取名字,設初始值,設資料型態。
然後接下來我們用getquotegetfield,把盤後資料及盤中資料拿出來

接下來就是把函數指定到取好的變數
這些工作都做好了之後,接下來就像食譜中的食材準備好之後,要開始介紹怎麼熟煮,腳本接下來就要開始建構各種元素開的關係。
最後再設計警示觸發的條件,讓電腦知道您希望在什麼樣的情況下,電腦應該通知您,您寫的腳本的觸發條件已經成立。
以上就是整個警示腳本的完整流程。
接下來我們舉個實際的例子來說明
我們希望電腦在個股符合下列三個條件時通知我們,
1.    十日法人買超的移動平均超過1000
2.    當日外盤量佔成交量超過五成
3.    當日股價比前一日上漲
那麼我們可以寫下一個腳本如下:
各位可以看到,我們依以下的步驟在完成一個警示腳本
步驟一: 宣告參數
步驟二: 宣告變數
步驟三: 取得盤後資料
步驟四: 取得即時數據
步驟五: 建構運算關係
步驟六: 設立觸發,畫指標或確認 函數的敘述式
當然在實作上,步驟一到步驟五的任何一項 ,都可能因為沒有用到相關數據而被省略,最簡單的警示腳本如if close=high then ret=1;就只有步驟六而已。
但如果大家記得這六個基本的步驟,應該可以很快的把各式各樣的數據,同步放在一個警示腳本中來使用。


二, 腳本的編譯

在完成任何一個腳本之後,接下來要進行的是腳本的編譯,任何一個腳本編譯成功之後,就可以被使用者拿來用在各種金融商品上來使用。
編譯的作用有兩個
1.    讓系統幫您檢視腳本有沒有寫錯的地方。
2.    編譯完成後系統自動幫您把腳本存起來,當您需要針對特定一群股票或期貨等金融商品使用這個腳本時,可以直接勾選即可。

在編譯之前,請先把腳本再檢查一遍,然後點擊下圖任一個用紅圈圈起來的地方,系統就會直接進行編譯的作業,如果一切正常,在下方編譯輸出的頁籤中,會依序出現編譯開始,編譯成功,全部物件編譯結束的文字。

三,腳本的勘誤

如果腳本寫錯了怎麼辦? 不必擔心,當您按編譯時,如果腳本有錯,在下方的訊息列,電腦會用中文跟您說您在第幾行的第幾個字可能是那裡出錯了(如下圖)


自訂指標

雖然XQ內建了近百種技術指標,但作為一個程式交易者,也許你也會想要發明一個專屬於你個人的指標。為了滿足您這方面的需求,XS提供了一個自訂指標的功能,接下來我們就舉一個例子,一步步的介紹如何在XS上自訂指標。

首先,請打開Xscript編輯器,然後按新增,這時候系統會跳出如下的視窗

記得在腳本類型的地方要選擇指標”,然後幫你的指標腳本取一個名字, 按確認就回到編輯器的撰寫腳本畫面。

在這畫面你可以開始描述你的指標計算公式,語法跟警示的腳本寫法一樣,例如我們可以設一個指標,用來計算每天收盤價與月線之間的差,如果這個差的三天移動平均站上零,應該就代表波段轉向多頭走勢,這個指標的腳本如下

value1=average(close,22);
value2=close-value1;
value3=average(value2,3);
plot1(value3,"月線與收盤價差三日移動平均");



在這邊,XS用了一個語法叫作plot,用來告訴電腦要畫的指標是那個數值,如果只畫一個指標,那就是plot1,畫第二個就是plot2,其語法如下:
Plot1(value,”文字說明”);
Value代表任何的數值,逗號後面的文字說明可有可無),所以,如果你要畫一條數值為零的橫線,只要寫plot1(0)即可。

至於這個指標要畫出柱狀圖還是線圖?圖的顏色是什麼色? 座標要怎麼設,XS的作法跟Tradestation不同,我們是直接透過技術分析的一個對話框來讓使用者修改。

使用者寫完自訂指標的腳本,完成編譯的動作之後,系統就在技術分析的副圖指標中,在自訂指標的分類中,自動幫使用者加上這個指標。
所以使用者只要到技術分析的頁面,按右鍵就會看到如以下的選單

當使用者點選自訂指標時,系統就會把所有的自訂指標列出來讓使用者選取,如是,使用者就可以在這邊找到自己寫好且編譯完的指標了。

如果使用者想要更改自訂指標的各項屬性,只要在自訂指標的頁面按滑鼠右鍵,然後按設定,就會出現以下的對話框

透過這個對話框,切換頁籤,就可以依序調整參數,繪圖的樣式,以及座標範圍 了。

有了這個功能,可以先透過自訂指標,找出指標的特色及與商品走勢的對應關係,然後再來研究如何制訂交易策略,並把它寫成一個警示的腳本,在指標符合某些特定條件時,可以讓電腦觸發警示。

例如,我們可以設計一個指標叫上昇趨勢指標,它的計算方法如下:
1.如果收盤比前一天高,就給一分。
2.如果開盤,最高,最低也比前一天高,就各給一分。
3.計算這十天的總分合計是幾分。
4.取這個分數的五日及二十日平均。

根據上述的原則,我們可以寫出一個腳本如下:

然後在完成這個腳本的編譯後,我們把這個腳本用在加權指數上可以得出如下圖的自訂指標圖形
從這張圖,我們可以看出,當短天期的趨勢指標向上突破長天期的指標時,就是買進訊號,反之則是賣出訊號。

我們就可以運用這樣的觀察,在自訂警示腳本時,把自訂指標的腳本copy過去,然後把最後兩行plot的敘述拿掉,放上
if value2 crossover value3 then ret=1; 這樣的警示條件,這樣,就可以完成一個新的警示腳本了。

日期與時間的語法

K棒頻率的指定語法

  雖然說,XS的語法是建構在K棒的時間序列上,理論上,可以適用於各種頻率,但有時候我們在語法寫作時,會特別針對某種頻率去設計,這時候就需要在腳本中,特別註明,並且安排一些敘述式,用來在當使用者把該腳本拿去用不合適的頻率啟動策略雷達時,可以讓系統發出警語。

這樣的語法,它的語法是一個內建的函數叫作barfreq,這個函數是用來傳回K棒目前頻率的單位,以字串型式表示,XS中,K棒的頻率可以有以下幾種
K棒頻率
語法的表達方式
Tick
Tick
分鐘線
Min
小時線
Hour
日線
D
週線
W
月線
M
季線
Q
半年線
H
年線
Y
日線以上都為一個字母,日線以下則為簡寫。
所以如果我們寫了一個腳本只想把它用在日線時,我們就可以寫成以下的敘述式:
if barfreq <> "D" then return ;

指定時間間隔的語法

有了barfreq這樣的語法,我們可以指定腳本適用在tick,分鐘,小時,日,週,月等等不同的頻率,但我們無法指定腳本適用在幾分鐘線,或是幾小時線,例如一分鐘線,或是五分鐘線。
這時候我們可以使用另一個XS內建函數: barinterval
barinterval意思是K棒跟K棒中間的間隔。如果barinterval=1那代表間隔就是1,所以如果我們希望我們寫的腳本只適用在5分鐘線
我們就可以寫出如下面這個敘述式
if barfreq<> "Min" or barinterval <> 5 then return;

透過barfreqbarinterval這兩個內建的函數,我們可以指定任何的K Bar頻率,來作為腳本的應用頻率。


指定特定時間的語法

我們在撰寫腳本的時候,有的時候必須把時序的概念加進去。

例如我們可能會尋找一開盤就大漲的股票,我們可能會尋找拉尾盤的個股,一開盤或是殺尾盤都有指定時間的概念。 

XS提供了一個內建函數叫作currenttime來傳回現在的時間,我們可以用它來顯示目前電腦的時間,格式為hhmmss
hh0023
m
m0059
ss
0059
如果現在的時間是早上的九點三十分二十秒,那我們如果寫一個value1=currenttime
如果有個腳本我們希望是從早上九點到中午12點的時間才執行,我們可以像下面這麼寫
if CurrentTime > 090000 and CurrentTime < 120000 Then…………………..


限定在今天的K棒才運算
除了currenttime之外,如果我們在用日線以下頻率寫腳本的時候,然後又希望電腦從今天開盤的第一根才開始運算時,系統提供了另一個函數叫作currentdate
,當您使 這個函數時,電腦會傳回現在的日期,傳回值的格式為yyyyMMdd
yyyy
為西元?
MM
為月份,從0112
dd
為日期,從0131
所以如果是2014年元旦使用currentdate時,它會傳回來的數值就是20140101

之前我們有介紹過在系統內建的回傳值中,除了開高低收成交量之外,還有日期(date)及時間(time),所以我們要確定腳本是在當天才被執行時,我們可以寫成
if  currentdate =date 
這樣的敘述,這個敘述式如果要是true,一定要K棒的日期是屬於今天才會是True

例如當我們用1分鐘線的腳本來尋找開盤連五分鐘都上漲的股票,我們可以這麼寫

 又或者我們可以把當日限定的語法寫成像下面這一行
if date <> currentdate  then return; {只有在今天才執行動作,以節省資源}

透過上述的幾個語法,我們可以
1.指定腳本的執行頻率。
2.指定腳本的執行時間間隔。
3.指定腳本執行的起始與結束時間。
4.指定腳本執行的時間是否為今天才執行。




Getquote

Getquote
即時欄位的運用
在實際交易的經驗裡,我們常常透過日,週,月線,去尋找值得留意的交易機會,但進場點,往往還是看盤中的價量表現才作決定。

例如我們可能會去尋找五日RSI與十日RSI黃金交叉的股票,但為了怕是假訊號,我們經常會等到這當股票當天開盤帶量開高後才進場交易。

在未提供跨頻率的語法之前,我們無法同時處理日線上的RSI黃金交叉,又同時處理日內的1分鐘線或5分鐘線帶量開高。

Xscript為了解決這個問題,特別提供一組語法,讓交易者可以直接在盤中把最新的成交價量及委買委賣張數,傳回腳本中來作運算,這些可以即時取得的交易資料,我們統稱為即時欄位。

從下面的台積電分時走勢圖中,我們可以看到,一檔股票目前交易所即時揭示的交易資料,大約有以下幾項:


1.    最新的成交時間,買進價,賣出價,成交價,單量。
2.    最近的五檔買進委託價及對應的委託量
3.    最近的五檔賣出委託價及對應的委託量
對於這些即時的資料,djscript幫它們分別取了不同的欄位名稱,讓交易者可以加以使用,以下就是這些即時欄位在腳本上被引用時的名稱對照表
q_dailyopen
開盤()
q_dailyhigh
最高()
q_dailylow
最低()
q_dailyvolume
總量()
q_Refprice
參考價
q_AvgPrice
均價
q_last
成交
q_Bid
買進
q_Ask
賣出
q_BidAskFlag
內外盤
q_TickVolume
單量
q_PreTotalVolume
昨量
q_PriceChangeRatio
當日漲幅%
q_InSize
當日內盤量
q_OutSize
當日外盤量
q_BestBid1
買進1
q_BestBid2
買進2
q_BestBid3
買進3
q_BestBid4
買進4
q_BestBid5
買進5
q_BestAsk1
賣出1
q_BestAsk2
賣出2
q_BestAsk3
賣出3
q_BestAsk4
賣出4
q_BestAsk5
賣出5
q_BestBidSize
委買
q_BestAskSize
委賣
q_BestBidSize1
委買1
q_BestBidSize2
委買2
q_BestBidSize3
委買3
q_BestBidSize4
委買4
q_BestBidSize5
委買5
q_SumBidSize
總委買
q_BestAskSize1
委賣1
q_BestAskSize2
委賣2
q_BestAskSize3
委賣3
q_BestAskSize4
委賣4
q_BestAskSize5
委賣5
q_SumAskSize
總委賣
q_DailyUplimit
今日漲停價
q_DailyDownlimit
今日跌停價



djscript的語法中,取得這些欄位的方式很簡單,那就是運用給定變數這樣的方式,例如
Value1=q_dailyopen  就可以取得今天的開盤價,跟Getfield一樣,在撰寫腳本時,只要在編輯器上打 一個英文字母 "g"(大小寫皆可),就會跳出如下圖左方的小視窗,只要點選"getquote插入",即會跳出右邊的視窗讓您選擇要使用的即時行情欄位。




如此一來,就不必把這些欄位的名稱背起來,畢竟,還蠻不好背的。

例如我們如果要尋找今天外盤量佔總成交量比重高的股票,我們就可以寫撰寫如下圖的腳本

在這個例子裡,我們用value1這個內建的變數來代表q_BidAskFlag這個即時的內外盤標示,這個標示的值等於1代表是外盤成交,-1代表是內盤成交。

有了getquote這樣的語法,除了這種內外盤比的數據之外,包括內盤量,外盤量,最佳買進五檔的買進賣出委託量等盤中即時的交易所提供資訊,都可以拿來作運算,找出盤中價量異常的股票。

getquote算是Xscript在地化特色的一個語法。