Author Archives: 發財橘子

當沖策略之反常必有妖

在系統內建警示腳本裡,當沖交易型這個目錄中,有一個”突破波動範圍”的腳本,今天來介紹這個簡單的腳本,它的程式碼如下:

input:Length(20); setinputname(1,"高低計算期數");
variable:HighLow(0);
HighLow=high-low;
if HighLow>highest(HighLow[1],Length) then ret=1;

意思是如果最近一根bar盤中最高減最低,超過過去二十根bar的最大值,就請電腦通知你。

這個腳本很簡單,我個人是用在日線,搭配著成交量來用,我的邏輯是,每檔股票都有其股性,冷灶要熱燒前,一定會先加溫,而那種在加溫的股票,量會增加,高點減低點的差值也會變大,這就是我常說的反常必有妖。
各位可以參考附圖

時間格式介紹

日期時間的運算,一向是程式語言裡面的比較麻煩的一塊。

一來是格式怎麼表示,許多習慣是不同的,二來是加減的運算跟數字不太一樣。因為不是十進位的算法。

我們先來看看XQ的日期時間格式是怎樣:

目前XQ的用法是 2012/12/22,很明顯的年月日各用”/”符號分開

但這在程式運算必須使用字串,使用者可能不熟悉字串的運作。所以我們直接使用最簡單易懂的格式

就是yyyyMMdd八個數字的格式如: 20121222。

這樣一來至少我們在西元9999年12月31日前都可以固定日期肯定8位數的整數格式。

至於時間 我們也希望用類似的格式數處理所以我們用HHmmss

六碼的24小時制時間格式 134500 代表下午一點45分整。

從今天開盤起算的語法

我們在寫腳本時 常常會有開盤怎麼樣  或是開盤以來怎麼樣的想法  這時候要怎麼落實到腳本呢?

請看以下的語法

if date[1] <> date then
begin

這樣的寫法適用在日線以下的頻率

自訂函數之資料格式宣告

在編寫函數時,使用者需要傳入參數的變數類型,

目前支援三種,
Numeric數值,String字串,邏輯值TrueFalse。

細分是否傳值或傳址,是否為陣列、序列、或是

簡單型態預先宣告好的型態,Value類的可以
儲存數值,Condition可以儲存邏輯值。

共有二十種

資料格式宣告

詞 解釋
numeric Input:Name(Numeric);
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
Numeric表示數值型態。
=================
在函數裡面宣告變數時使用,定義被宣告的參數為數值,傳入參數數值。

numericarray Input:Name1[PA1,PA2,PA3,….](NumericArray);
Name1:宣告數值陣列的名稱。
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告數值陣列時使用,定義被宣告數值陣列的陣列名稱與陣列長度。

numericarrayref Input:Name1[PA1,PA2,PA3,….](NumericArrayRef);
Name1:宣告數值陣列的名稱
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
NumericArrayRef表示用傳址的方式傳回此陣列。
===============
在函數裡面宣告數值陣列時使用,定義被宣告數值陣列的陣列長度與數值。傳回陣列的位址。

numericref Input:Name(NumericRef)
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告變數時使用,定義被宣告的參數為數值,傳入參數的位址。

numericseries Input:Name(NumericSeries)
Name:參數時序的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
================
在函數用來宣告數值時序(時間序列,有時間前後關係序列,例如開、高、低、收、成交量等)

numericsimple Input:Name(NumericSimple)
Name:參數的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
NumericSimple表示單一數值。
=================
在函數用來宣告數值,且不是時間序列只有單一數值。

string Input:Name(String)
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
String表示字串型態。
=================
在函數裡面宣告變數時使用,定義被宣告的參數為字串,傳入參數字串。

stringarray Input:Name1[PA1,PA2,PA3,….](StringArray);
Name1:宣告字串陣列的名稱。
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告字串陣列時使用,定義被宣告字串陣列的陣列名稱與陣列長度。

stringarrayref Input:Name1[PA1,PA2,PA3,….](StringArrayRef);
Name1:宣告字串陣列的名稱
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
StringArrayRef表示用傳址的方式傳回此陣列。
===============
在函數裡面宣告字串陣列時使用,定義被宣告字串陣列的陣列長度與字串。傳回陣列的位址。

stringref Input:Name(StringRef)
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告變數時使用,定義被宣告的參數為字串,傳入參數的位址。

stringseries Input:Name(StringSeries)
Name:參數時序的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
=================
在函數用來宣告字串時序(時間序列,有時間前後關係序列,例如開、高、低、收、成交量等)

stringsimple Input:Name(StringSimple)
Name:參數的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
StringSimple表示單一字串。
=================
在函數用來宣告字串,且不是時間序列只有單一字串。

truefalse Input:Name(TrueFalse);
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
TrueFalse表示布林,邏輯值型態。
==================
在函數裡面宣告變數時使用,定義被宣告的參數為邏輯值,傳入參數邏輯值。

truefalsearray Input:Name1[PA1,PA2,PA3,….](TrueFalseArray);
Name1:宣告布林,邏輯值陣列的名稱。
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告邏輯值陣列時使用,定義被宣告邏輯值陣列的陣列名稱與陣列長度。

truefalsearrayref Input:Name1[PA1,PA2,PA3,….](TrueFalseArrayRef);
Name1:宣告布林,邏輯值陣列的名稱。
PA1:有幾個參數就表示該陣列有多少維度,三個就表示三維的陣列。參數則表示陣列該維的長度。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
TrueFalseArrayRef表示傳回陣列的位址。
===============
在函數裡面宣告邏輯值陣列時使用,定義被宣告邏輯值陣列的陣列名稱與陣列長度。

truefalseref Input:Name(TrueFalseRef)
Name:參數的名稱
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
===============
在函數裡面宣告變數時使用,定義被宣告的參數為邏輯值,傳入參數的位址。

truefalseseries Input:Name(TrueFalseSeries)
Name:參數時序的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
====================
在函數用來宣告邏輯值時序(時間序列,有時間前後關係序列,例如開、高、低、收、成交量等)

truefalsesimple Input:Name(TrueFalseSimple)
Name:參數的名稱。
名稱可以包含英文半形字元,底線,數字,英文的句點”.”。
名稱大小寫視為相同。
名稱第一個字不能為數字或句點”.”。
TrueFalseSimple表示單一邏輯值。
=====================
在函數用來宣告邏輯值,且不是時間序列只有單一邏輯值。

用週線反轉來確認主流股漲勢結束


今天跟大家報告一下,師父當年教我怎麼用週線判斷一檔股票的主流地位可能已經結束。

它的方法很簡單,各位請參照附圖,那就是週線上在前兩週出現噴出的情況,接下來的下一根不必管它,但最近一根的低點要比前一跟的收盤低到一定程度,師父認為如果週線上出現這樣的走勢,那就代表了一個反轉的訊號,當然如果這個最新收盤價愈接近前兩週的起漲點,那麼這個反轉的可信度就愈高,師父的說法是,從週線上看,在噴出後,代表要上車的都上車了,一旦下跌時殺到比前一週的收盤低超過一定比例,代表追高的都套牢了,接下來一有風吹草動,多殺多就會出現,所以師父就認為這是一種反轉的訊號。

以前不會有腳本,像這樣的反轉策略只能用目視判斷
現在有了XS,我就直接寫了一個腳本如下了

input:rate1(5);
input:rate2(3);
setinputname(1,"先前週線漲幅");
setinputname(2,"本週低點跌幅");
if high[2]>=close[3]*(1+rate1/100) and low < close[1]*(1-rate2/100)
then ret=1;

 

開盤後漲多跌少

各位可以參考附圖,這是昨天漲停的股票不同的分時走勢圖,各位可以發現,有的一開就漲停,有的是開高後整理後再拉一波,有的是先開高然後直接就攻上去,有的是階梯式向上。
型態雖有不同,但相同的是,漲的比較多,跌的比較小
所以大內高手再給我的兩個腳本
一個是開盤後m根bar中有n根上漲

input:RisingBars(5); setinputname(1,"開盤起至少上漲期數");
input:ContBars(10); setinputname(2,"第幾根K棒時提醒");

variable:KBarOfDay(0); KBarOfDay+=1; if date<>date[1] then KBarOfDay=1; //計算每天日內的Bar序數

if Date = CurrentDate and ContBars = KBarOfDay and //今天開盤起算到現
countif(close>close[1] and close > open,KBarOfDay) //收漲計算(包含開盤第一根是要漲)
>=RisingBars
then ret=1;

另一個是開盤後上漲的bar佔了幾成

nput:RisingBarsPercents(0.5); setinputname(1,"開盤起至少上漲期數比例");
input:ContBars(10); setinputname(2,"第幾根K棒時提醒");

variable:KBarOfDay(0); KBarOfDay+=1; if date<>date[1] then KBarOfDay=1; //計算每天日內的Bar序數

if Date = CurrentDate and KBarOfDay >2 and //今天至少要有3根Bar
ContBars = KBarOfDay and //今天開盤起算到現在第幾跟觸發
countif(close>close[1] and close > open,KBarOfDay)/KBarOfDay //收漲比例(包含開盤第一根是要漲)
>=RisingBarsPercents
then ret=1;

我個人的作法,是先用上一次給的腳本,用1分鐘線,找前四分鐘都上漲,三分鐘過後,換成第二個腳本,也是用1分鐘線,找前八分鐘有五根1分鐘K上揚的股票,9:08分之後,我就換第三個腳本,改成用2分鐘K,然後找開盤後2分鐘K,上漲比例超過七成的股票,一直用到收盤。

這樣用,會漲停的股票,除了一開盤就拉漲停,以及開盤後一直跌最後急拉漲停的股票之外,大部份會拉漲停的股票,都可以事先就發現。

尋找趨勢反轉的股票

以PVT反轉為例_朋友讓我用XS去挑原來下跌現在開始漲,原來沒量現在開始出量的股票。

坦白說,我個人比較喜歡挑的是強勢股,這種大跌過的,除非底打的很紮實,不然這種短線的上漲都可能只是反彈,不過朋友堅持V型反轉的也不少,所以我只好試著寫了下面這個腳本來試看看

variable: pvt(0);

If CurrentBar = 1 then
pvt = 0
else
pvt = pvt[1] + (close - close[1])/close[1] * Volume;
input:Length(20); setinputname(1,"下降趨勢計算期數");

value1 = linearregslope(PVT,Length);
value2 = linearregslope(PVT,5);

IF value1 < 0 and value2> 0 AND VOLUME>1000 then ret=1;

茲說明這腳本如下:
1.PVT是用當天的漲跌幅乘以當天的成交量,雖然可能出現大漲量縮但PVT仍向上的現象,但要連續數日都出現這種情況的機率並不高,所以我就拿PVT來當量價趨勢的衡量標準。
2.Linearregslope這個函數是指一個時間序列的區間線性回歸值的斜率。
3.如果長期斜率是負但短期斜率是正,代表趨勢已反轉。
不過朋友堅持說所有反轉的股票,這都是必要條件,對他來說,就算打底很久他也不在乎(這老小子口袋深),反而是停損好設(破底就砍),我想他說的也許有些道理(人家也是靠自己分析賺到錢的),所以我也就把這樣的腳本跟思考方式寫下來,覺得他有點道理的,也可以自己試試看。

我性子急,這種方法挑到的股票,我可能等打底打的更堅實了,一噴出我才進場。

投信開始押的冷門股

這兩日重新佈置書房,意外找到民國83年到86年間,我在擔任研究員及操盤人時候的筆記,翻閱筆記時,往事歷歷,現如今,以一小小散戶的角度,回頭再看看當時所寫下的種種,溫故知新,激盪出不少的想法。

今天先來介紹,當初我們怎麼挑到冷門股的。
以一家投信不到十五人的研究及操盤團隊(我們當初已經是前幾大了),對於那些冷門股,成交量小的股票,平常不會太留意,這種股票會進到我們投資組合,大約經過以下步驟
1.但每個月營收公佈時,我們會做一次整體的review,然後挑出營收出乎預期的股票
2.聯絡公司,了解異常的原因,如覺得有搞頭,與公司約定拜訪時間。
3.實地到公司拜訪,收集更多資訊。
4.撰寫研究報告,推薦基金經理人買進
5.經理人開單,委由交易室執行交易

由於上市公司發言人很忙,所以去拜訪時,當會安排與其他法人一起參與,所以每次開單時,交易室常會問我,call這家時有沒有其他法人在場,因為如果大家看完回來後都看好,可能會造成一窩蜂搶進的情況。

現在作為一個散戶,我無法知道法人去看了那幾家公司,會一窩蜂搶進那一檔股票。

但好處是投信每天的買賣數字會公佈,投信考慮到流動性及避免拉抬,每天買進單一檔股票的張數基本不超過當天成交量的一成(我忘了這是法令規定的還是內規)。

所以我寫了一個小小的腳本如下

value1=GetField("投信買張");
value2=lowest(close,10);//十日最低價
if value1>volume*0.1//投信買張超過成交量一成
and volume>1000//成交量大於1000張
and close<value2*1.1//收盤價距離近十日低點沒有漲超過一成
then ret=1;

透過這腳本我可以找到最近一日投信買進張數超過成交量一成,且成交量超過一千張,近十日還沒有大漲的股票,這樣的股票代表的,應該就是不只一家法人看上了。
曾經是法人,現在是散戶,找到舊筆記,讓我開始比較兩者在市場上的競爭優劣,法人有很多好處,但也有不少限制,散戶訊息落後,但了解法人的思維,操作可以比法人靈活,有機會還可以佔點便宜。

如何判斷企業在偏多? 企業偏多時什麼樣的利多股價才會漲

071202

 

 

老市場常說,上漲的股票,公司派基本偏多,但公司派偏多,股價不一定會上漲。
最近有兩個例子,證明公司派偏不偏多很重要
第一個例子是上圖的神達,這是公司很偏多的例子
第二個例子是下圖的祥碩
071203
這是市場主力及外資作多被公司派修理的最佳例子

我們在作交易時,公司派的心態是必須考慮進去的。

翻閱筆記,發現當年的我,經常在問自己,這家公司為何在此時此刻如此偏多?

我如何判斷企業偏多呢? 筆記上歸納了三點
1.主動找法人去聊天或直接開小型法說會。
2.對外發表未來N年要成長幾成之類的言論。
3.企業新聞見報率增加,且寫的都是好消息。

至於為何偏多,則整理出以下四個原因
1.準備發CB或現增籌資,希望壓低資金成本或減少股本膨脹的速度
2.企業有接到大單,景氣回升等利多且股價偏低。
3.和同業相比股價委屈,想要營造比價行情,這對企業形象及員工向心力都有正面作用。
4.老闆低檔補了很多股票,準備賺差價

就算現在無法去call公司,透過一些數據的分析,以及看報的經驗,我大概可以判斷有那些公司在偏多,為何偏多?

怎麼從中挑到可以操作的股票? 我以前的筆記歸納了四點
1.利多的內容能不能被市場認同?
2.離大股東的成本有多遠?
3.法人上車的情況
4.籌碼安不安定?

其中特別以第一點最重要。
什麼樣的利多最能受市場認同呢?

那就是特定原因所造成的未來EPS會超過市場預期,以未來EPS來估算目前的本益比,在八倍以下,且未來很長時間每個月的營收都會明顯成長。

至於特定原因,有可能是搶到大單,有可能是產品供不應求要大漲價,有可能是新產能即將開出,有可能是研發已久的產品要正式商品化。

我以往最常發生的錯誤是,過度相信公司所提供的數據,沒有花太多心思了解市場的認同度,結果把資金押在不被認同的行業,或是不被認同的公司,結果雖然股票也漲,但漲幅不如那些被市場普遍認同的股票,後來等到營收盈餘公佈後,我的持股數字沒有別人的漂亮,市場開始賣掉表現次佳而去追高表現最佳的股票。

十多年後,我發現,大股票現在是外資說話,企業就算覺得股價委屈,也要先取得外資的認同才會漲。

所以上面列的這些原則,僅能適用於中小型股票了。

現在,作為一個散戶,我透過XS所找到的一些股票,我還是會問自己,這公司現在偏多嗎?

因為就算技術線型出現買進訊號,我覺得,有企業主跳出來搖旗吶喊,更會吸引到市場的目光,至於吶喊的內容市場認不認同,就看這個企業主的信用好不好? 產品符不符合未來趨勢? 業績能不能如期開出來? 如果都是yes,那我就會更有信心進場。

不明買盤指標

朋友發現,最近漲的兇的股票,起漲時從法人進出挑不到,從主力進出也看不出來,一直到急拉了才被發現,那時候都追不下手了。
他問我有沒有提早知道更好的方法,來提早觀察到飆股發動前的蜘絲馬跡。

我試了幾種方法,效果一般,後來作了一條簡單的指標,效果意外的好。

我把這指標稱為不明買盤指標
腳本如下:

input:period(3);
setinputname(1,"均線期間");
value1=GetField("法人買張");
value2=GetField("當日沖銷張數");
value3=GetField("散戶買張");
value4=volume-value1-value2-value3;
value5=value4/volume;
value6=average(value5,period);
plot1(value6,"不明買盤比例");

這腳本就是算出每天成交量中,扣除法人買進張數,當沖張數及散戶買進張數後的其餘成交量,佔總成交量的比例。

我發現這個比例在飆股起漲前,會從兩成以上一路提高到接近四成或四成以上,一直到漲上去之後,各方勢力介入才會降下來(見附圖)