輸出語法

By | 2015-05-26

在撰寫語法的過程中,我們一行行的寫著敘述式,希望電腦照著我們的意思,拿著開高低收成交量這些數據去運算,運算總會有個結果, 我們會希望電腦根據這個結果,幫我們做點什麼,這裡說的什麼,就是電腦運算中所謂的輸出。
在XS的語法裡,輸出的方式,除了透過交易語法,進行自動化交易之外,還有幾種輸出的功能,分別如下表 ,茲分述如下

07_輸出語法_1
output

一,PlotN

Plot是在自設指標的時候用的,當我們寫了一個腳本之後,腳本的最後輸出基本上是分兩大部份, 一種是根據腳本把一個數值畫成一個自訂的指標,另一種則是在數值符合某種情況時,請電腦通知我們某商品已符合某條件這樣的警示訊息。 Plot就是用來請電腦幫我們把某數值繪成指標的語法。
OUTPUT1

例如 :
我們如果要把每天的收盤價繪製成一條線
我們可以寫plot1(close);
我們也可以在要繪圖的數值後面用逗號及引號來加註這數值
我們可以寫plot1(close,”收盤價”)
如果要畫兩條線,我們可以一條用 plot1,另一條則是plot2
例如以下的範例,如果我們想要畫兩條線,一條呈現K棒的總長度,另一條顯示K棒的實體長度,我們可以寫下以下的腳本 :

OUTPUT2

然後幫這個腳本取名為 ”K棒長度”
這樣子我們在XQ技術分析的頁面中,就可以透過選取自訂指標的方式,選取K棒長度這個腳本來繪圖,然後您就會看到如以下的圖形, 所以透過腳本的撰寫,你可以算出各式各樣的數值,然後透過PlotN這樣的語法,把這些數值一條一條畫在XQ技術分析的自訂指標中。OUTPUT3

二,RetVal

除了繪圖之外,其實最常用的是把腳本應用在警示上,讓電腦在運算後符合某種條件時,發出通知訊號,我們總是希望電腦在股票符合什麼條件的時候通知我們,這時候就用得上這個語法。
它的語法格式如下 :
Retval=1 或 retval=0
我們可以簡寫為 :
ret=1 或ret=0
Retval是return value的簡寫,XS的語法設定當Retvalue=1時電腦會觸動警示,所以如果你希望台積電股價突破150元時電腦可以通知您,就可以寫出以下的腳本 :
If close>150 then ret=1;
If …….then ret=1; 是很標準的警示觸發條件的撰寫格式。

三,Print
除了繪圖及警示之外,有時為了撰寫腳本時的除錯,校對資料 或是研究用,我們需要輸出特定的數值,這時候就需要print這個語法,它的語法格式如下:

OUTPUT4

例如我們想知道電腦今天有沒有把最新成交的數據送進來,我們就可以寫出以下的腳本 :

Print(CurrentDate,Open,High,Low) // 輸出 日期 開盤價 最高價 最低價

然後當我們拿這腳本去用台積電執行腳本時,在XS程式的PRINT檔案夾中,會有一個test_2330.TW………的文字檔, 當你打開這個檔案時,會出現像下面附圖之類的文字
OUTPUT5
電腦依據你要求的PRINT指令,把日期及開盤,最高,最低都印了出來。
Print這個功能,主要是可以拿來作研究用,舉個例子 :
如果我們想知道用RSI黃金交叉來作為台積電的買進訊號,隔天上漲的機率高不高? 我們可以寫一個腳本 :
OUTPUT6
然後在進階警示清單的介面上,用台積電這檔股票去跑最近300筆資料,系統會在 sysjust/XQ2005/XS/Print的目錄底下, 跑出一個文字檔,如果用excel去打開,可以看到如下圖的一個表 :

OUTPUT7

這個表就是根據我們要求的print格式所列出來的三個欄位,最右邊那一欄就是符合前一日rsi黃金交叉條件的當天收盤價減前一日收盤價的值, 從這個表我們可以看得出來,在出現rsi黃金交叉之後的隔天,台積電股價並沒有太高的上漲機率,所以我們大概可以了解, 如果在rsi出現黃金交叉時隔天進場買台積電,並不會賺到錢。
Print的功能主要就是可以自己訂定輸出的格式,這對作研究及想要改進腳本的人,是個很有用的功能,特別是現在在python上有非常多人工智慧的套件,我們可以透過print的功能,把透過XS語法計算出來的數據,拿到Python平台的 AI套件上去訓練模型。

四,RaiseRun TimeError

在撰寫腳本時,有時候當數據如果錯誤時,程式會出現錯誤,例如當除數是零的時候,這時候電腦就很容易卡在那邊, 或者有些腳本只適合日線,如果用在分鐘線,就可能要算很久且出來的結果也不能用,這時候這個Raiseruntimeerror就是一個很好用的輸出語法, 可以馬上通知電腦中斷執行,這樣就不會出現電腦當機之類的意外情況。其語法格式如下:

OUTPUT8

這個語法是在raiseruntimeerror這個字的後面加一個小括號,然後把想要輸出的文字用雙引號寫下來, 放在括號裡,當條件符合的時候,電腦會輸出雙引號通知使用者。
例如當我們要寫一個只適用在一分鐘線的腳本時,我們第一行可以像下面這樣寫 :

if barfreq <> "Min" or barinterval <> 1 then RaiseRunTimeError ("請設定頻率為1分鐘");

這麼一來,如果頻率不是設定為1分鐘線時,電腦一讀到這一行就會直接中止執行這個腳本,這樣就可以避免電腦執行一個不適於其他頻率的腳本。
例如我們用五分鐘線在台積電這個檔股票執行上面那一行敘述,電腦就會出現以下的訊息
OUTPUT9