打造自己的大盤多空函數

By | 2017-04-14

 

在前幾次的腳本中用了tselsindex這個我自訂的函數,但因為沒有再特別列出它的腳本,所以有些朋友反映腳本無法編譯成功,我想有必要跟大家介紹一下大盤多空自訂函數這樣的概念。

以前操盤時,老市場常常告戒我們,要順勢而言,不要逆勢操作,也就是多頭市場作多,空頭市場作空,當年我曾經不聽規勸,在空頭市場寫了一篇報告說EG會大漲,建議買進東聯,結果東聯一漲上去就被公司派大倒貨,這次之後我就學乖了,民國84年的空頭市場,別人輸的不要不要的,我靠放空新纖當年還能維持正的績效。 挨了一頓棍子又吃了一根大蘿蔔之後,從此我的操作策略起手式一定先問現在是多頭還是空頭?

因此當我接觸到XS這個語法的時候,我在寫交易策略時,一定會把大盤的多空方向考慮進去。所以每一個我放下去跑的策略,除了個股本身的觸發條件之外,一定會加上大盤的先決條件,例如我寫過一個整理結速的腳本如下:

input: Periods(10,"計算期數");
input: Ratio(7,"近期波動幅度%上限");
settotalbar(300);
setbarback(50);
if GetSymbolField("tse.tw","收盤價")
>average(GetSymbolField("tse.tw","收盤價"),10)
and average(GetSymbolField("tse.tw","收盤價"),5)
>average(GetSymbolField("tse.tw","收盤價"),20)
then begin
condition1 = false;
if (highest(high[1],Periods-1) - lowest(low[1],Periods-1))/close[1]
<= ratio*0.01
then condition1=true//近期波動在7%以內
else return;
if condition1
and high = highest(high, Periods)
//最高價創波段新高
and lowest(low,periods+20)*1.1<lowest(low,periods)
then ret=1;
end;

這個腳本裡,我特別加了下面這一段

if GetSymbolField("tse.tw","收盤價")
>average(GetSymbolField("tse.tw","收盤價"),10)
and average(GetSymbolField("tse.tw","收盤價"),5)
>average(GetSymbolField("tse.tw","收盤價"),20)
then begin

這一段的意思是,只有在加權指數高於10日均線且其5日均線高於牛20日均線時,才開始跑下面的程式,這就是先考慮大盤多空再來設定個股的觸發條件。

但如果每個腳本都要先寫這麼一段,感覺很煩,而且判斷大盤的多空方向有不同的方法,也不見得每次都用同樣的腳本,所以我就把這一段寫成自訂函數。

舉 tselsindex為例,我當切觀察到,這 幾年外資如果連續買超時大盤多頭的機率較高,所以我就寫了以下的自訂函數

input:length1(numeric);
input:lowlimit(numeric);
 
if countif(GetSymbolField("tse.tw","外資買賣超金額","D")>0,length1)
>= lowlimit
then value1=1
else
value1=0;
tselsindex=value1;

這個函數的概念是,如果在一段時間內外資買超的天數超過一定比例那麼tselsindex的值就=1,否則

=0 ,例如tselsindex(10,7)=1就代表過去十天至少有七天外資是買超的。

 

所以如果大家複製了我寫的腳本中有像tselsindex這樣的自訂函數,請先把這個函數加到自己的自訂函數中再來跑腳本才不會出現錯誤。

當然各位也可以自己制定自己的大盤多空策略函數,然後把它應用在自己的交易策略上。

我這幾年忙於公事,無法當一個全職的交易人,但光靠著站對邊,以及空頭市場儘量壓低持股比例這兩個原則,每年都還能混點業外收入,我深深知道順勢而為的好處,所以建議大家,在寫波段交易策略時,把大盤的多空方向考慮進去。