Author Archives: 發財橘子

找出市場上每股現金最多的公司

選股的時候,有的時候會想找出某個條件排名前N名的公司,但如果系統不支援這個條件的排名時該怎麼辦? 例如我想找每股流動資產跟股價最接近的公司前20名,要怎麼做呢? 今天就是來跟大家分享這種自訂排行榜的寫法。

首先,得先把想要合排行的數值的演算規則寫成函數

2017062101

這裡用中文的函數名稱,目的是讓user可以很快的找到這個函數。

接下來就是撰寫這個函數的腳本

value1=GetField("現金及約當現金","Q");//百萬
value2=GetField("短期投資","Q");
value3=GetField("短期借款","Q");
value4=GetField("總市值","D");
value5=(value1+value2+value3)/(value4*100);
if value4<>0 then 
value6=value5/value4;
ret=value6;

這個函數腳本跟英文腳本的差別就在於用ret來代替英文的函數名稱作為賦值的敘述。

從上述的腳本中,可以理解,我想找的是現金與短期投資合計後減去短期借款後,跟總市值的比值,這個數字如果大於一,代表光公司馬上處理後的現金就高過公司目前的市值,通常這種公司就算是超跌了。

寫完函數後,接下來就是把這個函數拿來當作排行榜的條件,設定的流程如下

2017062102

2017062103

這樣就可以完成自訂的排行條件了。

這個功能是XQ6.2版之後才支援,透過這個方法,就可以自己來設計要排行的數字的演算方法了。

 

輸錢的時候該怎麼辦?

成功的交易者不是每賭必贏,而是當輸的時候,他們知道怎麼渡過手氣不順的時候。大部份的市場參與者,對於今天輸錢或贏錢,都把它歸諸於運氣,每天進場前,都得像骯髒哈利拿著一把大槍,然後問自己: Do you feel lucky today??

do you feel lucky today

當量化交易開始愈來愈盛行之後,我總會踫到有些人,在程式讓他輸錢時,就不知該不該再繼續用程式交易下去。

好的程式交易者不是靠運氣,靠的是機率, 既然是機率,除非勝率是100%不然一 定會有虧錢的時候,我想引用諾曼第空降這部影集裡的史畢爾排長一段話

speer

當他的小兵躲在散兵坑裡崩潰時,他說了以下這段話:

“你以為你還有生還的希望,所以你躲在戰壕裡

但是,你唯一的希望是接受你已經死定了這個事實

愈快接受這個事實,就能夠愈快的像個軍人一般行動

"

“你以為你這輩子做交易都只贏不輸,所以你只有在一定贏的時候才出手,其結果就是除了內線交易之外,你什麼事情都不能做,因為這世界上根本就不會有一種每次進場都一定賺錢的交易策略。

先承認程式交易也是會虧錢,然後透過資金控管不讓單一筆交易讓你血本無歸,這才是程式交易者面對虧錢時應有的態度。

自從開始從事程式交易以來,總會踫到一些對程式交易很敵視的人,這種人踫多了,我終於歸納出一個結論:  不能接受失敗的人,千萬不要踫程式交易。

我踫到過一位學歷很高的女生,用很不屑的表情,宣稱她研究所的時候做了一大堆的計量模型,但還是會讓她輸錢。也踫到一位智商超級高的業界高管,他說計量這東西只能拿來做套利,千萬不要用來作投機。我問他為什麼這麼說,他說如果寫程式就可以賺錢,現在最有錢的人不會叫巴菲特(顯然他不認識James Simons)。

這些排斥程式交易的人都很聰明,學歷很高,跟這些人相處久了,我終於搞懂一件事:  這些人是人生勝利組,一直都贏,所以很難接受輸。

但程式交易其實跟打棒球一樣,打撃率三成以上就是強打者了,而這些一直都在贏的人生勝利組,他們不喜歡輸的感覺,所以很難接受這樣的交易方式。

但以我個人的經驗,我做十個交易,常常有一半以上是輸錢,但程式交易幫到我的,是輸錢的時候有紀律的停損,賺錢的時候,讓子彈飛一會,這麼一來,雖然輸的交易比贏的還多,但輸的有限,賺的賺一大段,所以加總起來還是有賺到錢。

愈快接受你一定會輸錢這個事實,然後學會輸錢之後怎麼管理你的部位及情緒,這樣你離靠交易賺錢的目標就近一點,愈快成為一個成功的交易者。

有本數據派都很愛的書: 魔球,這本書裡教的最重要的事情是,大聯盟一年有162場例行賽,要打入季後賽不用每一場都贏,只要贏的夠多就好了。

moneyball-pic-Kelsey

千萬要記得,不用每一場都贏, 程式交易的核心精神就在於,一直上場打擊,如果策略的勝率夠高,機率最早會發生作用,不用每場都贏,只要贏夠多場就行了。

那麼使用者程式交易者這麼用功的寫策略,目的在作什麼呢??

巴菲特在他的記錄片裡提到一個概念:  投資最棒的地方在於: 你可以等到球進到你最有把握的那一個地方才揮棒。

巴菲特說,最偉大的打撃者泰德威廉斯在好球帶裡不同的位置,打擊率不一樣,所以投手會把球投到打擊者打擊率比較差的地方,但投資最令人愉悅的地方在於,使用者沒有三好球被三振的壓力,使用者可以等待,等到球投進使用者打擊率最高的地方再揮棒。

持續不斷地研發交易策略,就是尋找那些使用者打擊率最高的點。

 

 

什麼公司才是當沖的好標的?

傳統的投資理論都跟我們說風險跟報酬成正比,想要賺的更多,就要冒更大的風險,反脆弱理論教我們要挑那些別人挫屎的時候反而獲利的公司,問題來了,怎麼衡量一家公司在冒同樣的風險的情況下,獲利的機會比別的股票多? 在挑選基金的時候我們學過夏普值,jensen指標等這些概念,我想了解,這些指標數字不錯的公司,如果拿來作當沖或隔日沖,績效會不會比一般的股票好,就好像想試看看過去幾次月考考的不錯的學生,如果隨堂考會不會考比較好。

首先,先來說明幾個績效指標的計算方法

beta值: 個股的股價變動與市場大盤指數變動的相關性。也就是當市值平均上漲/下跌1%時,個股的漲跌幅將為β%的水準。

Jensen 指標: 一個月的平均報酬率 – 無風險利率 – Beta值 *

Teynor指標: 一個月的平均報酬率 – 無風險利率 / 商品的Beta值,用來衡量每單位系統風險所獲得的超額報酬。

sharpe值: 一個月的平均報酬率 – 無風險利率 / 過去一個月的報酬率的標準差,衡量每單位風險所獲得的超額報酬。

接下來,來試試看不同指標選出來的前100檔股票,在過去一年,用同一個交易策略,績效怎麼樣?  排行榜怎麼做出來,請大家參考如何用特定指標來進行排行的方法 

用上面連結的方法

首先用sharp值,把排名前100名的股票去回測以下的腳本

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

if barnumberoftoday=3
//今天第三根1分鐘K,也就是開盤第三分鐘
then begin
if trueall(close>=close[1],3)
//連三根K棒都是紅棒
and volume>average(volume[1],3)*2
//成交量是過去三根量平均量的兩倍以上
and close=highd(0)

//收最高
then ret=1;
end;

這個腳本是一個當沖或隔日沖的腳本,停損停利設為4%去回測6個月,回測報告如下: 2017061301 如果這個指標改成jensen指標,回測報告如下: 2017061302 最後用teynor指標的排行前100名跑同樣的腳本,回測的結果如下 2017061303 根據這個不嚴謹的試驗,要做短線,挑sharpe值高的股票,勝算會比較高 大家一定會問,如果把所有的股票都拿去跑這個腳本,回測的數字會如何? 2017061304 這樣看起來,確實sharpe值表現良好的公司,把它們拿來做當沖標的,是一個可以繼續研究的方向

 

 

 

 

 

台積電多少錢可以買?

上週五美國科技股大跌  高盛甚至說,包括FB,Google,Amazon,apple及mcirosoft等前五大科技股FAAMG,已經成為Air Pocket stock,踫到利空就會急挫,那麼台積電都200多了,還能不能買啊?  為了回答這個問題,我乾脆寫了一個未來股利折現值的函數,來算算台積電到底值多少錢?

股利折現值是什麼概念呢? 就是把未來可預見公司可以發放的現金股利折現還原成現在的價值。

這個數字加上每股淨值,就是價值投資派心目中的合理股價。

以下是股利折現值的公式

股利折現值

從這個公式可以了解,當利率愈低,股利及股利成長率愈高,股利折現值就愈大。

我把這個公式寫成一個函數如下:

input:price(numericsimple);
input:grossrate(numericsimple);
input:rate(numericsimple);
input:period(numericsimple);

var:x1(0);
var:y(0);
y=0;

for x1=1 to period
begin
y=y+price*power(1+grossrate/100,x1)/power(1+rate/100,x1);
end;
discountvalue=y;

透過這個函數,用以下的選股腳本,只要輸入股票代碼,就可以算出特定股票的每股真實價值。

input:s1("2330.tw");
if symbol=s1 then begin
input:period(1,"折現計算期間");
input:GR(0,"股利預估成長率");
input:rate(2,"折現率");

value1=GetField("現金股利","Y");
value2=GetField("每股淨值(元)","Q");
value3=value2+discountvalue(value1,GR,rate,period);
if close<>0
then 
value4=(value3-close)/close*100;

//if close>value2 and value4>=30 then 
ret=1;
outputfield(1,value2,1,"每股淨值");
outputfield(2,value1,1,"現金股利");
outputfield(3,value3-value2,1,"股利折現值");
outputfield(4,value3,1,"淨變現價值");
outputfield(5,value4,1,"股價折價率");
end;

我們實際來算一下台積電,台積電的現金股利是7 元,假設未來十年每年的股利成長率是10%,那麼根據這個公式算出來的股利折現值是108.5,加上 5 6.1元的每股淨值,每股真實價值為164.7元,但AI是未來趨勢,如果您假設台積電未來十年因為AI的關係,股利年增率可以達到兩成,那麼真實價值就會跳昇至246.5元,目前的股價就不算貴,所以台積電值多少錢,就看各位覺得未來它的業績成長的幅度會有多大。

各位可以把這個選股腳本及discountvalue函數copy到自己的操盤高手中,然後在選股介面中,輸入股票代碼及預估的股利平均成長率如下圖

折現輸入處

那麼就可以算出任何一檔股票的真實價值。

 

 

 

 

反脆弱選股法

昨日去中興大學,參加財金系與資管系合開的Fintech課程的成果發表,當中有幾組同學把反脆弱的概念放到台股的選股策略上,回測的效果不錯,今天就來跟大家分享這個反脆弱的選股概念。

什麼叫反脆弱呢?  就是不受外界動盪影響其營運,甚至外頭愈動盪,對其營運愈有幫助。

這樣的公司,在財務報表上的特徵是

" 稅後淨利成長率大於營收成長率"

 

因為這樣的公司,不需要為了新增的營收花上同比例的成本,在外在環境風雨飄搖的時候,縱使營收衰退了,但盈餘衰退的幅度不會比營收衰退的幅度大。

根據這個特徵,我寫了一個反脆弱的腳本如下:

condition1=false;
value1=GetField("營收成長率","Y");
value2=GetField("稅後淨利成長率","y");
value3=GetField("本期稅後淨利","Y");//單位:百萬

if value1>0//年營收是成長的
and value2>0//年盈餘也是成長的
and value2>value1
//盈餘成長率大於營收成長率
then condition1=true;

if countif(condition1,5)>=4
//過去五年至少四年符合上述情形
and value3>500
//年稅後淨利超過五億元
then ret=1;

用到最新一年的財報來運算,符合條件的股票共有41檔

2017060701

根據同學們的研究,用這個方式挑出來的股票,把它做成投資組合,長期下來,不只可以打敗大盤,也贏大盤蠻多的。

舉個例子

我拿回測數據不錯的腳本: 月KD高檔鈍化且日KD黃金交叉去回測所有股票過去三年,平均報酬率是7.07%,但如果我用反脆弱選股法挑出來的股票,平均報酬率是9.89%,這樣的差距非常明顯。

以上是反脆弱的概念在台股上的一個應用。