Author Archives: 發財橘子

忽略字

其實寫腳本就像在寫文章一樣,只是電腦比人笨,要特定的文字組在一起才會看得懂,但要電腦看得懂,通常一般人就得很多的時間去學習語法,像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平方的意義想要多了解一點,請參考以下這個連結

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

 

xqlite banner

盤中開始暴量的低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暴量的策略如果挑出來的股票又符合多次到底而破,整理後突破等策略,其後市看漲的機率就更高了。

 

 

switch case

 

switchcase

透過switch..case的語法,可以在一個變數的數值不一樣時,往不同的流程進行,例如要計算外資過去十天買超超過七天時,可以運用以下的語法來寫腳本 :

範例:外資近日買超天數比例

//1.宣告參數:利用input宣告輸入的參數。

input:day(10);//過去幾天

input:ratio(0.7);//外資買超的天數佔多少比例

//2.宣告變數,利用variable

value1=GetField("Fdifference");//外資買賣超

variable:count(0);

variable:xi(0);

for xi= 1 to day

begin

//============================================

switch(value1[xi])

begin

case >0:count=count+1;

case <0:count=count;

case 0:count=count;

end;//所有case都表達完之後,最後必須加end;來表示各種數值選項已結束

//============================================

end;

//6.設定警示條件:if.. then ret=1;

if day<>0 and count/day>=ratio

then ret=1;

 

 

begin..end

有的時候,當符合if後面的敘述式時,我們希望電腦幫我們執行的,不只一行的敘述式時, 電腦要怎麼知道有那敘述是在前面條件符合時批次都要執行的呢?我們在DJ Script的語法中,使用begin …….end;的方式, 來標示所有要執行的敘述式。單條件多敘述

例如若要找出前N日漲幅超過X%且今天跳空開高超過Y%的股票,我們可以寫一個腳本如下:

//宣告參數:利用input宣告輸入的參數。
input:N(3);//前N日
input:X(10);//前n日漲幅%
input:_Y(4);//缺口大小%
if open>high[1] then //跳空開高
//用begin來呈現if 之後要執行的不只一件的事情
begin
value1=(1-close[1]/close[N])*100;//計算前N天的漲幅
value2=(open-high[1])/close*100;//計算跳空缺口的大小
 
end;
//最後用end來宣告if之後要執行程式的結束
 
if value1>=X and value2>=_Y
then ret=1;
 多條件多敘述簡單模式這樣的流程控制算是if ….then裡最複雜的,用白話文說就是如果……那就開始一連串的動作,反之如果不符合上述條件,就開始進到第二個如果…..那就開始另一連串的動作 以上述的例子的引申為例,我們也可以把上面的例子改寫成以下的腳本 :
多條件多敘述簡單模式sample
這腳本的意思是當一開盤就漲停時,我們幫它加一個條件:如果過去十根K棒漲幅都沒有超過2.5%就觸發, 至於對於那一些開盤沒有馬上漲停,但開高後在9:15之前就漲停的股票,如果過去十天漲幅不到兩成,就觸發警示。 這樣的流程基本上就可以同時COVER各種觸發的條件。
多條件多敘述複雜模式
這樣的流程控制結構就更複雜,它是用兩個條件式來把流程引導向三種不同的運算,我們最常用它來安排不同的觸發警示條件。 我們可以把上述的腳本再更進一步加上後面的另一種觸發警示的條件如下 :
多條件多敘述複雜模式sample

這腳本的意思是說有三種情況請電腦觸發警示 :

  1. 開盤就漲停且過去十天沒有一天漲超過2.5%。
  2. 開盤沒有漲停,但開高超過2.5%且9:15之前就漲停,而且過去十天合計漲幅小於兩成。
  3. 開盤沒有漲停,9:15之前也沒有漲停,但現在漲停了而且過去十天合計漲幅小於一成。

從上述的例子,我們就可以了解,這樣的流程控制,可以讓使用者像剝洋?一樣,把一個結果(漲停)安排出不同情境下的不同觸發但書。

 

if..then

一個腳本的完成,有幾個步驟:

  1. 我們透過參數及變數的宣告,準備好要加以運算的數據。
  2. 我們透過運算因子,完成各種數值間的運算。

接下來,我們必須為這些運算的結果安排其先後順序,以及建構與輸出語法間的的因果關係,這些工作,我們都是透過流程控制的語法來完成, 前面我們有用到的IF ……..THEN就是一個典型的流程控制語法。

接下來的章節,我們就一一來介紹這些控制流程的語法,完成這部份的學習,XS的基本語法,就大致完備了。

IF..Then

if then的流程控制,在腳本中我們最常運用到的流程控制,應該就是如果…………那就……….,也就是if ……..then了

例如我們要電腦在股價創今天高點時通知我們,我們會寫成 :

close=q_dailyhigh then ret=1;
但在撰寫腳本時,並不是每個想法都只是單純的if……..then ,有時候我們在符合某個條件時,想要電腦幫我們處理的, 不只有一行敘述,有時候符合條件時我們希望電腦幫我們執行某動作,在不符合條件時執行另一個動作,因此, 本節我們來學習if…….then這個我們最常用的流程控制語法,到底有那幾種不同的寫法,用來處理不同的情境。
if then 1
這一種是我們最常用也最簡單的寫法,例如我們要電腦在股票出現K棒三連陽時通知我們,我們只要寫以下的兩行腳本 :
if trueall(close>close[1],3)
then ret=1;
這樣的敘述很單純,就是如果IF後面的那個敘述式為真,那就執行then後面的那一個敘述式。
單條件單敘述

但有的時候,我們在寫腳本的時候,除了希望在某敘述式為真時,請電腦幫我們執行某敘述,有時候我們也希望當該敘述式false時, 可以為我們執行另一個敘述,這時候的寫法很簡單,就是在then之後的那個敘述式的下方,用else起頭,寫下另一個敘述式就可以了。

例如我們在計算真實波動區間時,我們需要找真實的高點及真實的低點,所謂真實的高點是 :

  1. 如果昨天收盤比今天的高點高,那麼昨天的收盤價就是今天的真實高點
  2. 如果昨天收盤不比今天的高點高,那麼今天的最高價就是今天的真實高點

在寫成腳本時,我們就可以用if……then …….else的語法來處理如下方的敘述式

if Close[1] > High then TrueHigh = Close[1]
else TrueHigh = High;

我們最常用的語法是如果…….就……否則就……………,但有的時候,我們必須設下不止一層的過濾器,也就是在上面的語法的”否則就……”, 不是一個指示下一個直接運算的敘述式,而是另一個if….then的判斷式敘述。

多條件單敘述

 

 

 例如我們如果想找開盤就漲停或開盤跳空上漲後,不到九點十五就漲停的股票,我們可以運用以下的腳本 :
if open=q_DailyUplimit then ret=1;

if open>close[1]*1.025 and close=q_DailyUplimit and time<091500 then ret=1;
這樣的架構就是為觸發設定兩個不同的條件,當符合條件A時就觸發,但如果沒有符合條件A,如果符合條件B也可以觸發。
多條件單敘述sample

這當中有件事要請各位特別留意,那就是在語法上,要千萬記得

If……..

Then …….

else………..;

如果有else,前面then 之後的敘述式結束時,不要打逗號,要等到else後面的敘述式結束後才打逗號。

那一年,我們一起尋找的超跌股。

這幾日,有一檔股票走勢頗強勁,但從損益表來看,這根本就是一家沒啥前途的公司,但如果從資產負債表來看,感覺這是一家股價遠低於其變現價值的公司,於是,我寫了一個選股的腳本,把有類似這樣情況的公司通通找出來,這家公司叫做矽統,這類的公司,其特點就是市值遠低於帳上扣掉負債後,容易變現的資產。

故事的起頭是,前幾天,我用一個策略雷達挑出了矽統這檔股票。

101602

我看這家公司的損益表,直覺是這家公司基本沒救了。

因為這家公司股本61億,結果一個月營收很久以來都沒有超過3000萬,因此,每年本業總要虧個2到3億。

因為我真的很少看到這種營收比營業費用還小的公司,所以一開始我是覺得這樣的公司下市收掉算了。

但後來又想,這兩天在買股票的人應該也不是傻子,所以我把它的資產負債表拿出來看,一看就看出一些還蠻有趣的地方

101603

上面是它的流動資產及長期投資,其中帳上有13億的現金,至於47億的長期投資,如果我們看他的轉投資,就會發現,聯電這檔股票就佔了41億。

101604

也就是說,這家公司61億的資本額,其中光現金及聯電的股票就值54億。

接下來我們再看一下它的固定資產

101605

帳上是列了7.8億,其中土地就列了4.76億,我看了一下該公司的網站,再用google map的街景圖,找到了它的固定資產應該就是下面這棟位於竹科的廠辦

101606

這顯示它的固定資產應該值帳上列的這個錢。

看完了資產我們來看它的負債

101607

這家公司竟然是一家幾乎無負債的公司,短期借款是零,長期負債也是零。

看到這裡,我們來算一下,它這一波最低跌到4.41 元,以它的股本61億來算,在這種價位附近真的把它買下來,等於花30億買到54億的現金+聯電股票,外加一棟位於竹科的廠辦。

難怪它的股價會很快的就回到五元以上。

這種公司我要是早點找到,這趟反彈就押上去了。這次就算了,下次如果它再跌下來我就知道該怎麼做。

不過因為研究過矽統這檔股票,所以我很好奇這市場上還有沒有矽統第二,所以我就寫了以下這個腳本

input:percent(20);
setinputname(1,"每股易變現資產與股價間的落差比");
value1=GetField("現金及約當現金","Q");//百萬;
value2=GetField("短期投資","Q");//百萬
value3=GetField("應收帳款及票據","Q");//百萬
value4=GetField("長期投資","Q");//百萬
value5=GetField("負債總額","Q");//百萬
value6=GetField("最新股本");//單位: 億
value7=(value1+value2+value3+value4-value5)/(value6*10);
if value7>close*(1+percent/100)
then ret=1;
outputfield1(value7);
setoutputname1("每股快速變現價值");
outputfield2(close/value7);
setoutputname2("股價與快速變現價值");

根據上述的算法,我試著找出股價跟每股快速變現價值差距超過兩成的股票

附圖就是我挑到的股票,有興趣的朋友,不妨也一檔一檔找找看這當中有沒有便宜的太過份的股票。

101601

要先說明的是,這個名單只是初步篩選的結果,能不能真的下去買,還得一檔一檔下去仔細分析才行。

我以藍天為例,這家公司的股本是68億,現金,短期投資加應收帳款有61億,負債66億,但它的長期投資帳上是910億,說穿了,藍天這家公司到底值多少錢,就看這900多億的長期投資值多少錢?

101608

可惜藍天的轉投資主要都是海外的控股公司,像這種的我們就無從查出這裡頭到底真正值多少錢,我們拿來分析矽統的方法,也就不合適拿來套在藍天上面。

 

在使用這個方法時,有幾個眉角還是要跟大家交代一下

1.短投資裡,如果是上市櫃公司佔多數那還好,不過也要考慮流動性,但如果轉投資裡都是一堆未上市或投資公司,那就得還要再花精神研究這些東西會不會其實已經變成壁紙

2.固定資產我們沒有拿進來算,因為變現不容易,不過如果是位於市區的辦公大樓,其實也可以考慮進去。

3.在挑這一類股價跌過頭的股票時,一定要留意公司經營者的誠信,帳上現金再多,如果經營者是屬於惡搞型的,那也可能兩三下就五鬼搬運光了。

4.這類的公司如果有要減資或是被人借殼,反而股價會比較有表現的機會。

 

xqlite banner

私房交易策略之強勢股整理結束

以前寫情書的時候,我們常說: 妳的過去我來不及參與,但妳的未來一定有我。

作為一個操作者,我們對那些來不及上車的強勢股,也往往有這樣的心情,

這樣的心情,如果用波浪理論來解釋,那就是在初昇段來不及參與之後,希望在主昇段發動前夕,來得及坐上車。

101701

為了尋找這一類的股票,我試著寫一個腳本,這個腳本有三個步驟

1.尋找特定日期以來漲幅最大,走勢最強的股票

2.這樣的股票,從這段時間以來的最高點到前一日的收盤,已修正一定的幅度

3.今天盤中該個股明顯走強。

在要寫這個腳本時,首先得先找出某特定日到最新的收盤價,一共是幾根Bar。

公司同仁寫了一個函數來做這件事,他把這個函數稱之為

getbaroffset

 

這個函數的腳本如下:

Input: target(numeric);

if barfreq <> "D" AND barfreq <> "W" AND barfreq <> "M" then raiseruntimeerror("只支援日/週/月頻率");

variable: i(0);
variable: target_ym(0), date_ym(0);

if barfreq = "D" then
begin
 if target >= date then
 begin
 GetBarOffset = 0;
 return;
 end;
 i = 1;
 GetBarOffset = 1;
 while i < currentbar
 begin
 if date[i] <= target then return;
 i = i + 1; 
 GetBarOffset = GetBarOffset + 1;
 end;
end;

if barfreq = "W" then
begin 
 target_ym = year(target) * 100 + weekofyear(target);
 if dayofweek(target) = 0 then target_ym = target_ym - 1;
 
 GetBarOffset = 0;
 i = 0;
 while i < currentbar
 begin
 date_ym = year(date[i]) * 100 + weekofyear(date[i]);
 if dayofweek(date[i]) = 0 then date_ym = date_ym - 1;
 
 if date_ym <= target_ym then return;
 i = i + 1;
 GetBarOffset = GetBarOffset + 1;
 end; 
end;

if barfreq = "M" then
begin
 target_ym = year(target) * 100 + month(target);
 
 GetBarOffset = 0;
 i = 0;
 while i < currentbar
 begin
 date_ym = year(date[i]) * 100 + month(date[i]);
 
 if date_ym <= target_ym then return;
 i = i + 1;
 GetBarOffset = GetBarOffset + 1;
 end; 
end;

這個函數是只要輸入一個日期,就會回傳從現在到該特定日期共隔了幾根Bar。

如果今天是2015年10月15日,那如果我們寫value1=getbaroffset(20151014);

那代表是前一根bar,所以value1=1;

有了這個函數,我就來寫出上面所提到的這個腳本

input: stardate(20150824);
input:ratio(30);
input:ratio1(7);
input:ratio2(2);
setinputname(1,"輸入上漲起始日");
setinputname(2,"輸入上漲最低幅度");
setinputname(3,"輸入最小拉回幅度");
setinputname(4,"今日最低漲幅");
value1=getbaroffset(stardate);//找出輸入的日期是在第幾根bar
value2=highest(high[1],value1+1);//找出這一波的最高點

condition1=false;
condition2=false;

if value2>=close[value1]*(1+ratio/100)//計算波段漲幅有沒有符合要求
then condition1=true;

if value2>=close[1]*(1+ratio1/100)//計算拉回的幅度夠不夠要求
then condition2=true;

if nthhighestbar(1,high,10)>=5//從最高點到今天超過五根bar
then begin
if condition1 and condition2 and close>=close[1]*(1+ratio2/100)
then ret=1;
end;

在解釋這個腳本之前,我們先來看一下大盤最近的走勢

101702

 

所以我上面寫的這個腳本,就是找出符合下面四個條件的股票

1.從8/24日以來,到最高點漲幅超過30%的股票

2.從最高點到前一個交易日的低點修正幅度超過7%

3.今天收盤比前一天收盤漲超過2%

4.從高點拉回整理超過五天。

這樣的腳本要尋找的,就是整理結束後的強勢股。

下面這張圖就是這個腳本今天跑出來的股票

101501

 

當然不是每檔股票都會在初昇段之後就一定有主昇段,也不見得每檔股票都是休息了幾天後就開始再往上攻,不過這個策略的好處是,對於那些從特定日期以來走勢很強的股票,一旦整理結束,我們在第一時間就會收到電腦的通知,這樣的好處是我不必一直盯著強勢股等拉回結束。

這個腳本可以名列我的私房腳本第二名,介紹給大家,至於日期及漲幅,拉回幅度,這些參數就請大家自己調整囉!

 

 

xqlite banner

私房交易策略介紹之旱地拔葱

先跟大家分享幾檔股票這幾天的走勢。

101706 101704 101705 101703 101702

眼尖的各位,從上面這幾張圖可以發現,一段時間量縮橫向整理後的中長紅,後市往往還有高點。

是的,這是自從我開始從事程式交易以來,最靠譜的交易策略

這個策略有三個原則

1.超過十個交易日股價橫向整理

2.在整理期間成交量明顯萎縮

3.以中長紅的姿態突破整理

4.突破時帶著比先前多出不少的成交量

過去為了找到這樣的股票,我曾經寫過也用過幾個策略

例如我常推薦大家使用的多次到頂而破策略雷達

input:HitTimes(3); setinputname(1,"設定觸頂次數");
input:RangeRatio(1); setinputname(2,"設定頭部區範圍寬度%");
input:Length(20); setinputname(3,"計算期數");

variable: theHigh(0); theHigh = Highest(High[1],Length); //找到過去其間的最高點
variable: HighLowerBound(0); HighLowerBound = theHigh *(100-RangeRatio)/100; // 設為瓶頸區間上界
variable: TouchRangeTimes(0); //期間中進入瓶頸區間的低點次數,每跟K棒要歸0

//回算在此區間中 進去瓶頸區的次數
TouchRangeTimes = CountIF(High[1] > HighLowerBound, Length);

if TouchRangeTimes >= HitTimes and ( q_ask> theHigh or close > theHigh) then ret=1;

要使用這個策略,可以直接在雲端策略中心中訂閱多次到頂突破這個策略即可

101707

訂閱後每天可以從警示中心這一頁盤中即時跳出符合這個策略的股票

101708

這個腳本的最大問題是只考慮價沒有考慮量,而且只考慮向上突破而沒有考慮先有是否有量縮盤整。

後來我有寫過另一個叫股票箱突破的策略雷達

腳本如下:

input:length(12);
value1=NthHighest(1,high,length);
value3=nthhighest(3,high,length);
value4=Nthlowest(1,low,length);
value5=nthlowest(3,low,length);

if
value1[1]<=1.03*value3[1]
and value5[1]<=value4[1]*1.03
and value1[1]<=value4[1]*1.1
and close>value1[1]
then ret=1;

這個腳本昨天出現訊號的股票如下圖

101709

大家不妨參考對照未來的走勢。

除了上述兩個腳本之外,各位也可以根據上面的那四個定義,另外再寫出一個符合上述邏輯的策略,我覺得只要follow這四個精神,應該可以找到短多的股票,而且,勝率真的夠高。

這個交易策略背後的邏輯是,當股價脫離原先的盤整區域,代表原來的多空平衡已被破壞,一根中長紅代表的是多方正式撃潰空方的最後防線,接下來就是長驅直入了,我們在這時候進場,圖的就是這種空頭全面潰敗,多頭乘勝追擊追撃的過程,這個過程很重要的是

1.要一確定中長紅就跟進去。

2.最好挑那種對峙很久的,這種一被撃潰就後防空虛,多頭可以一路追撃。

3.最好上面沒有太多解套賣壓的。

根據上述這三個原則,各位可以把這個策略的腳本改寫的更精準。

 

 

xqlite banner

 

趨勢檢定器

我們透過技術分析指標建構交易策略時,最大的困難在於,當趨勢指標通知我們出現買進訊號時,往往只是盤整過程中的一次假的警報。

我們以移動平均線出現黃金交叉為例,當短天期移動平均突破長天期移動平均時,僅能代表近日的股價走勢平均下來終於高於比較長期的平均值,並不代表接下來股價就會出現明顯的漲勢。

這樣的情況讓我們在透過趨勢指標撰寫交易策略時,往往會有買進訊號過多,過濫的情況,如果我們把這樣的策略直接拿下去交易,極可能繳了大量的手續費及交易稅,而沒有賺到什麼錢。

於是,我們試著從歷史的經驗中,尋找當一檔股票出現明顯的波動方向時,往往伴隨著什麼樣的跡象,然後看看這些跡象,在趨勢指標出現買進訊號時,有沒有同步出現,如果有,代表這個趨勢改變的訊號,成功的機率大增。

我們可以試著把這些跡象集合起來,然後做出一個趨勢檢定器,用這個檢定器來過濾那些可能的假訊號。

例如老市場常說,當MACD黃金交叉時,如果伴隨著成交量突破10日均量,那就代表趨勢是真的,這裡的成交量突破10日均量,就是一個趨勢檢定器。

趨勢檢定器

這些年從我累積的看盤經驗裡,通常當一檔股票技術指標如果出現買進訊號時,我會同步check以下幾件事,然後再來判斷這個訊號是不是玩真的

1.總成交筆數有沒有增加?  有就代表交投變熱絡了,表示市場參與者變多了。

2.佔全市場總成交量的比重是不是在增加?  有增加才代表不是因為盤好才出量。

3.外盤的佔比是否增加? 外盤代表的是追價的意願,追價意願提高是上漲的重要動力。

4.主力是否買超?  籌碼被收集而不是被發散,是行情啟動的基本要件

5.波動幅度是否變大? 一灘死水的突破通常是假突破。

6.開盤委買有沒有增加? 如果增加代表新的買盤在進駐中。

於是我寫了一個腳本,在這腳本中我應用上面的這六個面象,做出一個計分器,如果每個面象近兩個交易日有任一天有明顯比以往平均值突出的數字,就加一分,然後如果總得分超過4分,代表通過這個趨勢檢定器的檢定。

input:Length(10);

input:ratio(20);
input:cn(4);

setinputname(1,"移動平均天數");
setinputname(2,"超出均值比率");
setinputname(3,"最低符合條件數");
variable:count(0);
value1=GetField("總成交次數","D");
value2=GetField("佔全市場成交量比","D");
value3=GetField("內外盤比","D");
value4=GetField("外盤均量","D");
value5=GetField("主力買賣超張數","D");
value6=GetField("真實範圍波幅","D");
value7=GetField("開盤委買","D");
count=0;
if countif(value1 >=average(value1,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(value2 >=average(value2,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(value3 >=average(value3,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(value4 >=average(value4,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(value5>0,2)>0
then count=count+1;

if countif(value6 >=average(value6,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(value7 >=average(value7,length)*(1+ratio/100),2)>0
then count=count+1;

if countif(volume >=average(volume,length)*(1+ratio/100),3)>0
then count=count+1;

if count>cn
then ret=1;

outputfield1(count);
setoutputname1("檢定值");

透過這個檢定器,我們可以過濾掉不少的假買進訊號

舉個例子

如果我們用昨天的收盤價來跑以下這個腳本

input:Length(20); //"計算期間"

LinearReg(close, Length, 0, value1, value2, value3, value4);
//做收盤價20天線性回歸
{value1:斜率,value4:預期值}
value5=rsquare(close,value4,20);//算收盤價與線性回歸值的R平方
if value1>0 and value5>0.2
then ret=1;

這個腳本跑出來的股票是屬於那種近20天股價呈現上昇趨勢的股票,結果符合上述腳本條件的股票共有286檔,這286檔今天盤中在平盤以上的共有128檔。

但如果加了趨勢檢定器,就如下圖,符合兩個條件的只剩109檔

101301

 

而這109檔今天在大盤下跌46點時,還維持在平盤上的,有69檔。

我們在寫趨勢型策略時,最怕的就是把no trend的歸成up trend,今天跟大家介紹這個趨勢檢查表,大家可以根據自己的經驗,調整內容,把那些no trend的通通都濾掉。

 

xqlite banner