Author Archives: 發財橘子

上漲下跌家數差RSI指標

這一波的台股驚驚漲,不少朋友一直是空手,甚至是偏空操作,昨天跟老同學聊股票,他問我有沒有什麼指標專門用來看大盤,他覺得如果大盤能站對邊,就算不會選股,光買期指也能賺到錢。坦白說,我不覺得世間有這種指標,不過如果要找一些可以用來相互印證,且具有一定可信度的指標,倒是有一些,今天介紹的上漲下跌家數差RSI就是這樣的指標。

這個指標是我自己胡思亂想時寫出來的,先來看一下它的腳本

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=rsi(value4,period);
plot1(value5,"上漲家數RSI");

這個指標的算法步驟如下:

1.把每天的上漲家數減去下跌家數

2.計算這個數字的十天加總

3.把加總後的數字計算該數字的十日RSI

為什麼這麼算呢?

因為我覺得上漲家數跟下跌家數代表的是整體市場每一檔股票多空勢力的投票總數,上漲家數代表的是投贊成票的,下跌家數是投反對票的,把兩個相減得出來的數字,本身沒有什麼意義,但是這數字的上漲,代表投反對票變成贊成票的,比從贊成變反對的多,相反的,這數字的下跌,代表有更多個股的多空雙方角力是由空方獲勝。

因此,這個數字應該會急遽的呈現每天多翻空與空翻多的個股數量。

對於這樣一個會隨著市場多空而不斷震盪的數字,我覺得使用震盪指標來作為衡量的工具,是一個不錯的選擇,而RSI則是大家常用的震盪指標,所以我把十日上漲下跌家數差的總和拿來計算十日RSI。

RSI的計算公式是 區間內的漲幅/(漲幅加跌幅)

所以在計算上漲下跌家數差RSI時,這個數字會隨著每天上漲家數-下跌家數的變化,而在0-100之間波動,當數字在上昇,代表近十日的上漲下跌家數差,比前一天增加,至於增加的速度與幅度,就看這十天之內上漲下跌家數的變化程度。

我自從寫了這個指標之後,就把它列在我每天在瀏覽的大盤指標內,慢慢地,累計了一些應用的心得如下:

1.65以上代表市場過度樂觀,大盤有拉回的壓力,35以下代表市場太悲觀,隨時有反彈的可能。

2.背離是反轉的領先指標。

3.50是多空分水嶺,突破50與跌破50都是重要多空分界點

4.在50到65之間整理後再往上時大盤續作多,若跌破50則翻空,在35到50之間整理後往下跌則繼續作空,一突破50就要翻多。

以下我附上幾張加權指數日線與上漲下跌家數差的RSI對照圖,您若要讓我從這個指標來看後市,過去這陣子這兩個指標有在背離,代表雖然指數在上漲,但開始有不少的股票投反對票的多於贊成票,所以如果未來這幾天沒有出現全面翻紅的局面,這個盤拉回的壓力就會愈來愈大。

030901

 

030902

 

 

090903

 

 

030904

 

我一直很喜歡自己這樣摸索測試一些簡單的概念,例如在我的觀察中,股票市場的上漲下跌是市場所有參與者的總投票,而上漲家數與下跌家數則是市場針對某檔個股的投票結果,今天跟大家介紹的這個指標,是一個探測個別股票投票結果的工具,其背後的假設前題是我認為多空是上下震盪循環不已的心態變化。

作為一個操作者,透過各種變化的觀察,運用程式寫成指標,加以驗證後,形成自己的操作依據,這種人與機器一起併肩作戰的方式,比起靠直覺及運氣來操作,我覺得靠譜多了。

 

主力,法人,公司派波段買超後的攻擊發起日

最近籌碼派當道,市場不少人會盯著籌碼來選股及操作,作為一個很早就在用大富資訊的產品算籌碼的操作者,我一直認為,從籌碼選股票,其實是很直觀的方式,那些每天公佈的數據並不難取得,難的是如何去解讀,以及形成交易策略,我的經驗是,敢買跟敢拉是不同的兩件事,籌碼分析只能找到前者,但真正能讓我們跟著共襄盛舉而賺到錢的,是後者,今天,我們一起來探討這兩者之間的關係。

籌碼派把股票投資說的很簡單,找到那些特定券商一直在買的股票,跟著買,然後就會賺到錢。

人生如果這麼美好就好了!

真實的情況是,不管是公司派,主力,大戶,法人,甚至隔日沖大戶,在知道大家都在盯著券商分公司進出表之後,善良一點的多開幾個點,讓你摸不著頭緒,惡劣一點的,還會故意在要出貨時在特定券商呈現大買超來騙你,所以我雖然會留意一下籌碼,但我覺得籌碼只是各種工具中的一項,它像微物跡證,把不同的跡證合在一起看,可以判別案情的走向,但籌碼絕對不是DNA, 驗一下就知道人是誰殺的。

在運用籌碼分析時,我思考的路徑圖如下:

籌碼決策圖這樣的交易決策過程,分成兩個部份

1.透過主力及法人買超的天數及金額來研判籌碼是否正被收集。

2.透過以下幾項指標來研判收集籌碼者接下來會不會又敢買又敢拉。

主要的研判指標有四個

a.法人及主力買超佔成交量比例

b.外盤成交是否比較多

c.是否勇於追價

基於上述的思考,我訂出的選股條件如下:

1.五天有四天買超 or 三天有兩天買超

2.每天買超都超過3百張

3.法人+主力買進的張數超過成交量三成

4.外盤成交比內盤多

5.近一日收盤價與最高價差距不大

我試著根據這些條件寫了一個選股腳本如下:

value1=GetField("法人買賣超張數");
value2=GetField("主力買賣超張數");
value3=value1+value2;
value4=GetField("內外盤比","D");//外盤量/內盤量*100
condition1=false;
condition2=false;
condition3=false;

if countif(value3>300,5)>=4 or countif(value3>300,3)>=2
then condition1=true; 


if value3>volume*0.3
and value4>50
then condition2=true;

if high<=close*1.02
then condition3=true;

if condition1 and condition2 and condition3
then ret=1;

這個腳本只是個樣本,各位可以再去設定不同的過濾條件,找到那些敢買又敢拉的股票,例如在選股條件上再設定股本的上限,或是把買超張數改成買超金額超過一定上限。但基本精神就是別只看買超的張數及天期,也看其他如外盤成交比例,K線上影線等其他指標,因為不會是主力買超就是好股票。

尋找那些開盤迄今外盤量的比重很高的股票

外盤成交量佔總成交量的比重,是個值得參考的指標,我們發現,那些常天收長紅的股票,外盤成交量佔總成交量的比重,動輒超過六成。

以下圖中的智原為例030401

 

我們會發現,每次外盤佔比超過六成時,當天K棒往往收長紅,如果沒有收長紅,往往也預告後市有高點可期。

這個指標的腳本我附在下方

value1=GetField("外盤量");
if volume<>0
then value2=value1/volume*100
else
value2=50;
plot1(value2,"外盤佔比%");

 

基於這樣的觀察,我們可以寫出一個腳本,在盤中找出累積到特定時間時,外盤量佔比超過一定比例的股票。

input:timeline(100000,"截止時間HHmmss"); 
input:ratio(50,"外盤量佔總成交量比重%");
value1=q_OutSize;//當日外盤量

if volume<>0
then begin
if currenttime>=timeline and value1/volume*100>ratio and volume>500
then ret=1;
end;

 

上面這個腳本,我把計算的截止時間跟外盤量佔比的下限都設成參數,因此,透過這個腳本,可以找開盤前五分鐘外盤佔比超過八成的,也可以找到九點十五時,佔七成五的, 也可以找到十點佔九成的,時間跟成數都可以自行調整,調整的視窗如下:

030402

外盤量佔比的確是一個挑到好股票的好方法,特別是那些很久沒有動的中小型股,如果大盤不是太強,而個股的外盤佔比回到六成以上,往往是風雲再起的一個指標。

XQ量化交易平台學習地圖

如何學習透過XQ提供的語法,撰寫自訂指標、選股及交易策略,對於沒有學過程式設計的朋友,是比較困難的,我唸的是經濟系,沒有程式設計的底子,深深知道學習過程會踢到那些鐵板。所以根據學習的進程,試著把當初自己碰到的學習障礙,以及學習的心得,寫成文章,分門別類地整理在這裡,希望可以協助跟我一樣唸文組的朋友,循序漸進,學會使用「XQ量化交易平台」,來撰寫交易策略,執行自動交易。

若是已經有程式設計相關知識的朋友,則請很快的了解這個語法宣告變數、參數等等相關的語法,再參考下面列出來的各種範例及函數,應該就可以很快的上手。

在開始介紹這套量化語法之前,容我先介紹一篇文章:

什麼人適合使用XQ量化交易平台?

如果是很會寫程式的朋友,有免費的python可以用,對比每月要付1000~2000元的XQ量化平台,就請各位直接用python進行量化交易即可,若是單純用價量交易期指及選擇權的朋友,Mutichart這產品牌子老底子好,XQ在回測,最佳化等地方,跟人家相比,還有很大的進步空間,同業們大家各有所長,用慣Mutichart的朋友還是留在Mutichart就可以,不見得要改來用XQ。

XQ量化平台適合數學沒有很好,程式沒有很會寫,但對市場有一些獨到的觀察,希望把決策流程系統化的朋友。

以下的內容適合沒有學過程式設計的朋友,如果已經會寫程式的朋友,請直接往下滑,到達「會寫程式者請參考」字樣的地方,再請開始往下看。

 

基礎篇

要學任何一種程式語言,首先要先學會使用程式編輯器,就像我們用Word來寫文章、打報告,程式編輯器是用來設計程式的軟體,XQ的程式編輯器是XScript編輯器,要如何使用,可以參考以下的連結影片,市場對於這類程式碼編輯器,都稱之為Integrated Development Environment,簡稱IDE,所以下面我們就用IDE來稱呼編輯器。

IDE操作說明影片

打開XQ後,在「策略」選單的最下方,點選XScript編輯器即可進到IDE裡:

打開IDE之後,左邊有各種腳本的範例可以供各位參考,也可以用複製貼上直接COPY出來用,要寫自己的程式,可以按左上方第一個ICON「新增」,按下去之後會跳出下面的視窗:

這個視窗最上面有一排腳本類型,您可以依您的程式目的來決定腳本的種類,接下來請為您的程式命個名,按「確定」後就可以開始撰寫第一個程式,編輯器的底色分成淺色與深色兩種,上面那張圖是淺色,下面這張則是深色。

要改變底色,可以到IDE上面的選單列中,選檢視項目,然後進到佈景主題裡去選。

在初步學會使用語法編輯器之後,接下來就可以使用IDE,學習用XQ語法來撰寫交易程式,在往下學習之前,建議各位先至XQ學習地圖瀏覽XQ語法入門裡的各篇影音內容,這些影音內容是在跟大家介紹,學會XQ語法後,可以做哪些事情,如果這些事情是您想要做的,那麼您才有足夠的學習動機往下學。

跟工廠生產自動化的發展一樣,XQ的目標是讓使用者儘量透過語法,把選股、盯盤,乃至於下單等這些交易的每個環節都自動化,當然使用者也不見得要全自動化,也可以只把特定的環節自動化,自動化的好處是節省您的時間,讓你把有規則可循,千篇一律的事情交給電腦來做,把時間留下來做電腦無法取代的事。 所以學語法不見得是要全部都程式交易,也可以是把某一部份的事情交給電腦來做。

當您確定學習XQ語法是一件值得花心思投入的事情之後,接下來就可以一步一步的學習XQ語法。

 

語法的基本元素

在XQ量化平台裡,如果你要寫收最高就市價買進一張,可以像下面這麼寫:

if close=high then setposition(1,market);

在這一行程式中,close代表最近一根K線的收盤價,high代表最近一根K棒的最高價,setposition是平台提供的部位控制語法,括號後有兩個數字用逗號分開,第一個數字是希部位交易後的張數或口數,後者則是交易時設定的價位,在這裡,系統讓使用者用close,high,market來代表特定某個數值,系統會回傳指定商品裡的某個數值來作運算,這就是所謂回傳值的的概念,在學習XQ量化平台一開始,先了解回傳值的概念,可以看以下連結的說明。

回傳值的意義說明

了解回傳值的概念,以及XQ系統內建的相關回傳值之後,接下來要學習的是在XQ語法上,如何描述前後根K棒的關係,以及建立敘述與腳本的觀念,請看以下的文章:

XQ語法的基本結構

了解了XQ語法的基本架構之後,就可以理解,這是一種建立在時間序列基礎上的語法,

有了對XQ語法的基本認識之後,我們來舉個實例

if close*1.4<close[90]
//過去90天股價跌了超過四成
and close*1.2<close[20]
//過去20天股價跌了超過兩成
then begin
if close[1]*1.05<close[2]
//前一天跌了超過5%
and close>1.05*close[1]
//最近一個交易日漲了超過5%
then ret=1;
end;

上面這個腳本是用來描述大跌後股價出現長黑後的長紅,這在市場老手眼裡,是一個很靠譜的反轉訊號,我們寫完程式之後,可以透過IDE上方的工具列裡的回測功能,來回測這樣的訊號,到底是不是真的如市場老手所說的,勝率很高。

下面這張圖是這個策略過去五年的回測報告,這裡我停損停利都設為7%:

回測的結果勝率高達88%,代表市場老手口耳相傳的這個江湖秘訣,是有其參考價值的,只是這個策略如果踫到大盤大回檔時,最大區間虧損率達到48%,代表這是一個多頭市場才能使用的交易策略,在大空頭市場千萬別用。

我們學會用程式語言的好處,就是可以把我們觀察到的一些市場現象,用腳本描繪出來,然後再透過回測,看看這樣的現象,能不能變成幫我們自動交易的賺錢工具。

有時候市場現象不需要很複雜的語法才能描繪出來,像上面這個腳本,以我們目前介紹的語法,基本就可以寫出來。

接下來我們回頭來學習每一種語言裡一定會有的幾個元素,這些元素是組合成一個程式常會用到的元素,這些元素在其他的程式語言裡也會有,功能也都大同小異,在這邊學會了,未來要接觸其他程式語言也用得上。

一、運算子

二、標點符號

三、常數

四、忽略字

以上是一般語法也都會有的元素,學會使用這些基本元素之後,就可以寫出一些基本的交易語法或自訂的指標。

有了一般的語法知識,也知道如何使用開高低收成交量等回傳值之後,接下來就需要輸出的語法,讓我們可以照自己的意思畫指標、選股票, 或是請電腦在價量符合某個條件時請電腦通知我們,以下就是輸出語法的幾項類別及相關的說明。

 

「會寫程式者」請參考↓↓↓

輸出語法

輸出語法的目的,是把演算的成果,輸出成有用的指令,像是畫成指標、觸發訊號,或是列出符合演算條件的選股結果,以及最直接的,就是自動執行交易,以下是我寫過的一些說明文章。

輸出的語法說明

指標輸出的說明網站

訊號輸出的說明網站

影音範例-股價突破均線時的通知

retmsg的示範

print指定輸出檔名

在主圖上繪製進出場訊號

從以上的語法,我們已經可以用簡單的腳本,來畫指標、啟動觸發訊號,或是把計算後的數據輸出成文字檔。至於要如何完成全自動的程式交易,還需要有交易語法來支援進場、出場、加碼、減碼等等的交易指令。

XQ量化平台支援的量化指令,我寫了一篇介紹文如下,在這篇文章中,我介紹了XQ的各種交易語法的寫法與定義,然後舉了一些大家常用的交易語法腳本作例子,希望大家可以透過這一專章,知道如何撰寫XQ的自動化交易程式。

 

XQ交易語法專章

學到這裡,已經可以用簡單的語法來自訂指標,或是選股,或是讓寫一個盤中會把符合條件的標的即時通知您的策略雷達,或是直接讓電腦自動化交易。

很多朋友會問我學語法對投資的好處是什麼? 我的回答都是,跟工廠逐漸使用機器人來自動生產一樣,學語法的目的就是儘量把可以形成規則的決策過程自動化,減少人力的需求,讓一個單一的投資者 ,人可以做到以往要一大團隊才能做到的研究,決策及執行交易。

 

使用數據的相關語法

透過以上的幾篇文章,大致可以學會基本的XS語法,接下來要說明的是,XQ如何使用變數,參數來強化撰寫量化語法的能力。

首先要說明的是參數的概念:

參數

參數的意義與例子

變數

變數的說明

interbarpersist

這個語法是用來宣告在同一根bar裡,變數值的計算,不是直接計算最新值,而是把前一值當做前一根bar的值來運算最新值,這種宣告變數的方式,常被用來在逐筆洗價的腳本中,用來計算累計值之類的數值,以下就是這個語法的說明。

intrabarpersist

 

學了參數及變數之後,接下來要介紹的是用GetField這個語法,來取得除了開高低收成交量之外的其他欄位。

Getfield

XQ這個語法跟其他程式交易平台最大的差別,就在於它有大量的台股專屬的欄位可以取用,這些欄位的取得,用的就是Getfield的語法。

在撰寫腳本時,當您需要使用這些台股特有的欄位時,您只要在編輯器中打一個英文字母g,不管大小寫,編輯器都會跳出一個如下面附圖中的視窗, 只要您選取getfield(插入),系統就會跳出一個選取欄位的視窗,讓您直接挑選要使用的欄位。

至於使用Getfield語法的範例,以及到底有哪些類型的數據可以透過Getfield來運用,下面的這些文章裡有進一步的說明:

getfield可以取得的欄位

產業數據的應用

籌碼相關的欄位

舉個例子,我們可以透過Getfield語法,取得外資買賣超跟外資持股比例這兩個跟外資有關的欄位,這樣我們就可以用程式找出外資持股比例不低且連續大買三天的個股。

以下是對應的寫法:

value1=GetField("外資買賣超");
value2=GetField("外資持股比例");

if value2>20
and trueall(value1>1000,3)
then ret=1;


這樣的策略如果去回測過往五年,勝率都可以接近六成,但如果再加上暴量起漲之類的腳本,找出在起漲點且外資大買的股票,勝率就更高了。

再舉另一個例子,

XQ裡有一個欄位叫作「關鍵券商」,是把過往券商實施庫藏股期間買超最大的前幾家券商視為公司派進出的券商,我們就可以透過Getfield這個語法,取得這個數據。

例如可以像下面的寫法:

value1=GetField("關鍵券商買賣超張數","D")[1];
if trueall(value1>200,3)
then ret=1;

這樣就可以找出關鍵券商連續三天買超都達到200張以上的公司,過去五年,使用這個簡單的腳本,回測的績效如下:

這也是一個除了大盤大空頭走勢之外,績效都很不錯的簡單策略。

在使用getfield時,資料的更新時間,是大家最常問的問題,以下是更新時間的總整理:

XQ資料更新時間總整理

 

學會了GetField之後,另一個XQ特有的語法是GetQuote,可以取得分時走勢圖裡提供的各種即時欄位。

Getquote

Getquote這個語法是為了要讓使用者可以把看盤時看到的數據拿來做運算,所以才設計出來的欄位, 可以參考下面的這篇文章,就知道getqutoe支援了那些欄位:

getquote可以取得的欄位

getquote跟getfield最大的差別在於,getquote取得的是最新的特定欄位的值,所以不能用中括號來呼收前N期的值,因為getquote取得的就是當下的數據,舉個例子:

condition1=false;
condition2=false;
value1= q_SumBidSize;//總委買張數
value2=q_SumAskSize;//總委賣張數
if value1-value2>1000
and value2<500
then condition1=true;
value3=q_InSize;//內盤量
value4=q_OutSize;//外盤量
if value4>1000
and value4/value3>1.5
then condition2=true;
if condition1 or condition2 then 
ret=1;

上面這個腳本我是用getquote語法去取得最新的總委買張數跟總委賣張數,以及內盤及外盤量,當系統開始運算時,永遠都是拿最新一筆的資料來計算。

以下是一個用Getquote語法來撰寫盤中出現大單的寫法:

大單的寫法

學會變數及參數的使用之後,有些常用的語法,如果每次都要很重覆寫,會很煩,所以XQ提供使用者把一定程序的語法自訂成一個函數,未來要用這樣的運算,只要直接引用該函數即可,所以接下來要學的是函數的概念:

函數

如果有一段程式,我們常會用到,那麼就可以把它寫成函數,之後每次要用到這段程式,只要用函數來寫就可以了。例如我們最常用的移動平均值,是把特定期間的某個值加總後去除以期數,所以XQ就把它寫成一個系統內建的函數如下:

SetBarMode(1);

input:thePrice(numericseries); //"價格序列"
input:Length(numericsimple); //"計算期間"

if Length > 0 then
Average = Summation(thePrice, Length) / Length
else 
Average =0;

 

這麼一來,如果要寫五日移動平均,就不用把前五天的收盤價加總除以五,只要寫:

averge(close,5)

就可以了。

以下是一些函數的相關文章,裡頭有寫函數時要注意的細節,請大家參考:

函數的基本說明

 

學會了函數的概念之後,接下來要跟大家介紹XS的內建函數:

內建函數

內建函數的全集合

從上面這個連結,我們會找到大量的內建函數,至於他們的意義,內建函數再多,也不見得符合使用者的需求,這時候就可以透過自訂函數的方式,來創造獨有的函數,用在各種語法的撰寫上。

以下的連結裡有自訂函數的基本流程介紹:

自訂函數的基本流程

以週轉率為例,介紹自訂函數及其應用

預估量函數的寫法

把K棒的型態函數化

自定函數裡最難以理解的問題是,要如何宣告正確的資料格式:

資料格式宣告

下面是常用函數的應用例子:

區間漲跌幅

 

除了英文函數之外,XQ也支援了「中文函數」,以讓使用者可以用它來選股排行,以下是中文函數的介紹:

中文函數

如何應用中文函數

學會如何使用中文函數之後,接下來就可以應用中文函數,在選股的時候,設定各種排行條件,以下的這篇文章,就是來介紹這個功能:

如何創造個人排行榜

 

學會了變數,參數及函數的概念之後,基本的程式大約都難不倒您了,但目前我們在設定思考的流程時,一直都是用IF .. Then這樣平鋪直述的語法,但其實很多時候,情況並不單純,需要運用各種不同的流程控制方法,所以各種不同的程式語言,都支援了流程控制的相關語法,以讓使用者可以進行更複雜的語法撰寫,接下來我們就來學習XQ裡的一些常用流程控制語法。

 

流程控制

if… then

單一條件或多條件的寫法

魚骨圖的語法示範

多空策略的轉換

begin … end

多敘述的寫法

switch … case

switch的流程圖及範例

迴圈

當要重覆執行某些指令時,我們可以使用迴圈相關的語法,如果一開始就知道要執行多少次,用的是For這個語法,如果不知道要執行多少次,就用while這個語法,詳細的說明如下面的連結:

迴圈

 

以上是基礎的XS語法介紹,在進入到更進階的語法介紹前,先來學習當寫錯時,要如何運用勘誤的功能來修正錯誤。

 

勘誤

選寫交易策略的SOP及常見錯誤

用outputfield與getfielddate來除錯

在寫出符合自己想法的腳本後,可以使用「回測」的功能來看看自己的腳本是不是一個具有實戰效果的腳本 ,如何使用回測的功能,請看下面的連結。

回測

回測的基本功能介紹

回測時參數設定的說明

回測報告的內容說明

以上算是完整的把XS的語法都學了一遍,建議在往下學習之前,請瀏覽一下XQ語法應用裡的各篇文章,這些文章都是為了回答學習者 疑問而撰寫的文章,應該可以協助您建構更清晰的觀念,補強上面各篇文章沒有講清楚的地方。

 

進階篇

在學會XQ語法的基礎應用之後,接下來,跟大家介紹一些常用的進階語法,學會這些語法之後,有些原本寫不出來的,或是寫出來跟原來的意思不一致的,應該可以得到蠻大幅度的改善。首先跟大家介紹的,是在時序及時間上常被拿來使用的函數及語法。

 

時間與頻率的語法

首先還是先複習一下時間的格式

時間的回傳格式

接下來,請看時間與頻率的設定 ,透過這一篇文章可以學會BarFreq,Barinterval及CurrentTime的用法,用來指定程式運算的頻率及指定的時間。

 

時序常用內建函數

接下來跟大家介紹一些時序設定上常用的的函數。

這個語法是用來計算某一特定日期距離現在是多少根bar:

Getbaroffset

getbaroffset的例子

getbaroffset例二

barslast

這個函數是用來計算上一次符合特定條件距離現在多少跟bar。

它的說明如下:連結

CurrentBar

當使用者需要知道目前是算到第幾根bar時,可以使用CurrentBar這個函數,說明如下:連結

 

關於資料讀取範圍的設定及相關知識

資料讀取範圍的設定,是XQ這種以K棒時序為計算基礎的語法裡,很容易因為沒有定義清楚,而容易出錯的部份,以下的這個連結,有清楚的說明了這部份的觀念

資料讀取範圍的設定 

 

在學習完時序概念之後,接下來建議大家多了解XQ內建的一些函數,這些常被使用的函數,可以加快腳本撰寫的速度。

 

常用的函數

 

邏輯函數

邏輯函數總整理

數學函數

數學函數總整理

腳本範例

強弱勢股的寫法示範

統計函數

統計函數總整理

腳本範例

用線性迴歸來寫背離

布林通道

標準差的應用

R平方

技術分析函數

技術指標函數總整理

 

了解了技術指標常用的函數之後,大家可以先從這些技術指標的設計原理著手,了解當年這些設計技術指標的人,是怎麼創造出這些指標的。

圖說技術指標的設計方式與背後的思維(一)

圖說技術指標的設計方式與背後的思維(二)

圖說技術指標的設計方式與背後的思維(三)

圖說技術指標的設計方式與背後的思維(四)

 

了解了技術指標設計的思維之後,我整理了用XQ設計指標的一樣腳本範例,大家可以對照這些指標的公式,自己撰寫腳本,再跟文章中的腳本來對照一下,這樣,學習的效果會非常好,我當初就是這麼學會一些撰寫腳本的技巧的。

%B指標

Adaptive price zone

ADI累積分配指標

ADX指標

ALF亞歷山大過濾指標

ATR真實波動區間指標

Arron oscillator

Average移動平均線

BBand 布林通道

BW MFI  市場便利指標

CCI商品通道指標

Chaikin Oscillator 恰奇震盪指標 

Chaikin Volatility  克林波動指標

Choppy market index

CMO錢德動量擺盪指標

Coppock indicator 估波指標

CV指標

CVI累積成交量指標

DKX多空線

DMI指標

DPO指標

Donchian channel 唐安奇通道

DMI

Elder Ray指標

EMA指數移動平均

EMV指標(Ease of Movement)

Force Index 力度指標

HMA改良式移動平均

IMI日內動量指標

KO克林格擺動指標

KO能量潮指標

KST確認指標

MACD

Mass Index

MA-Osc指標

Money flow Index   MFI指標

MO指標

Momentum動能指標

NVI指標

OBV指標

PSY心理線

Q指標

RVI指標

STARC  (Stoller平均波幅通道)

TMV指標

Ultimate Oscillator 終極震盪指標

VIX恐慌指數

VPT(Volume price trend) 修正式價量指標

Volume Oscillator成交量擺動指標

VWMACD指標

威廉多空力度線

Xslope 速度指標

Zero Lag HeikinAshi 先進指標

ZDZB築底指標

加速指標

波動率通道

噪音指標

隨機漫步指標

型態相關函數

型態學是大家常用的分析方式,系統也內建了一些型態函數,具體說明請見這篇:

XQ內建的型態函數

腳本範例

平台整理的寫法

M頭的寫法

平台整理後的突破與跌破

 

學習了常用的函數之後,接下來跟大家介紹如何在一個腳本裡,使用不同的商品來一起加人運算。

跨商品

跨商品與跨頻率語法的介紹

 

除了跨商品之外,有可能會用到跨頻率,例如日KD在高檔,週KD在低檔黃金交叉的情況,請參考以下的說明:

跨頻率

如何使用跨頻率的技術指標來建構交易策略

跨頻率函數總整理

陣列

陣列是一個各種程式語言都會支援的語法,請參考下面的說明文章:

陣列的應用一

陣列的應用二

陣列的應用三

實戰篇

在慢慢熟悉了XQ語法之後,接下來要透過各種寫過的腳本,來跟大家討論,我是如何運用程式,打造一個有體系的決策機制。

我的決策流程基本如下:

一、透過大盤分析,研判目前大盤是處於多頭還是空頭市場,進而決定我的持股比例。

二、透過各種選股策略,決定我的觀察清單。

三、透過各種自訂指標的撰寫,在圖像化的指標中,找出一些不斷動覆出現的規律,把它轉換成盤中即時交易策略。

四、把選股策略與盤中即時交易策略整合成一個完整的交易策略。

下面這篇文章是這個架構的詳細說明:

XQ系統化決策結構說明

 

接下來就把結構中的各個部份分述如下:

 

大盤分析

我習慣順勢而為,基本不會逆勢操作,所以我會花很大的時間來研判目前市場是處於多頭還是空頭市場,以下分別跟大家介紹XS裡提供那 研判大盤的欄位,以及我如何運用這些數據,打造一個研判大盤多空方向的機制。

以下分別先介紹一些大盤分析特別可以使用的欄位:

 

大盤分析可以使用的欄位

內外盤量

上漲下跌家數

漲跌停家數

 

接下來介紹一些大盤相關的技術指標:

大盤相關指標

上漲下跌家數差RSI指標

MFO資金流震盪指標

上漲家數有沒有200檔

OTC與上市成交量比值

上漲下跌家數

DBCD

 

綜合多個大盤指標,就可組合成大盤多空對策分數:

例子一

例子二

 

有了這些指標,就可以組合成大盤多空檢查表這樣的頁面,透過這樣的頁面來研判大盤未來的多空趨勢:

多空檢查表

 

或是打造成大盤儀表板:

大盤儀表板示範

 

甚至於,把大盤多空變成一個函數:

打造自己的多空函數

 

透過以上的工具,我們可以決定投資組合的持股比例,就算您是作當沖的,大盤分析還是很重要,多頭市場先買後賣,空頭市場先賣後買,大盤分析還是非常的重要。

在決定好持股比例之後,接下來要解決買什麼的問題,也就是要如何定選股策略。這時候就要進到XQ的「選股中心」。

 

選股中心

首先,先來看一下選股中心的使用介紹:

選股中心使用說明

 

學習如何打造具個人特色的選股策略:

打造私房選股策略

 

特別是如何把財報欄位應用在選股中:

財報欄位在選股上的應用

 

以及如何把選股時應用的欄位呈現在選股結果中:

選股結果之OutputFiled語法應用

outputfield的排序

 

以及如打造自己的選股排行榜:

創造個人的排行榜

 

學會了選股中心的使用概念後,接下來介紹一些選股的常用語,這些常用語我都先寫成腳本,大家可以下載來直接使用:

常用的選股腳本

價量欄位選股市場常用語

財報欄位選股市場常用語

籌碼型選股市場常用語

 

接下來介紹一些選股策略的範例

選股策略範例

指標選股

連兩日關鍵券商大買超

飆股的長相

法說會行情選股法

投信相關的選股策略

價值型投資皮氏選股法

主力與投信共襄盛舉

 

學會了如何選股之後,接下來就是要選擇進場時機,進場時機基本上就跟當天的價量或前一天公佈的籌碼數據息息相關,要如何運用這些資料來決定進場時機,或者說寫出進場時點的規則,最好的方法就是透過視覺化的指標,從指標與K線圖的相互關係中,找到進場的規則,所以接下來要學習的是自訂指標。

 

自訂指標

自訂指標是一個學習語法的好方法,一方面演算的數據可以視覺化呈現,二方面可以透過前賢們發明過的指標,學習如何用語法演算有意義的數據,為了讓大家可以加快學習的速度,把盡量收集了坊間常見的各種技術指標,用XS語法來撰寫,然後以A~Z的順序,排列在下方,大家可以拿這些指標的寫法作為學習的範本。

自訂指標影音教學

設定指標參數影音教學

自訂指標轉換成交易策略

例一

從股性出發的自訂指標

比大盤強的天數

真實波動區間

承接的力道

開盤委買委賣

法人買張佔成交量比例

資金流向

N日來有幾日漲幅較大

盤中短線指標

盤中上漲下跌量累計差額指標

期指盤中大戶散戶指標

盤中大戶散戶指標

預估量的計算方法

籌碼指標

長線客買賣超張數指標

 

有了各種指標之後,就可以打造個股的儀表板:

個股儀表板演化的交易決策

例一

例二

進場訊號放置位置的設定

月報酬率等績效圖的寫法

透過自訂指標訂出進場時機的規則,接下來就是使用策略雷達來產出作多及作空訊號

 

策略雷達

下面是一些撰寫策略雷達時,我覺得應該學習的寫法及用法:

當沖語法支援的欄位說明

背離的寫法

累計值的寫法

盤中有大單的寫法

從今天開盤起算的語法

反彈的寫法

以上是策略雷達常用的語法,到這裡,已經學會完整的自動化投資決策流程。

 

接下來就是把這些流程串在一起,變成一個自動化的投資策略,請看以下的幾篇相關的介紹文:

撰寫交易策略的SOP

一個交易策略的熟成

如何寫出高勝率的交易策略

從上面的文章中,我們可以了解到,一個完整的交易策略,往往會包括了選股策略及交易時機。

以下,我就分門別列的跟大家分享不同的交易策略,這些策略的語法都不難理解,主要是希望可以啟發大家的靈感,打造出自己專屬的交易策略。

 

極短線交易策略

在XQ上實踐當沖交易的具體步驟

我的現股當沖交易畫面

極短線交易策略撰寫上的一些小技巧

網路上學來的當沖方法

大盤大跌後的對應交易策略

大跌後出現什麼癥兆是可以抄底的

籌碼型交易策略

投信玩真的

外資喜歡的股票又開始連續買超

地緣券商買超

代操看上的股票

千張大戶大增

 

波段交易策略

三新高股

即將進入季節性多頭的個股

好公司暴量起漲

創百日新高且距低點不遠

月營收創52個月新高

高抗風險交易策略

大股票突破繼續型態

布林交易法則

麥克貝利交易策略

大漲的訊號

基本面創佳績的公司放量起漲

從基本面出發的交易策略

營運好轉的好公司暴量起漲

毛利率在成長的非熱門股

好公司無量變有量

十年寒窗股

高護城河股暴量起漲

用月營收預估的低本益比股

價值型投資交易策略

歐沙希價值型交易策略

股價距合理價值很遠然後開始暴量起漲

長期低價的前績優股暴量起漲

價值低估股暴量起漲

PB接近十年低點後的均線黃金交叉

高殖利率週線突破月線

夠便宜且整理結束

低本益比低PB高殖利率股暴量起漲

高平均股利殖利率暴量起漲

低股價自由現金流量比

 

在看過這麼多的交易策略之後,接下來先學會把這些交易策略變成自己的策略:

把分享的策略變成自己的策略

 

在累積了很多私房策略之後,接下來就可以同時啟動多個交易策略,然後再從跑出來的訊號中,選擇要真的去執行交易的標的:

多策略的投資決策

 

就算是人不在電腦前面,也可收到訊號:

把訊號打到手機中

 

以上是讓電腦自動產生多空訊號的流程。

接下來則是介紹「自動執行交易」,由於交易語法目前還在測試中,所臉這裡先跟大家介紹在策略雷達中如何把策略結合交易指令,未來等交易語法要正式開放時再跟大家作做介紹。

 

程式自動下單

模擬交易的規則說明

模擬交易的功能教學

下單的串接影音說明

平倉的設定UI

 

以上是目前我收集到的XQ量化平台學習內容,這份內容會置頂且會不斷的更新,目標是讓大家透過這上面介紹的文章,就可以完整了學習XQ量化平台的語法,並且寫出您專屬的量化交易策略,如果大家需要加強那方面的說明,請不要客氣,讓我知道,我會把它附上去的。

 

常用的語法匯總

 

===

●  免費下載「XQ全球贏家」,陪你自主學習,好好練功 ➤https://utm.to/52hfxl

●  量化交易必備!XQ【盤中量化交易模組】($1,000) ,完整介紹 ➤https://utm.to/52cgxq

● 「選股中心」就在XQ【盤後量化選股模組】($1,000) ,完整介紹 ➤https://utm.to/528tz9

●  首次訂閱享7天鑑賞期,首次購買輸入官方優惠碼「@XQ8899」,首月可折抵模組費用$100!

負利率陰影下的高殖利率選股原則

自從日本實施負利率,市場大多預期歐洲及美國的利率還會進一步往下掉,這樣低利率的大環境,讓投資者對那些每年都能穩定配發現金股利的企業,格外的青睞,我們稱這些股票叫高殖利率股。隨著股價的波動,殖利率是會變的,今天要跟大家介紹的,就是可以隨著每天股價變化,篩選出殖利率高個股的方法。

首先,我們先來確定一下殖利率的計算公式:

殖利率是(現金股利+股票股利)/收盤價*100%

接下來,我們來設定殖利股的選股條件

1.殖利率大於3%。

2.董監持股佔股本比例大於10%。這樣子大股東的利益才會跟小股東一致,不會把錢留在公司自己爽爽用,從事無產階級專政。

3.累計營收年增率大於0%。這是為了濾掉那些今年營運不如去年的公司,因為如果營運在衰退,那就代表未來的獲利能力可能也會衰退。

4.近4季稅後淨利成長率平均大於0。由於我們現在用的殖利率是以2014年獲利所配發的股利作計算基礎,加這個條件可以尋找那些2015營運不輸2014的公司。

5.來自營運之現金流量大於1千萬。 這是為了確定公司的獲利有帶進現金,因為有現金才能大方的配發現金股利。

透過這五項的選股條件,我們一共找到129檔殖利率大於三且去年及今年營運不差的公司。我根據其殖利率的高低,附在下方。

030201

 

 

030202

 

030203

 

030204

有了這個選股法,只要每天都按一次,就會用最新的股價,再算一次,也就是說,股價上漲後,殖利率變低的會被排到後面去,或甚至落榜,股價下跌,殖利率就變高了,這時就可能排到前面去了。

這樣的篩選方法,會被遺漏的,是那些高殖利股,但今年一月營收衰退的公司,這些公司衰退幅度在20%以內的,還有100檔,我把這些公司也補在下面

030404

030205

 

030206

 

看到這兩百多檔股票,各位一定會覺得太多了,不知到要挑那一檔,所以我再加上一條選股條件:  最近四年現金股利平均大於兩元,這條件代表這家公司平均起來每年都能配發一定的現金股利。

加上這個條件,符合全部條件的公司從 229檔減少到只剩下71檔

名單我依殖利率高低,列在下方

030207

030208

 

 

最後附上選股條件的完整列表

030209

 

負利率時代,獲利穩定,每年能配發一定現金股利的公司,確實比較受到青睞,但我們不要忘了,目前全球經濟的情勢並不穩定,所以在挑股票時,還是得留意選擇那些不受全球景氣影響,仍能穩定交出獲利成績的公司,這些公司就算短期隨著大盤而修正,至少隨著業績開出來,還有解套的機會。

跨頻率多重濾網交易策略的設計

在設計交易策略時,常有跨頻率的需求,今天來跟大家討論,類似這樣的交易策略,要如何設計。

在程式交易這個領域裡,Alexander Elder的著作: “Trading for a living”是大家常會拿來參考的一本書

trading for a living

 

這本書有中譯本,名稱叫作” 操作生涯不是夢”

操作生涯不是夢

 

在這本書裡,Alexander 提出了一個觀念: 叫作三重濾網交易系統(Triple Screen Trading System),它的概念是把股價波動的趨勢分成三種,一是主趨勢,二是中期趨勢,三是短期趨勢,他用Tide(潮汐),波浪(Wave)與小漣漪(Ripple)三種海浪的變化來代表這三種不同的趨勢,顧名思義,潮汐是長線的主要趨勢,漲潮時,海水會愈來愈逼近海岸,退潮時則海水會離海岸愈來愈遠。在漲潮退潮的過程中,海浪則是一波波打向岸邊,不斷地往前衝然後後退,漣漪則是海浪踫到不同地形地物時所激起的浪花,雖然漂亮而惹人注目,但對於大方向無關緊要。

Alexander的三重濾網交易系統的概念就是

1.掌握主要趨勢。(週線)

2.在短期超買超賣後尋找進場時機(日線)

3.從股價的波動中確認進場點(盤中)

這樣的觀念,等於在一個交易系統中,同時使用了週線,日線及盤中洗價(例如60分鐘線)這樣的概念,這是一個跨三種頻率的交易策略,這樣的策略該怎麼建構呢?

首先,我們先用選股來處理日線及日線以上頻率的條件,如週線及月線等,然後再把選股的結果拿去跑一個盤中洗價的日線或分鐘線的策略雷達腳本。

舉個例子,我們來建構一個符合下列三個條件的三重濾網交易系統

1.週線的移動平均線是多頭排列。

2.日線KD進入超賣區

3.盤中60分鐘線創新高

首先,我們先寫下兩個選股腳本

input:S1(6,"天期");
value1=average(close,s1);
if close>value1
then ret=1;

上面這個是移動平均線多頭排列,我們把這腳本應用在週線上

下面這個則是KD進入超賣區

// KD指標, K值由下往上穿越D值
//
input: Length(9), RSVt(3), Kt(3);
variable: rsv(0), k(0), _d(0);

SetBarBack(maxlist(Length,6));
SetTotalBar(maxlist(Length,6) * 4);

SetInputName(1, "天數");
SetInputName(2, "RSVt權數");
SetInputName(3, "Kt權數");

Stochastic(Length, RSVt, Kt, rsv, k, _d);

IF k<20 and _d<30
then ret=1;

我們把這個腳本用在日線上

 

最後我們運用突破近期新高的腳本

input: Price(close); setinputname(1,"比較價別");
input: Length(10); setinputname(2,"近期期數");

if Price > highest(high[1] ,Length) then ret=1;

然後把這個腳本用在60分鐘線 透過這三個腳本,我們串起了一個跨頻率的交易策略 首先我們運用前兩個腳本,挑出符合條件的股票

030101

然後再把這個選股策略取個名字叫” 三重濾網之前兩重” ,然後讓系統” 每日自動執行”

 

最後我們再把第三個腳本納入每日自動執行的策略雷達

030102

如此一來,符合這三重濾網的股票,在盤中就會出現在警示中心這個頁面了。

 

市場的老人常叫我們不要逆勢操作,也常要我們用長線保護短線,或是說看長作短,三重濾網交易系統的設計概念,跟市場老手們的想法不謀而合。

至於這三重交易系統應該用什麼指標,書上是建議第一重看長線,可以用趨勢型的指標,如MA,MACD等,第二重則建議用震盪指標,如KD,RSI等,第三重則是用突破型交易策略,因為這三者合在一起就可以找出在對的趨勢裡,短期整理後又重新往趨勢前進的股票。

要提醒大家的是,目前的XS系統,並沒有在同一個策略雷達腳本中,讓User處理跨頻率,而選股腳本又只能處理日線及以上的頻率,因此,目前我們目前在XS上執行三重濾網的交易策略時,前兩重一定要日線以上,例如我們無法執行一個用日線,60分鐘線及一分鐘線所構成的三重濾網交易系統,這還有賴嘉實的XS產品開發團隊的努力才能達成,目前是做不到的。

 

主力一直在買的股票何時可以進場跟單?

為什麼主力買超這麼多? 股票還是不會漲?

主力買超的股票我衝進去買,會不會剛好被主力出貨?

自從主力買超這樣的資料隨處可以取得之後,這兩個問題常常被提出來。

我寫過幾個腳本,想要找出主力佈局後開始拉高的第一時間點,以下是我的研究過程。

 

首先我想先找出主力買超且股價近期還沒有大漲過的股票,我用的選股條件如下:

022603

首先我先定義那些股票是屬於主力買超

1.近2天每天都買超超過500張

或者是

2.近2天每天買超張數合計佔成交量5%以上

或者是

3.最近10天加起來買超超過2000張

其次,我只挑中小型的股票,所以我設了一個條件把股本超過100億元的股票都濾掉

最後,為了避免被主力逢高出貨,所以我濾掉那些主力買超但十天內漲幅超過一成的股票,這個部份我是寫了一個選股的腳本如下:

input:period(10,"計算區間");
input:ratio(10,"最低漲跌幅");

if close[period-1]<>0
then begin
if (close/close[period-1]-1)*100<ratio
then ret=1;
end;
outputfield(1,(close/close[period-1]-1)*100,1,"區間漲跌幅");

以昨天為例,昨天符合這些條件的股票共有45檔,我根據主力買超張數排序,超過100張的名單如下: 020604

接下來我用符合這些條件的股票,用盤中的腳本去跑,希望找到那些主力即將開始拉昇的股票,以下的這個腳本,是我覺得不錯用的

if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");
input:n1(10);
setinputname(1,"開盤連續幾分鐘");
variable:BarNumberOfToday(0); 
if Date <> Date[1] then BarNumberOfToday=1 
else BarNumberOfToday+=1;{記錄今天的Bar數} 

if Date =currentdate then begin
variable: idx(0),tTime(0);
tTime=0;
 
for idx = 0 to n1-1
begin
if Close[idx] > Close[idx+1] then tTime+=1;
 {推升時記1}
 end; 

if tTime >=n1*0.6//1分鐘線大部份的時間都在上漲
and q_PriceChangeRatio < 5 {漲幅仍在5%內}
and Timediff(Time,Time[BarNumberOfToday-1],"M") =n1{分鐘} 
 {離開盤第1個價10分鐘內}

then ret=1;
end;

這個腳本是去尋找今天開盤前十分鐘,十根一分鐘線裡,至少六根是上漲的。為什麼這麼寫呢? 因為通常主力買超的數據在前一晚公佈後,今天開盤一定會有散戶去搶,主力如果還沒有要開始拉,開盤的時候應該是會站在賣方,打下來之後再繼續吃,如果開盤十分鐘走勢超過六成的時間都上漲,很有可能就是今天要表態了。

當然這個腳本如果在大盤開高時,容易出現錯誤的訊號,但如果在大盤開低或開平時,就很值得參考了

 

以上是我的研究,報告完畢。

 

 

 

到底什麼樣的股票可以拿來當存股的標的??

我的前老板錢太多沒處放,台幣利率又低,讓我挑幾檔可以拿來每年分點股利又能保本的股票來投資,他要的報酬率不高,年報酬五%就可以接受。為了達成任務,我把1000多檔股票用一些條件濾了一遍,最後給了他一些名單。在這過程中我發現,市場上不少的存股概念,好像太複雜了,我認為,挑定存股就是三原則:獲利穩定,配息穩定,會填息。然後就是等每年股票市場大跌後,開始分批買進。

 

這幾年,可能是台幣利率太低的關係,定存股的概念愈來愈受重視,我看到這類相關文章的時候,發現很多的觀念,例如要看ROE,ROA,要看自由現金流量等等的,這些都超過一般人的能力範圍,當然多學一點不是壞事,但怕的是學太多沒有聚焦反而無法挑到對股票。

我這次在挑定存股的過程,試了一些方法,最後回頭仔細比對後,我覺得以下的幾個重點才是直指核心,最能挑出安心定存股的

1.長期穩定股利,且獲利每年都達到一定水準

2.長期營運不曾有大衰退

3.董監事持股超過一定水準

所以我先寫一個腳本來找出過去五年每年現金股利最少兩元,而且最近四季稅後淨利超過兩億元台幣的公司。

以下是這個腳本的內容

input:p1(2,"現金股利下限");
input:period(5,"符合條件的連續年數");
condition1=false;

value1=GetField("現金股利","Y");
if trueall(value1>=p1,period) or trueall(value1[1]>=p1,period)
then condition1=true;

value2=GetField("本期稅後淨利","Q");//單位:百萬
value3=summation(value2,4);

if value3>200
then condition2=true;

if condition1 and condition2
then ret=1;

符合這個腳本條件的股票有140檔,名單如下:

022503

接下來再從這140檔當中,濾掉那些過去幾年曾經有較大衰退的公司,所以我在上面提到的那個腳本中,再加上下面的濾網:

condition3=false;

value4=GetField("營業利益成長率","Y");
if countif(value4<-15,period)=0
then condition3=true;

if condition1 and condition2 and condition3
then ret=1;

 

這個濾網的意思就是濾掉那些過去幾年曾經有任何一年獲利衰退超過15%以上的公司,加上這個濾網,我們濾到只剩63檔股票。

022504

 

接下來我再設了一個濾網: 董監事持股比例超過15%。加了這個條件之後,符合的股票再被濾掉 23檔,剩39檔,名單如下:

022505

最後我再設一道濾網,濾掉那些短期業績明顯在衰退的,我設的條件是濾掉那些近半年月營收年增率平均衰退超過5%的。經過這個過濾的方式後,再濾掉八家,剩31家,名單如下:

022506

這三十一檔就是在大盤大跌後,我覺得可以加入定存股名單的股票,當然這個名單在每個月月營收公佈後,都需要用最後一個濾網再重跑一次。

過去一年,加權指數跌了13%,這31檔股票有19檔的年報酬率是維持在零以上,表現比加權指數差的只有川湖,天仁,景碩,聯強及美利達這四檔,可見這樣的投資組合至少是會打敗大盤的。

綜合以上的說明,我的存股法條件就是以下三條

022507

第一條是用XS腳本寫的,第二條及第三條都是透過系統內建的條件式,只是調整參數而已。

 

以上就是我的存股法SOP,邏輯單純: 每年都會配息,業績長期不衰退,董監持股不低,最近半年業績沒有大衰退。

 

計算區間漲跌幅的自訂函數

想知道今年以來,漲幅大的是什麼類型的股票,順手寫了一個區間漲跌幅的自訂函數,也就野人獻曝,順便跟大家分享寫自訂函數腳本時,要留意的事。每年年初我極愛看漲多的股票是那些,因為以前我師傅說可以從這些股票看出今年的選股方向。從這些股票來看,感覺今年是中小型股個股表現的格局。

先來介紹一下計算區間漲跌幅的自訂函數,我寫的腳本如下:

 input:price(numericsimple);
 input:startday(numericsimple);
 input:endday(numericsimple);
 value1=getbaroffset(startday);
 value2=getbaroffset(endday);
 {if value1>value2
 then raiseruntimeerror("起始日期不能晚於結束日期");}

 value3=(price[value2]/price[value1])-1 ;
 rangechange=value3*100;

順便跟大家提幾個撰寫自訂函數腳本時,要稍加留意之處
1.自訂函數的名稱一定要是英文的。
2.在用input設定參數時,參數名稱後面括號後不能直接打預設值,而是要寫預設的資料格式,目前XS支援的資料格式分成三種,Numeric數值,String字串,邏輯值TrueFalse。細分是否傳值或傳址, 是否為陣列、序列、或是簡單型態,宣告的名稱如下:

函數的參數格式

3.最後一定要記得描述該自訂函數名稱的演算方式。例如在這個例子中一定要記得寫

rangechange=value3*100;

有了這個函數,要寫區間漲跌幅的選股腳本就容易多了:

input:startday(20150702,"區間起始日");
input:endday(20151002,"區間結束日");
input:ratio(10,"最低漲幅");

value1=rangechange(close,startday,endday);
if value1>=ratio
then ret=1;
 
value2=GetField("最新股本");
value3=GetField("月營收年增率","M");
value4=GetField("股價淨值比","D");
outputfield(1,value1,1,"區間漲跌幅");
outputfield(2,value2,0,"股本(億)");
outputfield(3,value3,1,"月營收年增率");
outputfield(4,value4,1,"股價淨值比");

這個腳本的outputfield的部份,為了觀察方便,可以像上面的寫法一樣,多加幾欄。

根據這個選股腳本,從今年一月三日到昨天,漲幅超過三成的股票如下:

022402

一共35檔股票,從這些檔位中可以發現

1.股本除了中鴻144億之外,全部都在40億以下,30億以上的也只有鎧勝及揚智兩家。

2.接近三分之二的股票月營收年增率有兩位數成長

3.其中一半股價淨值比在二以下。

有了區間漲跌幅這個自訂函數,以及outputfield這個輸出特定資料欄位的語法,我們可以很快的挑出特定區間漲幅或跌幅超過一定比例的股票,並且以我們希望呈現的欄位,加以排序。這對我們在作功課時,有不少的幫助。

 

價值型轉機股

今年開紅盤以來 ,漲幅超過兩成的股票共有42檔,其中31檔股價在 50元以下,32檔最近一個月的月營收年增率是成長的,29檔本益比在20以下,其中有一部份是虧錢的公司,這些數字顯示,這一波的領頭羊是那些低PB且營運具轉機的個股,我稱之為價值型轉機股,今天來跟大家介紹一些這方面的選股腳本。

當我想知道現在是什麼類型的股票在帶頭上漲時,我會用底下的腳本去跑選股:

input:startdate(20160203);
input:ratio(15,"漲幅下限");
value1=getbaroffset(startdate);
if close[value1]<>0
then value2=(close-close[value1])/close[value1]*100;
if value2>ratio
then ret=1;
outputfield(1,value2,1,"區間漲跌幅");
outputfield(2,GetField("股價淨值比","D"),2,"股價淨值比");
outputfield(3,GetField("月營收年增率","M"),2,"月營收年增率");
outputfield(4,GetField("本益比","D"),1,"本益比");

這個腳本跑出來的股票,我透過股價,股價淨值比,月營收年增率及本益比四個面象,去判斷現在是流行成長股,價值型股,低價股/高價股,還是低本益比股。

從封關到昨天收盤為止,透過這個腳本選出來的,漲幅超過兩成的股票中,PB較低的股票如下:

022001

我們會發現,這當中不少股票,最近一個月的月營收年增率有著明顯的成長。

這種股票,我幫它取了一個名字: “價值型轉機股”。

這種股票有兩個特徵:

1.股價跌到其市值低於其真實價值

2.營運最壞的時候過去了。

後者比較容易判斷,只要看月營收的數字即可,前者比較麻煩,什麼叫作真實價值呢? 有的股票適合用股價淨值比來衡量,有的適合用本益比來衡量,於是,我乾脆寫了一個腳本,把各種衡量價值型股票的常見方法全部寫出來,然後個股只要符合其中一個條件我就把它挑出來,然後再把這一整群的個股搭配營收是否成長的選股條件,這樣就可以找出所謂的”價值型轉機股”。

我寫的腳本共有六個:

一,本益比小於 15 倍 股價淨值比小於 2 倍 殖利率大於 3%

{本益比小於 15 倍 股價淨值比小於 2 倍 殖利率大於 3%}
if GetField("本益比","D") < 15 and
 GetField("股價淨值比","D") <2 and
 GetField("殖利率","D") > 3 and
 GetField("營收成長率","Q") >0 
  then ret=1;

這個腳本是最基本的篩選條件

二,用月營收推估的低本益比股

value1=GetField("月營收","M");//單位:億元
value2=GetField("月營收月增率","M");
value3=GetField("月營收年增率","M");
value4=GetField("營業利益率","Q");
value5=GetField("最新股本");//單位:億元
condition1=false;
condition2=false;
input:peraito(12);
setinputname(1,"預估本益比上限");
if value5<>0
then
value6=(value1*value4*12)/(value5*10);//單月營收推估的本業EPS
if value6<>0
then 
value7=close/value6;

if value7<peraito and value7>0

then ret=1;

這個腳本是用單月營收去推算來自本益的盈餘,然後再用這個盈餘去計算本益比

三,每股的流動資產遠大於股價

input:percent(20);
 setinputname(1,"每股易變現資產與股價間的落差比");
 value1=GetField("現金及約當現金","Q");//百萬;
 value2=GetField("短期投資","Q");//百萬
 value3=GetField("應收帳款及票據","Q");//百萬
 value4=GetField("長期投資","Q");//百萬
 value5=GetField("負債總額","Q");//百萬
 value6=GetField("最新股本");//單位: 億
 value7=(value1+value2+value3+value4-value5)/(value6*10);
 if value7>close*(1+percent/100)
 then ret=1;

這個腳本是找出那些每股可以快速變現的價值高於每股股價

四,流動性資產減負債超過市值N成

input:ratio(80,"佔總市值百分比%");
if (GetField("流動資產","Q")-GetField("負債總額","Q"))/100>GetField("總市值","D")*ratio/100
then ret=1;

這個腳本找出那些股價已經很接近淨流動性資產的股票

五,高現金總市值比的公司

//現金總市值比高的公司 
value1=GetField("現金及約當現金","Q");//單位百萬
value2=GetField("短期投資","Q");//單位百萬
value3=(value1+value2)/100;//單位億之現金及短期投資合計金額
value4=GetField("總市值","D");//單位:億
if value4<>0
then value5=value3/value4;//現金總市值比;
if value5>0.7 and value3>3 //現金總市值比大於0.7且現金及短投合計超過3億
then ret=1;

這個腳本是找出那些有大量閒置現金,但股價低的公司

六,高自由現金流量總市值比

input:ratio(50);
 setinputname(1,"近四季自由現金流總合佔總市值最低比率單位:%");
if (GetField("來自營運之現金流量","Q")+GetField("來自營運之現金流量","Q")[1]+
 GetField("來自營運之現金流量","Q")[2]+GetField("來自營運之現金流量","Q")[3]-
 GetField("資本支出金額","Q")-GetField("資本支出金額","Q")[1]
 -GetField("資本支出金額","Q")[2]-GetField("資本支出金額","Q")[3])
 >GetField("總市值","D")*100*ratio/100
 then ret=1;

這個腳本可以用來尋找那些有創造出高自由現金流量但股價低估的公司

我把這六項腳本全部放到一個選股法中,然後設定任何一檔個股只要符合這六項的其中兩項就被選出來

設定的畫面如下:

022501

如些設定後挑出的股票共有269檔,我把符合條件較多項的列在下方

022502

 

這269檔股票就是我們一般定義的價值型股,接下來我們就可以留意這269檔股票的營運是否出現轉機,若是出現轉機,就符合我所謂價值型轉機股的定義,而這種股票,應該會是今年大家買的較為安心的族群。

以上的流程,對於價值型股票的定義,大家可以自行調整或設計,但是尋找價值型轉機股的這個方法,大家不妨持續不斷地嚐試,小弟過往依賴這個方法,有不錯的實戰效果。