Author Archives: 發財橘子

夜星

 

{
[檔名:] 夜星 [資料夾:] 酒田戰法 [適用方向] 空
[說明:] 紅棒後 開高走低守平盤

[資料讀取] 10
[最大引用] 5
}
{判斷狀況}
condition1= ( close[2] - open[2] ) > (high[2] -low[2]) * 0.75 ;//狀況1: 前前期實體紅棒
condition2= close[2] > close[3] + (high[3]-low[3]) ;//狀況2: 前前期波動放大
condition3= low[1] > high[2] and close[1]>open[1] ;//狀況3: 前期高開收紅
condition4= open < close[1] and close < open - (high[1]-low[1]) ;//狀況4: 當期開低收黑K棒
{結果判斷}
IF
condition1
and condition2
and condition3
and condition4
THEN RET=1;

 

孕抱線

孕抱線母子型態與「內困日」的基本假設大致相同,不過,母子僅用實體做為判斷依據,但內困日是使用最高價與最低價的限制。在多頭或空頭走勢持續了一陣子之後,出現了一個與原來趨勢相同的長日,但第二日開盤價卻與第一日的趨勢相反,而且第二日的主要交易區間皆落在前一個長日之內時,代表原來的強勢的走勢已經出現的危機,而且若第一天的成交量為近期的大量,但第二日的成交量反而明顯量縮時,投資人的不安亦隨之升高。母子或是內困日的型態都需經過隔日走勢才能確定,因此,操作上可以將母子型態視為原來趨勢的警訊,當該型態出現時,投資人宜採取較保守的策略,為原來的部位建立停利或停損點。

 

{
[檔名:] 多頭母子 [資料夾:] 酒田戰法 [適用方向] 多
[說明:] 前期收長黑K棒 今期開高小幅收紅不過昨高

[資料讀取] 10
[最大引用] 5
}
{判斷狀況}
condition1= ( open[1] - close[1] ) >(high[1] -low[1])*0.75 ;//狀況1: 前期出長黑K棒
condition2= close[1] < close[2] - high[2]-low[2] ;//狀況2: 前期呈波動放大下跌
condition3= ( close - open ) >(high -low) * 0.75 ;//狀況3: 當期紅棒
condition4= high < high[1] ;//狀況4: 高不過昨高
condition5= low>low[1] ;//狀況5: 低不破昨低
{結果判斷}
IF
condition1
and condition2
and condition3
and condition4
and condition5
THEN RET=1;

 

鎚頭

紙傘的基本假設與紡錘線大致相同,不同的地方在於紙傘只有下影線。指數在開盤之後呈現重挫,但在收盤之時,指數則是收在開盤價附近。紙傘視其出現的位置,另外又分成鎚子與吊人二種。鎚子出現在下跌的過程之中,當指數再度重挫之時,已出現低接的買盤,後市有可能會上漲;吊人則出現在上漲過程中,有可能是空方進場測試指數的支撐力道所留下的佈局,或是獲利回吐的賣壓所致。

鎚子與吊人都屬於單K「反轉」型態。當鎚子出現時,若下影線愈長,其反轉的成功率愈高。只要隔日指數開高,空方回補的力道亦會增加。而吊人則是多頭市場的賣壓出現,是否足以反轉多頭走勢,則須先後觀察隔日開盤價與收盤價來判斷。

 

 

{
[檔名:] 鎚頭 [資料夾:] 酒田戰法 [適用方向] 多
[說明:] 開盤後下跌試底,盤中拉升上攻後,收在高點留下下影線

[資料讀取] 10
[最大引用] 5
}
{判斷狀況}
condition1= close >=high and close > open ;//狀況1: 收高
condition2= (high -low) > 2 *(high[1]-low[1]) ;//狀況2: 波動放大
condition3= (open-low) > (close - open) *2 ;//狀況3: 長下影線
{結果判斷}
IF
condition1
and condition2
and condition3
THEN RET=1;

晨星

晨星與夜星皆屬於反轉的型態,晨星是由空轉多,夜星是由多轉空。以晨星來說明,指數在第一日維持原來的下降趨勢之後,第二日出現了向下跳空的走勢,不論當日指數是收紅或收黑,由於實體之間存在跳空缺口,因此都增強了原來趨勢的力量。不過,原來的趨勢在第三日出現了變化,指數在開盤時即跳空上漲並收紅,使得第二日的K線實體與第一天及第三天皆有跳空的情形,即為晨星。此時若第二日的K線是十字線型態時,則稱為晨星十字或夜星十字。若第二日與第一日及第三日的跳空缺口連影線都跳空時稱為棄嬰。

1.第一日的走勢須維持原來的走勢,而第三日與第一日的走勢完全相反,K線實體的顏色相反。

2.第二天的K線實體與第一天及第三天皆存在跳空,若是鎚子型態則更佳。

3.第一日最好是長日。

4.若第三日的K線能深入第一根K線的二分之一以上時,未來反轉的趨勢會愈明顯。

 

晨星

 

{
[檔名:] 晨星 [資料夾:] 酒田戰法 [適用方向] 多
[說明:] 前前期收長黑K棒 前期再開低震盪收短紅棒後 當期開高紅棒反攻起跌點

[資料讀取] 10
[最大引用] 5
}
{判斷狀況}
condition1= ( open[2] - close[2] ) >(high[2] -low[2]) * 0.75 ;//狀況1: 前前期出黑K棒
condition2= close[2] < close[3]-(high[3]-low[3]) ;//狀況2: 跌勢擴大
condition3= ( close - open ) >(high -low) * 0.75 ;//狀況3: 當期收紅K棒
condition4= close> close[2] ;//狀況4: 收復黑棒收盤價
condition5= close[1] <= close[2] and close[1] < open ;//狀況5: 前低收盤為三期低點
{結果判斷}
IF
condition1
and condition2
and condition3
and condition4
and condition5
THEN RET=1;

 

 

自訂指標

雖然XQ內建了近百種技術指標,但作為一個程式交易者,也許你也會想要發明一個專屬於你個人的指標。為了滿足您這方面的需求, XS提供了一個自訂指標的功能,接下來我們就舉一個例子,一步步的介紹如何在XS上自訂指標。

首先,請打開Xscript編輯器,然後按新增,這時候系統會跳出如下的視窗 :

寫自訂指標腳本的第一步

 

記得在腳本類型的地方要選擇”指標”,然後幫你的指標腳本取一個名字, 按確認就回到編輯器的撰寫腳本畫面。

在這畫面你可以開始描述你的指標計算公式,語法跟警示的腳本寫法一樣,例如我們可以設一個指標,用來計算每天收盤價與月線之間的差, 如果這個差的三天移動平均站上零,應該就代表波段轉向多頭走勢,這個指標的腳本如下

value1=average(close,22);

value2=close-value1;

value3=average(value2,3);

plot1(value3,"月線與收盤價差三日移動平均");

自訂指標樣本

在這邊,XS用了一個語法叫作plot,用來告訴電腦要畫的指標是那個數值,如果只畫一個指標,那就是plot1,畫第二個就是plot2,其語法如下 :

plot1(value,”文字說明”);

Value代表任何的數值,逗號後面的文字說明可有可無),所以,如果你要畫一條數值為零的橫線,只要寫plot1(0)即可。

至於這個指標要畫出柱狀圖還是線圖?圖的顏色是什麼色? 座標要怎麼設,XS的作法跟Tradestation不同,我們是直接透過技術分析的一個對話框來讓使用者修改。

使用者寫完自訂指標的腳本,完成編譯的動作之後,系統就在技術分析的副圖指標中,在自訂指標的分類中,自動幫使用者加上這個指標。 所以使用者只要到技術分析的頁面,按右鍵就會看到如以下的選單 :

自訂指標的選單

當使用者點選自訂指標時,系統就會把所有的自訂指標列出來讓使用者選取,如是,使用者就可以在這邊找到自己寫好且編譯完的指標了。

如果使用者想要更改自訂指標的各項屬性,只要在自訂指標的頁面按滑鼠右鍵,然後按設定,就會出現以下的對話框 :

自訂指標參數設定

透過這個對話框,切換頁籤,就可以依序調整參數,繪圖的樣式,以及座標範圍了。

有了這個功能,可以先透過自訂指標,找出指標的特色及與商品走勢的對應關係,然後再來研究如何制訂交易策略,並把它寫成一個警示的腳本, 在指標符合某些特定條件時,可以讓電腦觸發警示。

例如,我們可以設計一個指標叫上昇趨勢指標,它的計算方法如下 :

1.如果收盤比前一天高,就給一分。

2.如果開盤,最高,最低也比前一天高,就各給一分。

3.計算這十天的總分合計是幾分。

4.取這個分數的五日及二十日平均。

根據上述的原則,我們可以寫出一個腳本如下 :

variable:count1(0), count2(0), count3(0), count4(0), x1(0);
input:length(10);
count1=0;
count2=0;
count3=0;
count4=0;

for x1=0 to length-1
if o[x1]>o[x1+1] then count1=count1+1;
 
for x1=0 to length-1
if h[x1]>h[x1+1] then count2=count2+1;

for x1=0 to length-1
if l[x1]>l[x1+1] then count3=count3+1;
 
for x1=0 to length-1
if c[x1]>c[x1+1] then count4=count4+1;
 
value1=count1+count2+count3+count4;
value2=average(value1,5);
value3=average(value1,20);
Plot1(value2,"趨勢分數");
Plot2(value3,"移動平均分數");

然後在完成這個腳本的編譯後,我們把這個腳本用在加權指數上可以得出如下圖的自訂指標圖形 :

上昇趨勢指標

從這張圖,我們可以看出,當短天期的趨勢指標向上突破長天期的指標時,就是買進訊號,反之則是賣出訊號。

我們就可以運用這樣的觀察,在自訂警示腳本時,把自訂指標的腳本copy過去,然後把最後兩行plot的敘述拿掉,放上 :

if value2 cross over value3

then ret=1;

這樣的警示條件,就可以完成一個新的警示腳本了。

自訂函數

除了系統提供的函數之外,使用者也可以自己制定函數。在XS平台上,如果你要制定函數,共分以下幾個步驟 :

第一步 : 開啟Xscript編輯器,按新增腳本,選擇函數,並取一個名字。

例如 :我想要作一個函數專門來計算當日上影線佔整體振幅的比例,我就按下新增腳本這個icon,然後會跳出如下圖的對話視窗, 先在腳本類型選擇函數,然後填入腳本的名稱。

這裡要特別留意的是其他腳本的名稱不見得要英文,但由於函數可以被其他腳本引用,所以名字一定要取為英文,這樣電腦才看得懂。

自訂函數

 

在編寫函數時,使用者需要傳入參數的變數類型,目前支援三種,Numeric數值,String字串,邏輯值TrueFalse。細分是否傳值或傳址, 是否為陣列、序列、或是簡單型態預先宣告好的型態,Value類的可以儲存數值,Condition可以儲存邏輯值, 所以可以宣告的變數資料型態共可以分成以下的二十種。

相關的這些屬性都填完之後,接下來就直接按確認 來進到下一步開始撰寫腳本。

第二步 : 撰寫腳本

按完確認後,我們會進到一個全新的腳本編輯頁面,這時候我們就可以開始編寫腳本,例如我想寫一個函數來呈現上影線佔整個K棒長度的比例, 我就可以撰寫一個叫upshadow的函數如下 :

if high<>low

then begin

if close>=open

then upshadow=(high-close)/(high-low)

else upshadow=(high-open)/(high-low);

end;

第三步 : 按下編譯鍵

一旦 編譯成功,我們就完成了upshadow這樣一個函數,接下來我們就可以把這個函數拿來設定指標或是撰寫警示的腳本 。

以這個例子來說,我們如果寫一個警示的腳本,請電腦在個股連續兩天上影線佔當日振幅超過七成時通知我們, 那我們就可以把警示的腳本寫成以下的樣子 :

if upshadow[1]>0.7

and upshadow>0.7

then ret=1;

我們把這個腳本拿去跑,像以下這樣的股票就會被電腦挑出來通知我們

2長上影線

 

 

XS的時間及頻率設定

雖然說,XS的語法是建構在K棒的時間序列上,理論上,可以適用於各種頻率,但有時候我們在語法寫作時,會特別針對某種頻率去設計, 這時候就需要在腳本中,特別註明,並且安排一些敘述式,用來在當使用者把該腳本拿去用不合適的頻率啟動策略雷達時,可以讓系統發出警語。

這樣的語法,它的語法是一個內建的函數叫作barfreq,這個函數是用來傳回K棒目前頻率的單位,以字串型式表示,在XS中,K棒的頻率可以有以下幾種 :

BARFREQ1

日線以上都為一個字母,日線以下則為簡寫。

所以如果我們寫了一個腳本只想把它用在日線時,我們就可以寫成以下的敘述式 :

if barfreq<>"D" then return;

有了barfreq這樣的語法,我們可以指定腳本適用在tick,分鐘,小時,日,週,月等等不同的頻率, 但我們無法指定腳本適用在幾分鐘線,或是幾小時線,例如一分鐘線,或是五分鐘線。

這時候我們可以使用另一個XS內建函數: barinterval。

barinterval意思是K棒跟K棒中間的間隔。如果barinterval=1那代表間隔就是1,所以如果我們希望我們寫的腳本只適用在5分鐘線, 我們就可以寫出如下面這個敘述式 :

if barfreq<>"Min"or barinterval<>5  then return;

透過barfreq跟barinterval這兩個內建的函數,我們可以指定任何的K Bar頻率,來作為腳本的應用頻率。

我們在撰寫腳本的時候,有的時候必須把時序的概念加進去。

例如我們可能會尋找一開盤就大漲的股票,我們可能會尋找拉尾盤的個股,一開盤或是殺尾盤都有指定時間的概念。

XS提供了一個內建函數叫作currenttime來傳回現在的時間,我們可以用它來顯示目前電腦的時間,格式為 : hhmmss

  1. hh從00到23
  2. mm從00到59
  3. ss從00到59

如果現在的時間是早上的九點三十分二十秒,那我們如果寫一個 value1 = currenttime

如果有個腳本我們希望是從早上九點到中午12點的時間才執行,我們可以像下面這麼寫 :

if CurrentTime > 090000 and CurrentTime < 120000

Then begin

//statement

end;

除了currenttime之外,如果我們在用日線以下頻率寫腳本的時候,然後又希望電腦從今天開盤的第一根才開始運算時, 系統提供了另一個函數叫作currentdate,當您使用這個函數時,電腦會傳回現在的日期,傳回值的格式為yyyyMMdd 。

  1. yyyy為西元年
  2. MM為月份,從01到12
  3. dd為日期,從01到31

所以如果是2014年元旦使用currentdate時,它會傳回來的數值就是20140101。

之前我們有介紹過在系統內建的回傳值中,除了開高低收成交量之外,還有日期(date)及時間(time), 所以我們要確定腳本是在當天才被執行時,我們可以寫成if currentdate =date 這樣的敘述, 這個敘述式如果要是true,一定要K棒的日期是屬於今天才會是True。

currentdate

例如當我們用1分鐘線的腳本來尋找開盤連五分鐘都上漲的股票,我們可以這麼寫 :

input:TXT1("僅適用1分鐘線"; setinputname (1,"使用限制"); if barfreq = "Min" and barinterval = 1 and Date = CurrentDate and TrueAll (close > close [1], 5 )

then ret=1 ;

透過上述的幾個語法,我們可以 :

  1. 指定腳本的執行頻率。
  2. 指定腳本的執行時間間隔。
  3. 指定腳本執行的起始與結束時間。
  4. 指定腳本執行的時間是否為今天才執行。

忽略字

其實寫腳本就像在寫文章一樣,只是電腦比人笨,要特定的文字組在一起才會看得懂,但要電腦看得懂,通常一般人就得很多的時間去學習語法,像C++,java這樣的程式語言,但大部份的人又不是唸資訊工程系畢業的,要學一個程式語言往往出現很多的障礙,所以就出現一個兩難困局,大家會寫的,電腦看不懂,電腦看得懂的,大部份的人寫不出來。當初tradestation發明easylanguage時,就是希望讓交易者容易寫,電腦也看得懂,這當中很大的關鍵就是要口語化,所以我們日常在用的簡單英文描述,例如 close is > high,有主詞,有動詞,有受詞,就是一個完整且簡單的句子,我們希望這樣的句子電腦會看得懂,於是,我們容許交易者在撰寫腳本的時候,為了可以比較直覺的寫下去,可以使用一些日常使用的簡單英文,這些英文字可以讓交易者很容易連貫前後句子,電腦又不必加以理會,這些字 就是所謂的忽略字。意思是有也ok,沒寫也無所謂,反正電腦看到這些字就自動跳過,當沒有寫一樣。XS中支援的忽略字如下:

102203

 

舉個例子,當我們要寫收盤價突破二十日移動平均時,如果要很口語化的話,可以像下面這麼寫

if close was cross over the average(close,20)

then ret=1;

但如果是有受過訓練的程式人員,就會寫成以下的腳本

if close cross over average(close,20)

then ret=1;

上下對照,我們就可以了解忽略字其實顧名思義,就是電腦看到這個字當做沒看見,繼續跑其他的敘述內容。

 

用趨勢變化來判斷當前大盤的多空方向

行情走到這裡,有點驚驚漲的味道,加權指數接下來是續漲? 作頭? 下跌?

我今天想跟大家討論一個觀察的方式,這也是我師父以前常說的,當Top down看不懂的時候,就用bottom up。

當然要我們一檔檔都能了解個別公司未來的基本面變化,是有些困難,但我們可以透過統計方式,試著看看那些公司在uptrend,那些在downtrend,那些在盤整,從這些類別的成份公司,以及家數的變化,或許我們可以對這個大盤的多空方向,有更多的掌握。

舉個例子

102201

上圖是OTC指數的對照圖,大家會發現,OTC指數漲的比加權指數兇的時候,是多頭市場的主昇段,反之,OTC 指數跌的比加權指數兇的時候,是空頭市場的主跌段,這是因為在主昇段的時候,各方勢力一起作多,這時候什麼股票都想表現一下,反之一旦各方勢力撤退,中小型的股票因為缺乏承接的買氣,會是下跌趨勢最明顯的族群。

基於這種觀察,我用R平方這個先前跟大家介紹過的指標來衡量個股目前是屬於上昇趜勢,下降趨勢,盤整,多翻空還是空翻多?

然後透過每天這些類別家數的變化,我們就可以更清楚掌握目前的多空態勢。

我用一個選股腳本來做這件事

input:Length(20); //"計算期間"
setoutputname1("趨勢訊號");
LinearReg(close, Length, 0, value1, value2, value3, value4);
//做收盤價20天線性回歸
{value1:斜率,value4:預期值}
value5=rsquare(close,value4,20);//算收盤價與線性回歸值的R平方
condition1=false;
condition2=false;
condition3=false;
condition4=false;
condition5=false;

if value1>0 and value1[1]>0 then condition1=true;
if value1>0 and value1[1]<0 then condition2=true;
if value1<0 and value1[1]<0 then condition3=true;
if value1<0 and value1[1]>0 then condition4=true;
if value5>0.2 then condition5=true;

if condition1 and condition5
then
begin
ret=1;
outputfield1("上昇趨勢");
end;

if condition2 and condition5
then
begin
ret=1;
outputfield1("翻多");
end;

if condition3 and condition5
then
begin
ret=1;
outputfield1("下降趨勢");
end;

if condition4 and condition5
then
begin
ret=1;
outputfield1("翻空");
end;

if condition5=false
then
begin
ret=1;
outputfield1("盤整");
end;

用這個腳本每天收盤後去跑選股,會看到如下面的畫面

102202

上圖是用價格排序的結果,我們會發現高價股中,超過350元以上的大多在下降趨勢,反而是那些200元到300出頭的不少是在上昇趨勢中。

如果我把昨天的1554檔股票這個資料匯出到excel去計算數據

我們會發現,處於上昇趨勢的股票共有850檔,處於下降趨勢的股票共有215檔,盤整的,沒有明顯趨勢的有467檔。

另外下圖是多翻空及空翻多的個股

102101

 

翻空的比翻多的多了幾檔。

從這樣的架構,我們每天做追蹤,就可以更清楚地掌握大盤的方向,更重要的是,這可以讓我們在多空轉折點時,更明快的作出決定。

若是對於R平方的意義想要多了解一點,請參考以下這個連結

尋找目前趨勢還向上的股票

 

盤中開始暴量的低PB股

行情走到這邊,我發現不少異軍突起的股票,都是屬於那種低股價淨值比的,低PB的股票我們用XS選股每天隨時都可以挑出來,但不是每一檔低PB的股票都會漲,特別是如果盤中我們想要在這類股票一發動時就進場,那麼我們最好能夠在盤中就掌握低PB的股票人氣回籠的徵兆。

怎麼判斷呢?

預估量是一個方法,這些低PB的股票之所以低PB,很大的原因是因為乏人問津。一般乏人問津的股票,其具體的表現就是沒有量,所以當一檔低PB的股票預估當日成交量會比十日均量高出三成且主要都是外盤成交時,就很值得留意了。

那麼我們怎麼透過XS來在盤中找到這種股票呢?

首先我們可以用XS選股挑出低PB的股票

102002

接下來就要拿這341檔來跑預估量會暴增的策略

先前我們有介紹過預估量的函數,其腳本如下:

variable:CloseTime(133000); // 收盤時間
variable: OpenMinutes(270);//一天有幾分鐘開盤
variable: MinutestoClose(270); //到收盤還有幾分鐘
variable: Length(20); //用過去幾天日資料計算
variable: AvgDayVol(0); //平均日量
variable: AvgMinVolinDay(0); //平均分鐘量
variable: LeftVol(0); //剩餘時間的估計量

variable: estVol(0); //最終估計量

AvgDayVol = average(V,Length);

AvgMinVolinDay = AvgDayVol/OpenMinutes; //過去這段時間每分鐘的平均量

MinutestoClose = Timediff(CloseTime,currenttime,"M"); //現在到收盤還有幾分鐘

LeftVol = MinutestoClose *AvgMinVolinDay;// 剩餘時間乘上每分鐘均量 = 盛夏時間可能有多少量

if ( barfreq ="D") then //是日線才會對
begin
if Date =currentdate then //今天才回估量
estVol =volume + LeftVol //估計量 等於 現在的日總量 加上 剩下時間估計的量
else
estVol =v; //過去的話就直接回實際的量
end;
estvolume =estVol;

有了這個預估量的函數,我們就可以很容易的寫出預估量暴增的腳本

value1=q_InSize;//當日內盤量
value2=q_OutSize;//當日外盤量
if estvolume > average(volume[1],10)*1.3//預估量比十日均量多出三成
and value2>value1//外盤量比內盤量多
then ret=1;

接下來我們就用這個腳本來設定策略雷達

102001

如上圖,我們在指定範圍設成PB<0.8的選股法,然後把”觸發設定”設成日內單次觸發,這樣一來,我們就可以讓電腦在盤中只要有那一檔PB<0.8的個股預估量爆增,馬上透過警示中心通知我們。

如下圖:

102003

以今天為例,我大約9:28分啟動這個策略,到中午11:30左右為止,符合低PB且預估量暴量的股票如下:

102004

從上圖我們可以發現,雖然今天指數到11:28分是下跌的,但上面大部份的股票是上漲的。

以在名單上的康那香為例

09:47的時候,康那香符合預估量爆增的條件,那時候的康那香價位是12.15,到了11點之後,康那香的股價已經來到12.85。

102005

透過這個策略我們確實可以在這些低PB乏人問津股票出量的第一時間就掌握進場的時機,但在這邊還是要跟大家說明的是,這些股票能走多遠,還是要看基本面有沒有變化而定。

以在名單中的昱晶為例,到第二季財報為止,它的每股淨值是29.7,如果以股價低於PB X 0.8來算,當股價跌破23.8時,它就符合低PB的條件,我們從K線圖上可以發現,必須要K線也配合是屬於中長紅的格局時,才是多頭人氣重新匯聚的徵兆。

102006

 

如果是在大漲之後,或者是在下降趨勢之中,則不應輕取妄動。

整體來說,這個低PB暴量的策略如果挑出來的股票又符合多次到底而破,整理後突破等策略,其後市看漲的機率就更高了。