Author Archives: 發財橘子

運算子

運算子的功用

在學會使用回傳值的概念之後,接下來,我們先來介紹腳本中,要串接回傳值,建立各種運算的關係時,所需要用到的元素, 這些元素,稱之為運算子(operator)。

我們必須靠這些運算子,把電腦幫我們準備好的回傳值,拿來作數學運算,比大小,作邏輯判斷, 如此一來,才能完成一個敘述。
例如open >high[1]這個陳述式,open與high[1]之間,就是透過>這個字來建立關係, 這些被拿來建立數值與數值之間關係的字,我們統稱之為運算字。

運算子的種類
Xscript所提供的運算子分成三大類,分別為數學運算子,關係運算子,邏輯運算子,茲分述如下:

數學運算子

這部份的運算子,大家都很熟悉,一共有四個,就是我們在小學數學課本裡學過的加減乘除, 這些基本的數學運算包括相加 “+”,相減 “-“,相乘 “*”, 相除”/”,以及等號”=”。
例如以下的敘述式 :

close/close[1]>1.02

這代表這個bar的收盤價比前一根的收盤價漲幅超過2%。

關係運算子

關係運算子是在呈現兩個數字之間的關係,Xscript中可以拿來運用的關係運算子, 都是大家很熟悉的大於(>),等於(=),小於(<),大於等於(>=),小於等於(<=),不等於(<>)共六種。
在這邊要特別說明的是,關係運算式的兩端各都只能是一個代表數值的文字或數值, 所以我們可以寫

close>close[1] and close[1]>close[2]

但我們不能寫

close>close[1]>close[2]

因為這樣的寫法在>這個關係運算式的兩端,有一端不是數值而是true,false的邏輯值了。

邏輯運算子

邏輯運算因子有三個 : and, or,Not
前兩個運算子是拿來串接兩個邏輯判斷式,其運作的邏輯如下:
true and true=true
true and false= false
false and true = false
false and false = false
true or true = true
true or false = true
false or true = true
false or false = false
至於not,則是拿來否定一個邏輯判斷式之用
not false=true
not true=false
有了這三種運算子,加上上一節介紹的回傳值,我們就可以很方便的描述股價間的各種關係了。

回傳值

開高低收成交量是交易語法的組成基本要素 開高低收是一段時間內,多空拔河角力下的記錄,成交量則是多空爭戰激烈程度的衡量標準。

開盤價
代表的是多空在哨音響起時的多空對峙形勢,跟先前收盤價的差距,代表的是多空這一回合爭戰時,一開始的氣勢差距。
最高價
代表的是多頭今天氣勢最強時,向空頭佔領過的領土最極限。
最低價
代表的是空頭今天氣勢最強時,向多頭佔領過的領土最極限。
收盤價
則是在在時間結束時,多空最後對峙的那個點。

在語法上,open、high、low及close, 代表的是每個頻率下的四個價位,也是我們與電腦溝通時,最常引用的數據。 透過open、high、low、close及成交量這五個數字及中括號的應用,我們可以引用到所有K棒上的開高低收值。

回傳值的意義

什麼是回傳值,就是當你寫下一個名詞,電腦會知道要拿什麼數值進來計算的,就是回傳值,當我們用電子計算機按 10 * 2時, 10跟2都是我們按下去通知電腦要拿這兩個數字來計算。 在腳本裡,我們通知電腦要拿什麼數字來計算時,不可能一個個數字按給電腦知道,當我們需要拿最高價來計算時, 就在腳本上寫high, 這樣的表達方式,是我們跟電腦約定好的, 它看到這樣的字眼,就會自動去把對應的數字拿來用。
例如當我們寫一個行敘述叫high – close時,電腦在這個腳本被拿來運算時,會去找這根bar的最高價是多少(例如是43), 這個bar的收盤價值是多少?(例如是40),那麼電腦就知道這一行陳述的意思是43-40>0,那麼電腦就知道這一行敘述是true
在Xs語法當中,像high這樣的回傳值,一共有下面幾個:

當您使用這些詞時,背後代表的是讓電腦去幫你把它背後所代表的的那個數字叫出來。
回傳值有那幾個?

回傳值回傳值大部份是數字,包括開高低收及成交量,未平倉(期貨適用),在日線的頻率下,我們也可以用Uplimit來讓系統傳回 當天的漲停價,用downlimit讓系統傳回當天的跌停價。

但有兩個回傳值的資料格式不是數值,一個是date(可簡寫成d)傳回的是日期格式,另一個是time(可簡寫成t),傳回的是時間的格式。

回傳值的簡寫
我們在應用這些回傳值的時候,除了寫上完整的名稱之外,也可以只寫簡寫就好。這些簡寫都是用一個英文字母來代替一個特定的回傳值,例如Open就可以直接寫成O,High可以直接寫成H,大小寫皆可,上面那個表中有所有回傳值可以簡寫的方式。

例如我們如果要寫今天收在最高點,正常我們會寫成

close=high

但我們也可以簡寫成

c=h

回傳值是大部份腳本的主要構成份子,也是最基本的元素。

XS語法的基本結構

舉凡所有語法,都是撰寫者寫出電腦看得懂的文件,這種文件,我們稱之為腳本。

1.11

敘述式
Xscript的語法基本架構上,跟其他的程式交易語法平台一樣,為了讓電腦看得懂,我們必須安排一種特殊的寫作方式。 這樣的寫作方式,是由一行一行的敘述式(statement)所組成。這些敘述式的最後,都會有一個分號”;”來宣告這一行的敘述式已經結束。

腳本
每個腳本,就是把一行行最後由分號來結束的敘述式(statement),按照執行的先後順序排在一起,當我們把一個腳本送給電腦時, 電腦會根據每一個敘述式在腳本中的順序,依序一行一行的執行腳本上的指令。每一行敘述式,都是由六種不同的文字所組合,這六種不同的文字,就像下圖中不同的分類

時序的觀念

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

市場參與者,是透過一個時間序列,來去了解商品的過往價格走勢,並且作為預測未來多空方向的根據。
我們在作技術分析時,不會只看一根BAR,我們看的是數十根數百根BAR排在一起時所呈現的型態,趨勢,支撐,壓力等等。
所以我們必須讓電腦知道,我們現在要運算的,是第幾根K Bar 。
怎麼做呢?
我們用close[1]來代表前一根bar的收盤價,這個中括號裡的數字,代表的是前n根bar裡的值,所以, high[5]代表的就是今天算起前面第五根bar的最高價,也因此 ,close[0]代表的就是往前算第0根的收盤價,也就是今天的收盤價。
K11

各位可以參考上圖,我們可以用這樣的語法,讓電腦清楚的知道,我們所指的是那一根bar的那一個值。
於是,如果要讓電腦找出今天價量齊揚的股票時,我們可以這麼寫 :

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

又例如,如果要讓電腦找到今天漲幅超過五%且成交量比前一天多超過一千張的股票,那我們可以這麼寫 :

close>close[1]*1.05
And volume-volume[1]>1000

上面的這兩行敘述,意思就是一個商品的收盤價大於前一天收盤超過5%而且成交量比前一天的成交量多一千張。
為了貼近使用者的想法,XS的語法基本上,就是建構在這樣的一個基礎之上,它用兩個準則,來作為使用者與電腦溝通的基本原則
1. 用Open ,high,low,close以及volume這五個英文詞,來代表最近一根K線上的開、高、低、收、成交量。
2. 用中括號及在括號內的阿拉伯數字來代表這是從最近一根K線往回算起的第幾根K線。
透過這兩個準則,使用者可以把K線圖上的每一個被記錄下來的值,都拿來用在自己撰寫的腳本上。
例如我們可以用high[1]代表前一天的最高價,所以如果open>high[1],代表今天的開盤價大於昨天的最高價,也就是今天跳空開高的意思。


例如 : 我們在尋找紅三兵股票時,必須遵循三個原則 :
1. 最近三天都上漲
2. 三天的K線實體部份都要是紅色的,也就是說三天的收盤價都高於開盤價
3. 實體紅棒的部份一天比一天長
那麼要讓電腦知道我們要找的是紅三兵的股票時,我們可以列出三個敘述

close[2] > close[3] and close[1] > close[2] and close > close[1]
close[2] > open[2] and close[1] > open[1] and close > open
close[2]-open[2] < close[1]-open[1] and close[1]-open[1] < close-open

又例如 : 我們如果要寫一紅包三黑,我們必須遵循以下幾個規則
1. 前三根K棒都是黑色的
2. 最後一根是長紅棒
3. 最後一根的收盤價比前三根的高點還高

我們可以把上面的這些規則改寫成以下電腦看得懂的敘述

close[3]< open[3] and close[2]< open[2] and close[1]< open[1]
close>open
close> high[3]

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

close>close[1] and volume>volume[1]

我們使用這五個英文的詞語及中括號,告訴電腦我們希望它拿那些數字來作運算, 上面所用的open ,high, low, close,volume,都是我們這麼寫,電腦就會把數值傳回來作運算的指令 。
要完成一個可以幫我們請電腦協助完成工作的腳本,除了回傳值之外,可能出現在腳本內容裡的字詞,還包括了標點符號,常數,運算子,輸出及忽略字等幾種文字。
在後面的章節,我們依序了解這些不同的字詞在腳本中會怎麼被使用。

多空六大階段指標

我幾年前拜讀過一篇文章,作者把一檔股票的多空循環走勢分成六大階段,他用兩根不同天期的移動平均線與最新股價的相對位置來定義這六大階段。

1.Recovery復甦期。 收盤價大於50日均線但小於 200日均線且50 日均線小於200日均線
2.Accumalation籌碼收集期。 收盤價大於50及200日均線但50日均線尚未突破200日均線
3.Bullish 多頭走勢期。 收盤價大於50及200日均線且50日均線高於200日均線
4.Warning 高處不勝寒期。 收盤價跌破50日均線,但大於200日均線且50日均線仍高於200日均線
5.Distribution籌碼發散期。 收盤價跌破50日均線及200日均線,但50日均線仍在200日均線之上
6.Bearish 空頭走勢期。 收盤價跌破50日均線及200日均線,且50日均線也處於200日均線之下。

我以鴻海為例,把這六階段分別描繪在上圖。

我們可以看到,一個完美的多空循環,這六個階段是依序出現,我們可以透過這三條均線的位置,知道目前的股價是處於那個階段,也知道接下來當進到什麼階段時我們的交易策略應該怎麼調整。

一般來說,我們會在復甦期開始小量進場,籌碼收集期加碼,多頭確立時再加碼,然後高處不勝寒時獲利了結,然後依序再加碼作空。

於是我寫了一個指標的腳本

var:m50(0),m200(0);
m50=average(close,50);
m200=average(close,200);
if close > m50 and c< m200 and m50<m200
then value1=10
else value1=0;
if close > m50 and c> m200 and m50<m200
then value2=20
else value2=0;
if close > m50 and c> m200 and m50 > m200
then value3=30
else value3=0;
if close < m50 and c>m200 and m50>m200
then value4=-10
else value4=0;
if close < m50 and cm200
then value5=-20
else value5=0;
if close < m50 and c then value6=-30
else value6=0;
plot1(value1,"復甦期");
plot2(value2,"收集期");
plot3(value3,"多頭");
plot4(value4,"警示期");
plot5(value5,"發散期");
plot6(value6,"空頭");

我個人的觀察是,如果復甦期,收集期及多頭是按步就班地上演,且短線漲幅還不大時,就很值得留意了。

這個指標拿來應用在大型股及指數頗有參考價值。

tse6

每個月賺八萬元的交易策略怎麼寫?

今周刊最近有一篇很紅的文章,寫的是一位投資部落客的故事,連結如下:
http://www.businesstoday.com.tw/article-content-80402-114064
這位高人,他的做法是長期投資高股息的個股,選對標的,定期追蹤。

文章中有提到他的決策流程
1.從年報中挑出好股票。
所謂的好股票,他列了五個條件
a.本業獲利占比在八成以上
b.自由現金流量大於零
c.利息保障倍數大於二十倍
d.ROE(股東權益報酬率)大於八%
e.營業利益率要大於0%。
2.等到這些股票股價夠便宜時再買進
a.pe<12倍
b.股利殖利率大於6%
c.股價低於獲利能力比率
這裡的獲利能力比率,根據這位高手的定義是「公司每股淨值」乘上「最近年度實際ROE」,再除以「產業期待ROE」,他認為產業期待的ROE,半導體股約是10%,成熟型電子股約是8%,而傳產約是6%

我根據了他上述的選股及進場條件,試著寫了一個XS的選股腳本如下:

value1=GetField("營業利益","Q");//單位百萬
value2=GetField("稅前淨利","Q");//單位百萬
value3=GetField("來自營運之現金流量","Q");//單位百萬
value4=GetField("資本支出金額","Q");//單位百萬
value5=GetField("利息支出","Q");//單位百萬
value6=GetField("所得稅費用","Q");//單位百萬
condition1=false;
condition2=false;
condition3=false;
if value2>0
then begin
if value1/value2*100>80
then condition1=true; //本業獲利佔八成以上
end;
if value3-value4-value5-value6>0 //自由現金流量大於零
then condition2=true;
value7=GetField("利息保障倍數","Y");
value8=GetField("股東權益報酬率","Y");//單位%
value9=GetField("營業利益率","Q");//單位%
value10=GetField("本益比","D");
value11=GetField("殖利率","D");
value12=GetField("每股淨值(元)","Q");
value13=value12*value8/8;//獲利能力比率
if value7>20 and value8>8 and value9>0 and value10<12
and value11>6 and close<value13
then condition3=true;
if condition1 and condition2 and condition3
then ret=1;

根據這個腳本,昨天選出的股票有16檔(股魚先生一般都會扣掉營建跟金融股)
股魚先生都是利用放假日作功課,有xs當工具的朋友,不妨把這腳本copy回去run,這樣連假日都可以出去走走,節省一些做功課的時間。

不過在使用上,有兩點要注意的
1.操作紀律與資金分配。我猜想股魚先生應該是個很有紀律的人,這點是user自己必須要有的修練。
2.定時檢視持股的基本面情況。有些符合上述條件的股票,產業成熟化或企業老化後,數據會開始走下坡,所以得定時檢視持股的月營收表現。
總的來說,每個月要靠股息及長期投資賺八萬元,股魚先生指出的是價值投資,穩定配息,低價時才出手的策略,xs能幫上忙的是透過語法腳本,更有效率的找到符合條件的股票,至於user,則必須能修練出像股魚先生般鋼鐵般的紀律。

偉大的航路,江山代有才人出,大家一起努力囉!

合理的本益比跟盈餘品質與成長力有關

“為啥這兩檔股票EPS一模一樣,但股價差這麼多?”
經常被問到這樣的問題。
扣掉那些人為炒作的因素,我的經驗是盈餘愈穩定的,以及盈餘成長能見度愈高的,可以享有的合理本益比就愈高。
相反的,那些今年大賺,明年大虧的公司,以及那些數年來盈餘數字都未見成長的公司,市場給的本益比就比較低。
現在有了XS,我們可以用敘述式來呈現這兩個概念,例如我們如果要找那些盈餘品質不錯,過去五年營業利益成長率都沒有衰退超過5%的公司,我們就可以這麼寫

value1=GetField("營業利益成長率","Y");
if trueall(value1>-0.05,5) then ret=1;

如果我們要找連續五年營收都比前一年成長的公司
我們可以這麼寫

value2=GetField("營收成長率","Y");
if trueall(value2>0,5)
then ret=1;

透過這兩個條件的交集,我們可以找出盈餘品質不錯,業績又成長的公司,這些就是合理本益比可以抓的比較高的公司。

策略型交易結構‬

在操作一個策略的時候,有個關鍵的進場點和出場點,可是即時選股沒有!
今天使用者可能看到一檔股票從即時選股裡面跳出來說創20日新高了! 點進去技術分析一看! 已經是第5天創20日新高!! 最近一個星期每天都在創新高! 這樣的股票,投資人是否敢進場實在是一個大問號? 如果不是一個進場的良好依據,那這樣的即時選股對策略化交易而言會存在多少意義呢?
策略化的交易結構沒有這個問題! 怎麼說呢? 因為在系統設計的流程中,我們可以依需求設定跳出來的時間,價位和更多元化的條件來控制部位! 先看下面最簡單的例子:[警示腳本]

var:SPosition(0);
if SPosition = 0 then {當策略沒部位的時候做的事A}
begin{A}
if Close > Highest(High[1],20) then {股價創20日新高}
begin
SPosition = 1; {策略部位變成多單}
retmsg ="多單進場"; {設定策略的進場訊息}
ret =1; {策略觸發}
end;
end{A}
else
if SPosition =1 then {當策略為多單部位的時候做的事B}
begin{B}
if Close < Lowest(Low[1],10) then {股價創10日新低}
begin
SPosition = 0; {策略部位由多單變為空手}
retmsg ="多單出場"; {設定策略的進場訊息}
ret =1; {策略觸發}
end;
end{B};

這樣一個完整的策略,只有在股票第一次創20日新高的時後會跳出來,明確的告訴投資人,這個就是進場點,而策略化的目的就是當這個訊號跳出來,完全不需要再看任何額外資訊就直接掛高於現價的價格做買進! 這樣才是策略化交易的精髓所在!
如果警示訊號跳來還需要再研究或觀察其他股性的行為,則是屬於主觀交易的範圍而不是系統化策略交易的一種了喔! 這樣的參考型警示訊號和即時選股是同一種類!
我們分辨清楚策略型和主觀型交易以後,在策略的研發上會有更上一層樓的作用喔!

以加權指數第一根 30分鐘線做期指當沖的交易策略

oma1在推廣XS的時候,常踫到一些朋友說:”你不要介紹那些很複雜,聽都聽不懂的策略,我要的不多,每天賺個一兩千元,甚至賺個便當錢就很滿意了。”

其實賺便當錢的策略不是沒有,還不止一個,可是這種策略手腳要快,不然一踫到變盤,變不到便當錢,可能還要虧掉好幾個月的生活費。

不過如果懂得停利停損,玩起來還頗愉快。

今天先來介紹一個大家最容易懂的當沖策略,這個策略基本架構如下:

1.找出開盤第一根30分鐘線
2.找出這根bar的高點及低點
3.找出30分鐘線的移動平均線,計算期間用9。
4.九點三十分之後,當指數突破這根bar的高點,且MA9斜率為正,就作多期指,跌破這根bar的低點且MA9斜率為負就作空期指。
5.作多時跌破MA9就停利,跌破開盤第一根BAR的低點就停損
6.作空時突破MA9就停利,突破開盤第一根BAR的高點就停損
7.尾盤不管盈虧均平倉

為啥這麼做呢?

因為我們發現,加權指數當日的最高點或最低點有七成的機率會出現在開盤前半小時或收盤前半小時。

然後我們可以觀察到,每天開盤的那個價位代表的是市場總體反映昨天所有消息面的總結果,法人在看到這個總結果之後,會擬定今天的多空策略,不管要做多還是做空,因為法人的部位大,所以基本上會在九點半之前就開始佈單,於是,九點到九點半就是法人與各方市場力量多空角力的時段,而這根30分鐘線的high及low,就是多空勢力所能達到的最極限,一旦在接下來的交易時間裡超過了這個極限,就代表比較明確的多空方向。

為了排除盤整時出現的假訊號,可以用9根bar的移動平均做檢驗,因為9根bar的移動平均,以三十分鐘線來說剛好代表一整個交易日,如果趨勢向上,代表短多,趨勢向下代表短空,這樣就可以用趨勢方向來保護當沖策略。

附圖是根據以上的原則,標示在加權指數上的說明。

選股結果之OutputFiled語法應用

ou1

選股功能中包含了一樣非常好用工具,叫做OutputFiled!
我們只要把計算出來的結果,用這個函數去印出來,然後排序,就可以看到市場上這個值的分布情況!除了把我們預像的值設成一個門檻,讓有符合的股票挑出來以外,這樣的表列方法,不僅可以知道市場上的股票多空位置,也可以很快速掌握到大盤動向!

var:i(0),HDay(0);
for i = 1 to 255
begin
if C> H[i] then HDay+=1;
end;

setoutputname1("HighDay");
outputfield1(Hday);
ret=1;

資料讀取256,最大引用255

這樣一來我們就可以把所有股票,在一年中所有價格所處的位置顯示出來! 2383,3310,…這些就是在一年新高位置,然後往下排序!

各位有學下這招了嗎! 無敵好用喔!

標準差的運用

tttt1

在統計學上有個應用相當普遍的計算,叫做”標準差”,在許多領域經常都會被使用到,今天我們拿來放在交易裡實作,看看能有什麼樣的運用?

要研究這個公式可能有點花時間,所以在XS裡提供了一個方便使用的系統函數,可以簡單快速的計算出結果:StandardDev

使用方法 StandardDev(Close,20,1),目前只要管前面兩個輸入參數就可以了:Close是收盤價,20是20期,日線的話就是20天,最後的 1都一直用1就好!

我們在拿來用以前要先大概知道一下標準差是什麼意思:簡單來說就是把最近幾期的價格拿來衡量一下,如果標準差越大,表示價格離散程度高,波動很大! 反之如果標準差小表示最近的股價的行為還算一致!

不過如果是單用收盤價Close會有一個麻煩,就是有的股價高,有些股價低的情況下就很難一致化判斷,所以我們小小調整一下,用高低波動比來計算標準差:
StandardDev(H/L,20,1) ,因為數值比較小,我們最後再乘上個100,畫出來的指令

 plot1(StandardDev(H/L,20,1)*100,"波動標準差");

那這要怎麼運用呢?

我們知道當股價在多頭走勢的時候,走出一波追高可能常常會追到很高,利用這個方式我們可以看得出來,多方在回檔休息的時,整個股價的下跌動能溢失,這時候就會出線波動標準差低點,挑這樣的時候進場,能夠取得贏面的機會也就比較大,忍受回檔風險的機會也相對會小很多!!

當然!適當的停損還是必要的,各位快來試試吧!