XS的基本架構


   交易語法形成的過程



股海如江湖,行走其上,總得有個一招半式,以往這些招式,需要搭配十年寒窗,日日苦心研究,方能發揮功效,在市場上與人一較長短。

早先的交易者,把每天的開高低收,畫成圖型,長期觀察,K線酒田戰法,就是十八世紀日本米商本間宗久,研究稻米交易的長期走勢,所得到的心得。 即便到了二十世紀,我開始擔任外匯交易員的時候,我的師父們,還都每天用方格紙,自己畫幾個主要幣別的Bar Chart。

把過往的交易記錄保存下來,畫成圖形,從歷史的圖形中,尋找不斷發生的跡證,在經過研究歸納整理之後,形成一些結論,然後把這些結論應用在交易上,這樣的事情,從十八世紀到二十世紀,從日本,美國到台灣,交易者日復一日,不斷的進行這樣的工作。

自從電腦發明以來,投資操作者,開始把電腦拿來作為輔助的工具,最早開始有人讓電腦協助記錄每天的開高低收等交易數據,然後把它畫成圖形。

1980年代,wintel架構下的個人電腦,從286,386,486一路提昇運算能力,電腦對操作者的幫助就愈來愈大。

1982年成立的metastock,在1985年發表了第一套在個人電腦上畫出bar chart的圖形分析軟體,從此,圖形分析軟體,成為操作者不可或缺的工具。

這樣的分析方式,有個缺點,那就是操作者必須一檔一檔的檢視每個商品的圖形及指標,再透過經驗研判什麼樣的商品,在線型上,在指標上,出現交易的訊號。

這樣的缺點,一直到美國一家叫Omega Research的公司,在1987年發明了一個叫easy language的語法,才被解決

這是第一套想辦法讓交易者可以透過一個約定的語法,把投資決策流程轉化成電腦看得懂的文件,讓電腦據以自動執行交易。
例如作為一個操作者,我們有時候會想要找到今天收最高的股票,過去沒有XS語法的時候,我們必須一檔一檔去Check,現在我們只要寫close=high,電腦就知道我們要找的是收盤價等於最高價的股票。
從那之後,愈來愈多的金融操作軟體業者,陸陸續續開發了各式各樣的語法平台,其目的都是在讓使用者,可以很快的使用一套語法,把自己的交易策略,交由電腦代為執行。
在台灣,除了tradestation之外,陸續也有證券商及軟體商引進韓國的Home Trading System及俄羅斯的Mutichart。

這些軟體,它的目的,都是把操作者腦袋裡的想法,轉換成一行行程式,然後讓電腦把這些程式,應用到各種商品的最新成交價量之上,並且形成各種交易的訊號。



 Xscript的誕生

XS語法,是在2013年,由嘉實資訊,開發完成,第一套由台灣人自製完成的交易語法。

它的語法格式跟tradestation,HTS及Mutichart相差不大,學了Xscript再去學其他語法也可以很快的上手。

Xscript跟其他語法最大的差別,在於使用介面,資料架構的調整,讓Xscript更本土,更容易上手,更符合 雲端運算的技術潮流。



Xscript語法的根本結構




statement(敘述式)

Xscript的語法,基本架構上,跟其他的程式交易語法平台一樣,為了讓電腦看得懂,我們必須安排一種特殊的寫作方式。

這樣的寫作方式,是由一行一行的敘述式(statement)所組成。

這些敘述式的最後,都會有一個分號";"來宣告這一行的敘述式已經結束。


腳本

把這一行行最後由分號來結束的敘述式按照執行的先後順序排在一起,就是一個腳本。當我們把一個腳本送給電腦時,電腦會根據每一個敘述式在腳本中的順序,依序一行一行的執行腳本上的指令。



時序的觀念



為了讓user用原本就習慣的思考模式來撰寫腳本,Xscript,必須貼近使用者的思維方式。而目前大部份的市場參與者,其思維方式,是建構在由開高低收成交量所呈現的一個時間序列上。

如同上圖,市場參與者,是透過一個時間序列,來去了解商品的過往價格走勢,並且作為預測未來多空方向的根據。
我們在作技術分析時,不會只看一根BAR,我們看的是數十根數百根BAR排在一起時所呈現的型態,趨勢,支撐,壓力等等。
所以我們必須讓電腦知道,我們現在要運算的,是第幾根K Bar

怎麼做呢?

我們用close[1]來代表前一根bar的收盤價,這個中括號裡的數字,代表的是前nbar裡的值,所以,high[5]代表的就是今天算起前面第五根bar的最高價,也因此,close[0]代表的就是往前算第0根的收盤價,也就是今天的收盤價。


各位可以參考上圖,我們可以用這樣的語法,讓電腦清楚的知道,我們所指的是那一根bar的那一個值。

於是,如果我們要讓電腦幫我們找出今天價量齊揚的股票時,我們可以這麼寫

     close>close[1]  今天的收盤價比前一天的收盤價高
And volume>volume[1] 今天的成交量比前一天的成交量大

這邊我們用了volume這個單字來代表成交量

又例如,如果我們要讓電腦幫我們找到今天漲幅超過五%且成交量比前一天多超過一千張的股票,那我們可以這麼寫
close>close[1]*1.05
And volume-volume[1]>1000

上面的這兩行敘述,意思就是一個商品的收盤價大於前一天收盤超過5%而且成交量比前一天的成交量多一千張。

為了貼近使用者的想法,XS的語法基本上,就是建構在這樣的一個基礎之上,它用兩個準則,來作為使用者與電腦溝通的基本原則
1.    Open highlowclose以及volume這五個英文詞,來代表最近一根K線上的開,高,低,收,成交量
2.    用中括號及在括號內的阿拉伯數字來代表這是從最近一根K線往回算起的第幾根K線。
透過這兩個準則,使用者可以把K線圖上的每一個被記錄下來的值,都拿來用在自己撰寫的腳本上。

例如我們可以用high[1]代表前一天的最高價,所以如果open>high[1],代表今天的開盤價大於昨天的最高價,也就是今天跳空開高的意思。




例如我們在尋找紅三兵股票時,必須遵循三個原則
1.    最近三天都上漲
2.    三天的K線實體部份都要是紅色的,也就是說三天的收盤價都高於開盤價
3.    實體紅棒的部份一天比一天長

那麼要讓電腦知道我們要找的是紅三兵的股票時,我們可以列出三個敘述
1.    close[2]> close[3]  and  close[1]>close[2] and close>close[1]
2.    close[2]> open[2]  and  close[1]>open[1] and close>open
3.    close[2]-open[2]<close[1]-open[1] and close[1]-open[1]<close-open



又例如我們如果要寫一紅包三黑
我們必須遵循以下幾個規則
1.    前三根K棒都是黑色的
2.    最後一根是長紅棒
3.    最後一根的收盤價比前三根的高點還高
我們可以把上面的這些規則改寫成以下電腦看得懂的敘述
1.    close[3]<open[3]  and  close[2]< open[2]  and  close[1]<open[1]
2.    close>open
3.    close> high[3] 

透過這樣的語法約定,我們可以把每一根K線上的每一個開高低收成交量的值都拿來用,如果我們要表達價漲量增,我們可以寫close>close[1] and volume>volume[1]

我們使用這五個英文的詞語及中括號,告訴電腦我們希望它拿那些數字來作運算,只要在K線圖上的每一個點,我們都可以拿來計算。


上面所用的open ,high, low, close,volume,都是我們這麼寫,電腦就會把數值傳回來作運算的指令,這些指令,我們都統稱為回傳值。

要完成一個可以幫我們請電腦協助完成工作的腳本,除了回傳值之外,可能出現在腳本內容裡的字詞,還包括了標點符號,常數,運算子,輸出及忽略字等幾種文字。

請從回傳值開始,依序了解這些不同的字詞在腳本中會怎麼被使用。