Author Archives: 發財橘子

如何在XS選股中心用財報數字選股

8/14剛過,第二季季報全部已揭露,趁這個時候,跟大家比較完整的介紹XS選股中心裡的財報欄位,內建的相關腳本,讓大家可以在每一季財報公佈後,可以按個鍵就完成財報相關的選股工作。

一,系統內建的可供選股的財務面欄位

目前選股中心裡,提供了152個財報欄位,大致可以分成以下幾類

A.資產負債表相關欄位

資產負債表的相關欄位
現金及約當現金 季,年
短期投資 季,年
應收帳款及票據 季,年
其他應收款 季,年
短期借支 季,年
存貨 季,年
預付費用及預付款 季,年
其他流動資產 季,年
流動資產 季,年
長期投資 季,年
未完工程及預付款 季,年
固定資產 季,年
遞延資產 季,年
無形資產 季,年
其他資產 季,年
資產總額 季,年
短期借款 季,年
應付商業本票 季,年
應付帳款及票據 季,年
預收款項 季,年
其他應付款 季,年
一年內到期長期負債 季,年
其他流動負債 季,年
流動負債 季,年
長期負債 季,年
遞延貸項 季,年
退休金準備 季,年
遞延所得稅 季,年
負債總額 季,年
普通股股本 季,年
特別股股本 季,年
預收股款 季,年
資本公積 季,年
法定盈餘公積 季,年
特別盈餘公積 季,年
未分配盈餘 季,年
外幣換算調整數 季,年
庫藏股帳面值 季,年
股東權益總額 季,年
負債及股東權益總額 季,年

 

B.損益表相關欄位

營業收入淨額 季,年
營業成本 季,年
營業毛利 季,年
聯屬公司間未實現銷貨 季,年
營業費用率 季,年
推銷費用 季,年
管理費用 季,年
研發費用 季,年
營業利益 季,年
利息收入 季,年
投資收入/股利收入 季,年
處分投資利得 季,年
投資跌價損失回轉 季,年
處分資產利得 季,年
兌換盈益 季,年
其他收入 季,年
營業外收入合計 季,年
利息支出 季,年
處分投資損失 季,年
投資跌價損失 季,年
處分資產損失 季,年
兌換損失 季,年
稅前淨利 季,年
所得稅費用 季,年
經常利益 季,年
停業部門損益 季,年
本期稅後淨利 季,年
加權平均股數 季,年
稅前息前淨利 季,年
稅前息前折舊前淨利 季,年
常續性利益(稅後) 季,年

C.現金流量表裡的欄位

投資活動之現金流量 季,年
來自營運之現金流量 季,年
理財活動之現金流量 季,年

D.各種財務比率

獲利能力

每股稅前淨利 季,年
每股稅後淨利 季,年
營業毛利率 季,年
營業利益率 季,年
營業淨利率 季,年
稅前淨利率 季,年
稅後淨利率 季,年
每股淨值 季,年
股東權益報酬率 季,年
資產報酬率 季,年
每股營業額 季,年
每股營業利益 季,年

成長力

營收成長率 季,年
營業利益成長率 季,年
稅前淨利成長率 季,年
稅後淨利成長率 季,年
總資產成長率 季,年
淨值成長率 季,年
固定資產成長率 季,年

償債能力

流動比率 季,年
速動比率 季,年
負債比率 季,年
利息保障倍數 季,年
應收帳款週轉率 季,年

經營能力

存貨週轉率 季,年
固定資產週轉率 季,年
總資產週轉率 季,年
員工平均營業額 季,年
淨值週轉率 季,年
負債對淨值比率 季,年
長期資金適合率 季,年

E.其他財報欄位及比率

營業費用率 季,年
用人費用率 季,年
研發費用率 季,年
現金流量比率 季,年
有息負債利率 季,年
有效稅率 季,年
借款依存度 季,年
或有負債比率 季,年
存貨及應用帳款/淨值 季,年
應付帳款付現天數 季,年
利息支出率
稅額扣抵比率
(存貨+應收帳款)/季營收
市值營收比 季,年
每人營業利益 季,年
每股現金流量 季,年
固定資產報酬率 季,年
市研率 季,年
每股流動淨資產 季,年
企業價值 季,年
存貨營收比 季,年
盈餘殖利率 季,年
淨值自由現金流量比 季,年
盈餘成長係數 季,年
營業現金流/營業利益 季,年
股價自由現金流量比 季,年
自由現金流量營收比 季,年
杜邦型ROA 季,年
杜邦型ROE 季,年
盈餘營收成長率比 季,年
銷售費用比 季,年
誠信指標 季,年
營運資金 季,年
管理費用/季營收 季,年
現金流量允當% 季,年
現金再投資% 季,年
應收帳款週轉次數 季,年
平均收帳天數 季,年
平均售貨天數 季,年
淨營業週期 季,年
管理+銷售費用/營收 季,年
資本支出營收比 季,年
現金派息比率
資本支出金額 季,年
企業價值營收比 季,年
長短期負債比率 季,年

上述的這些欄位,系統都有內建一些選股的條件,讓大家可以直接按加號把它加到選股條件中

除了系統內建的條件之外,對於有一些常用的,但運算可能比較複雜, 或是需要用到的不只一個欄位的選股條件,系統內建了不少財務面選股腳本,茲列出如下

如果上述的條件敘述及腳本都不符合您的需求,才真的需要自己動手用XS來寫選股程式。

總的來說,如果各位在財務面選股僅僅只是用到毛利率創新高,EPS超過一元之類簡單的選股條件,其實不需要用XS的選股平台就可以在坊間找到免費的資源來使用,但如果您自己有一些想法,需要透過財報欄位來預估EPS,來挑出可能的地雷股,那麼透過XS的選股平台就可以把財報選股完全自動化,舉個例子,我之前曾經介紹過一個叫作Growth Value Index的指標,這個指標是淡江大學土木工程系的葉怡成教授所發明的,計算的公式如下:

GVI=(B/P)×(1+ROE)^5

這個指數的意思是用淨值/股價去乘上(1+股東權益報酬率)的5次方,這個數字當然是愈大愈好。

教授認為,可以從市值超過兩百億的股票裡去篩選出GVI排名前20名的公司,然後做成投資組合,之後再根據最新的數據做再配置。

根據這樣的公式,我寫了一個函數的腳本如下

value1=GetField("股價淨值比","D");
value2=GetField("股東權益報酬率","Q");
value3=GetField("總市值(億)","D");
value4=GetField("營業利益率","Q");
if value3>=200 and value4>0 then 
GVI=1/value1*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)
else GVI=0;

 

把這個GVI在選股時作為排行的函數

然後用這個排行榜來跑一個選股策略

這樣就可以完成一個有20檔股票的投資組合。

用這個選股策略去回測過去三年,持有時間設為60天,回測報告如下

這個選股策略的績效是可以打敗大盤的。

從這個例子就可以理解,財務面的指標,是可以創造出獨特的選股策略,以前我老板總說:只有想不到,沒有做不到,我們可以試著從財務面來研判一家公司的體質,管理能力,產業地位等等,然後設定一些規則,從1700多檔股票中,挑到真的符合我們設定條件的公司。

以下是其他一些透過財務面指標所設計的選股策略,也供大家參考。

如何預估EPS

用季營業利益估的EPS來算出低本益比的公司

從資本支出來挑未來可能大好大壞的股票

總市值小於流動資產減總負債的2/3的選股法

現金總市值比高的選股法

盈餘穩定且低本益比選股法

用市研率挑股票的選股法

計算估值後挑高折價的股票

獲利穩定的公司落難時

高毛利率低獲利高成長股

財報公佈前要特別小心留意的公司

 

xqlite banner

美股特別股操作實務

如果台幣趨貶,全球景氣變差,資金應該擺在那裡?

我認為,如果是非專業投資人,買投資等級公司債是個辦法,但如果對投資有一定的了解,可以留意美股的特別股。

在 XQ操盤高手美股版中,有一個美股特別股的搜尋功能

可以透過條件的設定,找出殖利率夠高且財報表現不錯的特別股。

例如下面這些美股特別股的年收益率有不少都還在6-7%

以e-Bay為例,前兩天的收益率都還有5.58%

買特別股最怕的是公司配不出股息,所以要挑的標的最好業務容易了解,財報健全,現金流量穩定,足以穩定配息。所以可以從上述畫面的發行公司進去了解相關的財報

 

 

這樣就可以挑到收益率不錯的標的。

美股特別股每季配息一次,特別是在股市走空時,特別股往往會跟著普通股稍為修正,收益率會變的很迷人,這時就是我們從裡頭挑到好標的之最好時機。

歡迎各位參加人人都是巴菲特專案,免費取得美股即時報價,並可以透過XQ全球贏家美股版,線上下單,交易美股特別股。

xqlite banner

台灣50專屬交易指標之創新高與新低指標

昨天跟大家介紹了台灣50的多空指標,有使用者問說在這樣的思維下,能否示範如何創造類似的指標,剛好觸發我寫0050多空指標的這位朋友,他原本就是專心在操作0050及00632R,所以原來就有一些私房的觀察指標,在取得他同意之後,今天來跟大家分享創新高與創新低指標。

這兩個指標的寫法跟昨天介紹的多空指標類似

腳本分別如下

創新高家數指標

value1=GetSymbolField("1101.tw","收盤價","D");
value2=GetSymbolField("1102.tw","收盤價","D");
value3=GetSymbolField("1216.tw","收盤價","D");
value4=GetSymbolField("1301.tw","收盤價","D");
value5=GetSymbolField("1303.tw","收盤價","D");
value6=GetSymbolField("1326.tw","收盤價","D");
value7=GetSymbolField("1402.tw","收盤價","D");
value8=GetSymbolField("2002.tw","收盤價","D");
value9=GetSymbolField("2105.tw","收盤價","D");
value10=GetSymbolField("2207.tw","收盤價","D");
value11=GetSymbolField("2301.tw","收盤價","D");
value12=GetSymbolField("2303.tw","收盤價","D");
value13=GetSymbolField("2308.tw","收盤價","D");
value14=GetSymbolField("2317.tw","收盤價","D");
value15=GetSymbolField("2327.tw","收盤價","D");
value16=GetSymbolField("2330.tw","收盤價","D");
value17=GetSymbolField("2357.tw","收盤價","D");
value18=GetSymbolField("2382.tw","收盤價","D");
value19=GetSymbolField("2395.tw","收盤價","D");
value20=GetSymbolField("2408.tw","收盤價","D");
value21=GetSymbolField("2409.tw","收盤價","D");
value22=GetSymbolField("2412.tw","收盤價","D");
value23=GetSymbolField("2454.tw","收盤價","D");
value24=GetSymbolField("2474.tw","收盤價","D");
value25=GetSymbolField("2633.tw","收盤價","D");
value26=GetSymbolField("2801.tw","收盤價","D");
value27=GetSymbolField("2880.tw","收盤價","D");
value28=GetSymbolField("2881.tw","收盤價","D");
value29=GetSymbolField("2882.tw","收盤價","D");
value30=GetSymbolField("2883.tw","收盤價","D");
value31=GetSymbolField("2884.tw","收盤價","D");
value32=GetSymbolField("2885.tw","收盤價","D");
value33=GetSymbolField("2886.tw","收盤價","D");
value34=GetSymbolField("2887.tw","收盤價","D");
value35=GetSymbolField("2890.tw","收盤價","D");
value36=GetSymbolField("2891.tw","收盤價","D");
value37=GetSymbolField("2892.tw","收盤價","D");
value38=GetSymbolField("2912.tw","收盤價","D");
value39=GetSymbolField("3008.tw","收盤價","D");
value40=GetSymbolField("3045.tw","收盤價","D");
value41=GetSymbolField("3711.tw","收盤價","D");
value42=GetSymbolField("4904.tw","收盤價","D");
value43=GetSymbolField("4938.tw","收盤價","D");
value44=GetSymbolField("5871.tw","收盤價","D");
value45=GetSymbolField("5876.tw","收盤價","D");
value46=GetSymbolField("5880.tw","收盤價","D");
value47=GetSymbolField("6505.tw","收盤價","D");
value48=GetSymbolField("9904.tw","收盤價","D");
value49=GetSymbolField("9910.tw","收盤價","D");
value50=GetSymbolField("2823.tw","收盤價","D");


variable:count(0);
input:period(20);
count=0;
if value1=highest(value1,period) then count=count+1;
if value2=highest(value2,period) then count=count+1;
if value3=highest(value3,period) then count=count+1;
if value4=highest(value4,period) then count=count+1;
if value5=highest(value5,period) then count=count+1;
if value6=highest(value6,period) then count=count+1;
if value7=highest(value7,period) then count=count+1;
if value8=highest(value8,period) then count=count+1;
if value9=highest(value9,period) then count=count+1;
if value10=highest(value10,period) then count=count+1;
if value11=highest(value11,period) then count=count+1;
if value12=highest(value12,period) then count=count+1;
if value13=highest(value13,period) then count=count+1;
if value14=highest(value14,period) then count=count+1;
if value15=highest(value15,period) then count=count+1;
if value16=highest(value16,period) then count=count+1;
if value17=highest(value17,period) then count=count+1;
if value18=highest(value18,period) then count=count+1;
if value19=highest(value19,period) then count=count+1;
if value20=highest(value20,period) then count=count+1;
if value21=highest(value21,period) then count=count+1;
if value22=highest(value22,period) then count=count+1;
if value23=highest(value23,period) then count=count+1;
if value24=highest(value24,period) then count=count+1;
if value25=highest(value25,period) then count=count+1;
if value26=highest(value26,period) then count=count+1;
if value27=highest(value27,period) then count=count+1;
if value28=highest(value28,period) then count=count+1;
if value29=highest(value29,period) then count=count+1;
if value30=highest(value30,period) then count=count+1;
if value31=highest(value31,period) then count=count+1;
if value32=highest(value32,period) then count=count+1;
if value33=highest(value33,period) then count=count+1;
if value34=highest(value34,period) then count=count+1;
if value35=highest(value35,period) then count=count+1;
if value36=highest(value36,period) then count=count+1;
if value37=highest(value37,period) then count=count+1;
if value38=highest(value38,period) then count=count+1;
if value39=highest(value39,period) then count=count+1;
if value40=highest(value40,period) then count=count+1;
if value41=highest(value41,period) then count=count+1;
if value42=highest(value42,period) then count=count+1;
if value43=highest(value43,period) then count=count+1;
if value44=highest(value44,period) then count=count+1;
if value45=highest(value45,period) then count=count+1;
if value46=highest(value46,period) then count=count+1;
if value47=highest(value47,period) then count=count+1;
if value48=highest(value48,period) then count=count+1;
if value49=highest(value49,period) then count=count+1;
if value50=highest(value50,period) then count=count+1;

value51=count;

plot1(value51,"台灣50創新高家數指標");

創新低家數指標

value1=GetSymbolField("1101.tw","收盤價","D");
value2=GetSymbolField("1102.tw","收盤價","D");
value3=GetSymbolField("1216.tw","收盤價","D");
value4=GetSymbolField("1301.tw","收盤價","D");
value5=GetSymbolField("1303.tw","收盤價","D");
value6=GetSymbolField("1326.tw","收盤價","D");
value7=GetSymbolField("1402.tw","收盤價","D");
value8=GetSymbolField("2002.tw","收盤價","D");
value9=GetSymbolField("2105.tw","收盤價","D");
value10=GetSymbolField("2207.tw","收盤價","D");
value11=GetSymbolField("2301.tw","收盤價","D");
value12=GetSymbolField("2303.tw","收盤價","D");
value13=GetSymbolField("2308.tw","收盤價","D");
value14=GetSymbolField("2317.tw","收盤價","D");
value15=GetSymbolField("2327.tw","收盤價","D");
value16=GetSymbolField("2330.tw","收盤價","D");
value17=GetSymbolField("2357.tw","收盤價","D");
value18=GetSymbolField("2382.tw","收盤價","D");
value19=GetSymbolField("2395.tw","收盤價","D");
value20=GetSymbolField("2408.tw","收盤價","D");
value21=GetSymbolField("2409.tw","收盤價","D");
value22=GetSymbolField("2412.tw","收盤價","D");
value23=GetSymbolField("2454.tw","收盤價","D");
value24=GetSymbolField("2474.tw","收盤價","D");
value25=GetSymbolField("2633.tw","收盤價","D");
value26=GetSymbolField("2801.tw","收盤價","D");
value27=GetSymbolField("2880.tw","收盤價","D");
value28=GetSymbolField("2881.tw","收盤價","D");
value29=GetSymbolField("2882.tw","收盤價","D");
value30=GetSymbolField("2883.tw","收盤價","D");
value31=GetSymbolField("2884.tw","收盤價","D");
value32=GetSymbolField("2885.tw","收盤價","D");
value33=GetSymbolField("2886.tw","收盤價","D");
value34=GetSymbolField("2887.tw","收盤價","D");
value35=GetSymbolField("2890.tw","收盤價","D");
value36=GetSymbolField("2891.tw","收盤價","D");
value37=GetSymbolField("2892.tw","收盤價","D");
value38=GetSymbolField("2912.tw","收盤價","D");
value39=GetSymbolField("3008.tw","收盤價","D");
value40=GetSymbolField("3045.tw","收盤價","D");
value41=GetSymbolField("3711.tw","收盤價","D");
value42=GetSymbolField("4904.tw","收盤價","D");
value43=GetSymbolField("4938.tw","收盤價","D");
value44=GetSymbolField("5871.tw","收盤價","D");
value45=GetSymbolField("5876.tw","收盤價","D");
value46=GetSymbolField("5880.tw","收盤價","D");
value47=GetSymbolField("6505.tw","收盤價","D");
value48=GetSymbolField("9904.tw","收盤價","D");
value49=GetSymbolField("9910.tw","收盤價","D");
value50=GetSymbolField("2823.tw","收盤價","D");


variable:count(0);
input:period(20);
count=0;
if value1=lowest(value1,period) then count=count+1;
if value2=lowest(value2,period) then count=count+1;
if value3=lowest(value3,period) then count=count+1;
if value4=lowest(value4,period) then count=count+1;
if value5=lowest(value5,period) then count=count+1;
if value6=lowest(value6,period) then count=count+1;
if value7=lowest(value7,period) then count=count+1;
if value8=lowest(value8,period) then count=count+1;
if value9=lowest(value9,period) then count=count+1;
if value10=lowest(value10,period) then count=count+1;
if value11=lowest(value11,period) then count=count+1;
if value12=lowest(value12,period) then count=count+1;
if value13=lowest(value13,period) then count=count+1;
if value14=lowest(value14,period) then count=count+1;
if value15=lowest(value15,period) then count=count+1;
if value16=lowest(value16,period) then count=count+1;
if value17=lowest(value17,period) then count=count+1;
if value18=lowest(value18,period) then count=count+1;
if value19=lowest(value19,period) then count=count+1;
if value20=lowest(value20,period) then count=count+1;
if value21=lowest(value21,period) then count=count+1;
if value22=lowest(value22,period) then count=count+1;
if value23=lowest(value23,period) then count=count+1;
if value24=lowest(value24,period) then count=count+1;
if value25=lowest(value25,period) then count=count+1;
if value26=lowest(value26,period) then count=count+1;
if value27=lowest(value27,period) then count=count+1;
if value28=lowest(value28,period) then count=count+1;
if value29=lowest(value29,period) then count=count+1;
if value30=lowest(value30,period) then count=count+1;
if value31=lowest(value31,period) then count=count+1;
if value32=lowest(value32,period) then count=count+1;
if value33=lowest(value33,period) then count=count+1;
if value34=lowest(value34,period) then count=count+1;
if value35=lowest(value35,period) then count=count+1;
if value36=lowest(value36,period) then count=count+1;
if value37=lowest(value37,period) then count=count+1;
if value38=lowest(value38,period) then count=count+1;
if value39=lowest(value39,period) then count=count+1;
if value40=lowest(value40,period) then count=count+1;
if value41=lowest(value41,period) then count=count+1;
if value42=lowest(value42,period) then count=count+1;
if value43=lowest(value43,period) then count=count+1;
if value44=lowest(value44,period) then count=count+1;
if value45=lowest(value45,period) then count=count+1;
if value46=lowest(value46,period) then count=count+1;
if value47=lowest(value47,period) then count=count+1;
if value48=lowest(value48,period) then count=count+1;
if value49=lowest(value49,period) then count=count+1;
if value50=lowest(value50,period) then count=count+1;

value51=count;
 
plot1(value51,"台灣50創新低家數指標");

下圖是一張創新高新低家數指標與台灣50日線的對照圖

我有把使用的原則寫在圖上,至於為何參數用20天,我朋友試過後說20天最好用,所以我就沒有試過其他天期。

下圖則是00632R的指標對照圖

我這位朋友用這對指標,以及昨天介紹的多空指標,以及他的一些私房指標,專注在操作0050及00632R,算是0050的操作達人。

另外跟大家分享一下,在自己發明私房的0050相關指標時,可以善用”取代“這個功能,直接一次修改50行的敘述,例如我要把average換成highest就直接填完按全部取代就好了

這樣就不用一行一行改了。

 

xqlite banner

台灣50專屬多空指標

很久之前有跟大家分享過一個台灣50的多空指標,那就是計算前面十檔台灣50指數成份股有多少檔站在月線之上。上週五颱風假在假閒閒沒事,想說要不要乾脆把50檔成份股都納進來算,結果50檔裡有多少檔站在月線之上這樣的數據,對照台灣50的走勢,確實是有一定的參考價值,所以我想就直接跟大家分享腳本,讓大家不必辛苦的敲半天,然後也可以根據這樣的想法,透過計算有多少檔成份股RSI在50以上之類的數據,創造自己專屬的多空指標。

有不少朋友喜歡看多大盤時買0050,看壞大盤後市時買00632R,所以需要一個研究台灣50後市的多空依據,以下的腳本是用來計算台灣50裡的50檔成份股,有多少檔站在月線之上。

腳本

value1=GetSymbolField("1101.tw","收盤價");
value2=GetSymbolField("1102.tw","收盤價");
value3=GetSymbolField("1216.tw","收盤價");
value4=GetSymbolField("1301.tw","收盤價");
value5=GetSymbolField("1303.tw","收盤價");
value6=GetSymbolField("1326.tw","收盤價");
value7=GetSymbolField("1402.tw","收盤價");
value8=GetSymbolField("2002.tw","收盤價");
value9=GetSymbolField("2105.tw","收盤價");
value10=GetSymbolField("2207.tw","收盤價");
value11=GetSymbolField("2301.tw","收盤價");
value12=GetSymbolField("2303.tw","收盤價");
value13=GetSymbolField("2308.tw","收盤價");
value14=GetSymbolField("2317.tw","收盤價");
value15=GetSymbolField("2327.tw","收盤價");
value16=GetSymbolField("2330.tw","收盤價");
value17=GetSymbolField("2357.tw","收盤價");
value18=GetSymbolField("2382.tw","收盤價");
value19=GetSymbolField("2395.tw","收盤價");
value20=GetSymbolField("2408.tw","收盤價");
value21=GetSymbolField("2409.tw","收盤價");
value22=GetSymbolField("2412.tw","收盤價");
value23=GetSymbolField("2454.tw","收盤價");
value24=GetSymbolField("2474.tw","收盤價");
value25=GetSymbolField("2633.tw","收盤價");
value26=GetSymbolField("2801.tw","收盤價");
value27=GetSymbolField("2880.tw","收盤價");
value28=GetSymbolField("2881.tw","收盤價");
value29=GetSymbolField("2882.tw","收盤價");
value30=GetSymbolField("2883.tw","收盤價");
value31=GetSymbolField("2884.tw","收盤價");
value32=GetSymbolField("2885.tw","收盤價");
value33=GetSymbolField("2886.tw","收盤價");
value34=GetSymbolField("2887.tw","收盤價");
value35=GetSymbolField("2890.tw","收盤價");
value36=GetSymbolField("2891.tw","收盤價");
value37=GetSymbolField("2892.tw","收盤價");
value38=GetSymbolField("2912.tw","收盤價");
value39=GetSymbolField("3008.tw","收盤價");
value40=GetSymbolField("3045.tw","收盤價");
value41=GetSymbolField("3711.tw","收盤價");
value42=GetSymbolField("4904.tw","收盤價");
value43=GetSymbolField("4938.tw","收盤價");
value44=GetSymbolField("5871.tw","收盤價");
value45=GetSymbolField("5876.tw","收盤價");
value46=GetSymbolField("5880.tw","收盤價");
value47=GetSymbolField("6505.tw","收盤價");
value48=GetSymbolField("9904.tw","收盤價");
value49=GetSymbolField("9910.tw","收盤價");
value50=GetSymbolField("2823.tw","收盤價");

variable:count(0);
input:period(20);
count=0;
if value1>average(value1,period) then count=count+1;
if value2>average(value2,period) then count=count+1;
if value3>average(value3,period) then count=count+1;
if value4>average(value4,period) then count=count+1;
if value5>average(value5,period) then count=count+1;
if value6>average(value6,period) then count=count+1;
if value7>average(value7,period) then count=count+1;
if value8>average(value8,period) then count=count+1;
if value9>average(value9,period) then count=count+1;
if value10>average(value10,period) then count=count+1;
if value11>average(value11,period) then count=count+1;
if value12>average(value12,period) then count=count+1;
if value13>average(value13,period) then count=count+1;
if value14>average(value14,period) then count=count+1;
if value15>average(value15,period) then count=count+1;
if value16>average(value16,period) then count=count+1;
if value17>average(value17,period) then count=count+1;
if value18>average(value18,period) then count=count+1;
if value19>average(value19,period) then count=count+1;
if value20>average(value20,period) then count=count+1;
if value21>average(value21,period) then count=count+1;
if value22>average(value22,period) then count=count+1;
if value23>average(value23,period) then count=count+1;
if value24>average(value24,period) then count=count+1;
if value25>average(value25,period) then count=count+1;
if value26>average(value26,period) then count=count+1;
if value27>average(value27,period) then count=count+1;
if value28>average(value28,period) then count=count+1;
if value29>average(value29,period) then count=count+1;
if value30>average(value30,period) then count=count+1;
if value31>average(value31,period) then count=count+1;
if value32>average(value32,period) then count=count+1;
if value33>average(value33,period) then count=count+1;
if value34>average(value34,period) then count=count+1;
if value35>average(value35,period) then count=count+1;
if value36>average(value36,period) then count=count+1;
if value37>average(value37,period) then count=count+1;
if value38>average(value38,period) then count=count+1;
if value39>average(value39,period) then count=count+1;
if value40>average(value40,period) then count=count+1;
if value41>average(value41,period) then count=count+1;
if value42>average(value42,period) then count=count+1;
if value43>average(value43,period) then count=count+1;
if value44>average(value44,period) then count=count+1;
if value45>average(value45,period) then count=count+1;
if value46>average(value46,period) then count=count+1;
if value47>average(value47,period) then count=count+1;
if value48>average(value48,period) then count=count+1;
if value49>average(value49,period) then count=count+1;
if value50>average(value50,period) then count=count+1;

value51=count-25;

plot1(value51,"台灣50多頭指數");


用這個腳本可以畫出下面這張圖

觀察這樣的對照圖,我們有丝個結論

一,當這個指標在20以上快速下跌時,往往是多頭市場的結束

二,當這個指標在-20左右快速往上走時,往往是多頭市場的開始

三,當這個指標穩定的維持紅柱體時,代表大多數的成份股是站在月線之上,屬於多頭架構

四,當這個指標穩定維持在0以下時,代表大多數的成份股站在月線之下,屬於空頭架構

五,當指標與台灣50背離時,往往是反轉訊號。

下圖則是這個指標與台灣50一分鐘的對照圖,這裡代表的是20分鐘移動平均線,如果大家覺得應該調整參數,請直接修改。

 

以上大致是這個指標的作法與應用,我做的是苦工,目的是讓大家不用自己敲50檔成份股的股票代碼,剩下的就讓大家自由發揮了。

 

xqlite banner

 

 

 

如何使用跨頻率技術指標來建構策略雷達

有網友想要了解如何同時用不同頻率的指標來建構一個策略雷達,我今天舉例來跟大家說明。

 

目前XS內建有28個跨頻率的函數,依序如下,大家可以在函數頁籤下的系統選單中找到

運用這些函數,可以直接在一個警示腳本中使用不同頻率的指標。

舉個例子,如果我希望電腦可以在個股週RSI小於20且日KD低檔黃金交叉時發出訊號,那麼就可以使用像下面這樣的腳本

input: Length_D(9,"日KD期間");

variable:rsv_d(0),kk_d(0),dd_d(0),c5(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);

if xf_RSI("w",close,5)<=20 and kk_d <=30 
and kk_d crosses over dd_d

then ret=1;

用這個腳本去跑過去兩年的權值股加中型100指數成份股,KD死亡交叉後出場,其回測報告如下

這個腳本轉門尋找那些大跌後的中大型股

 

這當中的xf_RSI就是在日線底下使用的跨頻率函數,大家也可以看一下這種跨頻率函數的寫法

SetBarMode(2);

// 跨頻率RSI函數
//
// FreqType是預期要引用的頻率, 支援"D", "W", "M"
// 輸入: FreqType, Series, Length
//
input:
FreqType(string), //引用頻率
Series(numericseries), //價格序列
Length(numericsimple); //計算期間

variable: 
SumUp(0), SumDown(0), 
LastSumUp(0), LastSumDown(0),LastRefSeries(Series), 
up(0), down(0),
closePeriod(0);

condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
if condition1 then
begin
LastSumUp = SumUp[1];
LastSumDown = SumDown[1];
LastRefSeries = Series[1];
end;

if xf_GetCurrentBar(FreqType) = 1 then
begin
SumUp = Average(maxlist(Series - LastRefSeries, 0), Length); 
SumDown = Average(maxlist(LastRefSeries - Series, 0), Length); 
end
else
begin
up = maxlist(Series - LastRefSeries, 0);
down = maxlist(LastRefSeries - Series, 0);

SumUp = LastSumUp + (up - LastSumUp) / Length;
SumDown = LastSumDown + (down - LastSumDown) / Length;
end;

if SumUp + SumDown = 0 then
xf_RSI = 0
else
xf_RSI = 100 * SumUp / (SumUp + SumDown);

 

這樣的語法目前系統內建的指標都是常用的指標,如果需要其他的指標,可以用類似的方法來自訂一個函數,例如跨頻率的加權移動平均線EMA就可以像下面這樣的寫法

SetBarMode(2);

// 跨頻率EMA
//
// FreqType是預期要比對的期別, 支援"D", "W", "M"
// 輸入: FreqType, Series, Length
//
input:
FreqType(string), //引用頻率
Series(numericseries), //價格序列
Length(numericsimple); //計算期間

variable:
Factor(0), lastEMA(0);

condition1 = xf_getdtvalue(FreqType, Date) <> xf_getdtvalue(FreqType, Date[1]);
if condition1 then
lastEMA = xf_EMA[1];

value1 = xf_GetCurrentBar(FreqType);

if Length + 1 = 0 then Factor = 1 else Factor = 2 / (Length + 1);

if value1 = 1 then
xf_EMA = Series
else if value1 <= Length then
xf_EMA = (Series + (lastEMA * (value1 - 1)))/value1
else
xf_EMA = lastEMA + Factor * (Series - lastEMA);

大家是否有留意到,這類跨頻率指標的寫法都會用到兩個函數,一個是xf_getdtvalue ,一個是xf_GetCurrentBar,要自訂跨頻率函數時,基本上都必須用到這兩個函數,大家可以直接看這兩個系統提供的跨頻率腳本常用函數是怎麼寫的。

以上大致是跨頻率指標同時應用的基本概念,未來有機會再跟大家介紹回測績效不錯的跨頻率函數。

xqlite banner

 

 

 

 

XS系統化決策結構說明文

XS是一套系統化的決策系統, 不少網友來信問到XS的使用方式,以及免費版與收費版的差異, 我想跟大家分享我使用XS的步驟及方式,用實際的例子來說明XS的設計結構,然後也跟大家說明什麼情況使用免費版即可,什麼情況下才需要用到付費版。

由於我是從投信操盤體系出身,所以當初在發想XS的時候,是希望可以把整個投信投資決策流程都自動化,而以往當我在操盤的時候,整個決策流程如下

這四大項就變成XS四個獨立但可以串連的四大部份。

接下來分別跟大家說明這四大項的功能,雖然投資決策的第一項是先決定多空比例,但為了說明方便,我把它放在最後

一,選股

XS的選股是在“選股中心”這個功能中來進行的,使用者可以透過自己撰寫程式,選擇系統內建的條件或腳本,來進行選股,免費版與收費版的差異如下

使用者可以免費的透過回測功能,不斷地試驗,最終找到自己最中意的選股策略,然後每天利用XS的選股平台來執行選股,只要您每天執行的次數不大於十次,都是免費的。

這個平台用的資料是日資料以上,它的功能是讓使用者在收盤後,隔天開盤前,運用各種數據,挑出符合自己心目中理想的標的,由於大家在選股時,不見得會僅僅使用到價量資料,可能會用到籌碼,集保,法人,營收,財報等等資料,這些資料有些是日資料,有些是週資料,有些一個月公佈一次,有一些是一季公佈一次,要把這些資料全部放在盤中運算,既要消耗電腦資源,又有跨頻率資料對齊的問題,所以先在選股中心,透過AND或OR的交集聯集,先挑出隔一天開盤後會願意用日線或分鐘線去洗價的股票。這樣洗價時就不用一次洗1700檔,然後把電腦的CPU吃的滿滿的。

如果是付費的使用者,則每天可以讓系統自動執行100組的選股策略,您每天打開電腦,就可以直接看到有那些個股符合最多的選股策略,然後再把當中想要列入觀察名單的標的存到自選股去,這樣每天做,就會有一份自己非常有興趣進場的自選股清單。

所以如果您並沒有很多的選股策略,或是還在學習使用XS選股,其實免費版就夠用了,等到您手上有夠多靠譜的選股策略,才有需要進階到收費版。

我最近在整理一些大家常用的選股腳本,目的就是讓大家在選股中心可以不用寫程式就能完成自己心目中理想的選股策略,然後透過回測來驗證它。

二,策略雷達

在透過選股完成一份觀察名單之後,在投資流程上,名單上的股票,如果盤中符合某些價量條件,就可能符合您所設定的進場條件 ,策略雷達的功能,就是讓您設計特定的進場條件,例如我最常用的預估量爆增,整理後創新高等等,都是透過策略雷達,讓電腦幫我洗價,然後在符合條件的時候用訊號來通知我。

這個功能的免費版與收費版的差異如下圖

免費版的功能主要是讓大家先透過練習,回測,最重要的是學會寫腳本,所以只限定用日線的基本欄位,然後只限跑五檔商品,同時也僅能跑五個策略,等到學會寫腳本了,再進到收費版,這時候因為已經會程式了,也有了自己愛用的策略,這錢就不會浪費了。

但由於這樣的規定,所以像是要用到分鐘線的程式,包括指標,要盤中能更新,就必須要是收費版的會員才能使用,所以之前跟大家介紹的一些如盤中大戶散戶的指標,就必須是收費版的使用者才能使用,這點要跟大家說歹勢。

另外要稍為介紹一下策略雷達的自動排程功能

如果把選股結果直接拿來跑一些自動排程的策略雷達,就可以自動化的選股及盤中洗價,然後讓電腦自動運算出進場訊號

三,執行交易

出現進場訊號之後,目前策略雷達是有提供簡易的下單設定

您可以分配進場的資金,張數等。

這樣的設定跟目前常用程式交易平台,有很大的不一樣,一個完善的程式交易平台,是用語法來設定進場點,加碼條件,減碼條件及平倉點,但我當時在投信不會做當沖,每天都是收到對帳單及報表後才來擬定個股的出場條件等投後管理動作,所以XS並不符合時下流行的程式交易作法,這點我們會在明年逐筆撮合前完成交易語法的開發,讓XS既合乎法人的決策流程,也符合當沖,短線及期指操作的特性。

 

四,大盤多空觀測。

我很常跟朋友說,在台灣股票市場如果要賺錢,最重要的事情是避開崩盤及隨之而來的空頭市場。以往在投信時,我有自己一套觀察大盤多空方向的方法,我會用這方法來決定管理資金的持股比例,所以在XS上,我也想要把這個概念加進來,後來PM就使用了參照商品這樣的概念。

參照商品的意思是,如有在參照商品符合某個條件,電腦才會開始去跑策略雷達裡設定的策略,符合條件時才會發出訊號。

以下圖為例,我希望加權指數在月線之上才啟動某一策略,我就可以在策略雷達的設定視窗裡勾選參數商品,然後像下圖這樣的設定

以上是XS目前的架構,免費的使用者可以學寫程式,設計選股策略,決定進場時點,等到真的有些把握了,再轉成收費的使用者,這樣比較OK

 

xqlite banner

指標選股市場常用語補充包

先前有提過,我想要把大家常用的策略想法,都寫成腳本,讓大家不用寫程式,就可以直接拿來用,這次我整理了二十個除了MACD,KD等常用技術指標之外,也稍具知名度且普遍被大家使用的技術指標常用買進訊號腳本,把它們寫成市場常用語法腳本,讓大家可以直接用勾選及改參數的方式就能使用。

這二十個腳本如下

下載點在以下

連結

在編輯器匯入腳本後,即可以在選股平台中使用

匯入後的使用UI如下

接下來會跟大家分享基本面及財務面的常用腳本。

xqlite banner

30歲警官靠美股提早退休

如果沒有投資過美股的朋友,想要找一本入門的書,我會推荐30歲警官靠美股提早退休這本書,這本書的作者 是筆名美股夢想家的施雅棠先生,他本身是一位警官,而且他才30歲,但他靠投資美股已經達到提早退休的人生,他寫的這本書裡,除了美股之外,也觸及了美債,特別股等金融商品,適合不同投資風格的投資人。

這本書一開始先教大家如何開美股戶,以及開戶券商的選擇,(不過因為我們在推人人都是巴菲特方案,所以歹勢,要用XQ操盤高手美股即時模組下單的朋友,請選擇與我們配合的券商,小弟代替我們所有員工一起感謝您,啾咪),也跟大家介紹了美股的交易規則及稅賦等相關規定。

接下來書上開始分別介紹股票,公司債及特別股等不同的美股商品。其中股票的部份由於美股可以每季配息一次,所以書上有教大家如何投資美股賺股息。

接下來有介紹大家如何查詢個股定期公佈的財報,年報等資料,教大家如何作功課,甚至包括如何研判經營階層的誠信及估值等進階版的研究方法

最後兩章則很詳細的介紹了特別股及美國公司債的投資方法,這兩章非常值得一讀,寫的非常詳細,這是實戰經驗豊富的人才寫得出來的。

我看完後非常佩服作者 ,年紀輕輕就知道把關注的焦點放在全球最大的資本市場,而且勇於嚐試各種金融商品,並且把投資的心得分享給大家。

 

這本書非常值得有興趣投資美股的朋友一看

 

當然也提醒有志於投資美股的朋友來加入XQ操盤高手的人人都是巴菲特方案

xqlite banner

 

 

 

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

有網友希望提供內外盤的即時指標,但因為目前指標裡無法支援內外盤的flag,所以我改變一下寫法,寫了一個盤中上漲量與下跌量的差額指標,大家可以參考看看

首先依慣例還是先給腳本

variable:i(0),tv(0),tp1(0),tp(0);
i=0;
if date<>date[1] then begin
value1=0;
value2=0;
end;
if V>0
then begin
while GetField("時間","Tick")[i]>=time and GetFieldDate("成交量","Tick")[i]=date
i+=1;
while i>0
begin
i-=1;
tv=GetField("成交量","Tick")[i];
tp=GetField("收盤價","Tick")[i];
tp1=GetField("收盤價","Tick")[i+1];
if tp>tp1 //上漲 
then begin
condition1=true;
condition2=false;
end;
if tp<tp1
then begin
condition1=false;
condition2=true;
end;
if condition1 then value1+=tv;//上漲成交量累加
if condition2 then value2+=tv;//下跌成交量累加
end;
end;
value3=value1-value2;
plot1(value3,"累計上漲下跌量差");

 

用這個腳本畫出來的圖如下

用在期指上的圖形如下

這種盤中統計市場買賣方道消長的指標,確實在作當沖或進出場點決策時,有很大的幫助,我聽說XQ7.0會支援更多QUOTE的欄位可以支援到指標畫圖腳本中,到时候再跟大家分享更多的指標畫法。

 

期指盤中大戶散戶指標

昨天分享股票的盤中大戶散戶指標之後,有不少網友希望也提供期指專用的盤中大戶散戶指標,我試著拿昨天的腳本改了一下,不曉得符不符合大家的需求

首先還是先PO腳本

input:
bos(true,"類別",inputkind:=dict(["大戶",true],["散戶",false]),quickedit:=true),
p(50,"大戶門檻(口數)");//預設值先訂50口,大家可以改成自己的定義
variable:i(0),tv(0),tp1(0),tp(0);

i=0;
if date<>date[1]
then begin
//當天開盤開始從新起算
value1=0;
value2=0;
end;
if V>0
then begin
while GetField("時間","Tick")[i]>=time and GetFieldDate("成交量","Tick")[i]=getfield("日期", "D")
i+=1;
while i>0
begin
i-=1;
//做一個從這一根往前算到開盤共幾根的計數器
tv=GetField("成交量","Tick")[i];
tp=GetField("收盤價","Tick")[i];
tp1=GetField("收盤價","Tick")[i+1];
condition1=tv>=p;//設定符合大戶的口數門檻
if tp>tp1 //分上漲及下跌時的情況,這裡沒有考慮平盤的口數
then begin
condition2=true;
condition3=false;
end;
if tp<tp1
then begin
condition2=false;
condition3=true;
end;
if condition1
then begin
if condition2 then value1+=tv;//計算累積的大戶量
if condition3 then value1-=tv;
end
else begin
if condition2 then value2+=tv;//計算累積的非大戶量
if condition3 then value2-=tv;
end;
end;
end;

if bos then value3=value1 else value3=value2;


if value3>=0 then plot1(value3,"大戶買賣超");
if value3<0 then plot2(value3,"大戶買賣超");
if not bos
then begin
setplotlabel(1,"散戶買賣超");
setplotlabel(2,"散戶買賣超");
end;

 

用這腳本畫出來的畫面如下,我用的是一分鐘線,然後大戶的門檻是單筆50口

這一頁的下載點如下

下載連結

如果是直接複製上述腳本的朋友,繪圖的設定如下

請記得到技術分析設定視窗中把XS指標計算範圍改成如下圖

我把頻率改成用五分鐘線

要改大戶的門檻 可以在下圖這地方更改

以上是我修改的內容,不曉得有沒有符合網友的需求?

 

xqlite banner