Author Archives: 發財橘子

借券指標

在六月底上線的那個XQ版本中,Xs 可以拿來運算的欄位多了不少,今天就來介紹跟外資借券有關的一個欄位~借券餘額張數(SBLbalance)。

最簡單的用法是把這個值當成一個指標,畫成圖

請參照兩個附圖。

然後我們會發現,

1.這個數值跟股價,特別是外資常進出的股票,往往是呈現反方向的波動。

2.當這個數字在一兩天內急速的減少,往往代表外資由空翻多。

這個數字本身跟借券賣出餘額不大一樣,借券賣出餘額是要借還要賣才算數,借券餘額張數則只要借出去的就算,借了伺機賣而還沒有賣的,都不算。
所以當這個數字急遽減少時,代表外資想賣的不賣了再加上賣的還回來了。

先前我們在看外資買賣超時,常看到一堆權值股買超很大,股價卻不大會動,後來問了朋友,才知道原來很常的時候,這只是外資在作basket trade,pair trade或是long short操作時,慣用的手法,單純從外資買賣超這張表,看不出外資真正的意圖,再加上有些公司派這些年開始跟外資簽一些option的東西,以及透過外資戶頭買賣股票,也就是俗稱的假外資,更讓外資進出表的參考價值大打折扣。

但現在如果我們拿這個欄位跟外資的買賣超搭配一起看,找出借券餘額張數在下降而外資買超在成長的股票,那就應該可以找出外資心有所屬的股票了。

這樣的腳本不難寫,大家可以發揮各種創意。

這樣的腳本,適用的對象主要是外資經常會進出的股票,所以最好加上一條外資買進及賣出的次數頗頻繁的條件比較好。

多頭反攻訊號:紅棒吞噬黑棒

我們今天來看一種型態:紅棒吞噬黑棒。通常這樣的型態出現,都會被視為是多頭反攻的訊號!!

先定義多頭吞噬: 當股在在月線之上時,昨日的收盤價低於開盤價收黑K棒,今日開低且下探低點但盤中漲過昨日高點且收在昨日開盤價之上,是為多頭吞噬!

過去這一年來發生這樣型態的次數,經過XS計算總共有735次,我們分別統計了發生這樣的情況後,從隔日開盤價起算,到第5,10,20日後的收盤價,看看損益的分佈!

我們從圖中明顯可以看到,在這樣的情況發生後,平均報酬率呈現一個穩定上升的走勢,這果然驗證了我們在印象中多頭強力表態的特徵!

接來來就是用腳本來寫出來,可以在盤後或開盤前執行,這樣就能在一早得到一個有利的訊號:

if C> average(c,20) and C[1]<O[1] and C> O[1] and O < C[1] and L < L[1] and H > H[1] then ret=1;

hhll

成就億萬身家的操作之鑰:開盤價

最近十年有一批新的股市大戶在興起 ,這些人所仰仗的方法 ,現在市場上也幾近眾所皆知了 :追鎖漲停 ,隔天開高賣出 !! 就這麼一招, 拱出了這群人的百億身價 !

追買漲停已經就是當日最高價了 ,那獲利的關鍵點在哪 ? 就是隔天的開盤價 !!這才是真實的獲利來源 !!

簡而言之 :掌握開盤價 ,是可換得億萬身家。

我們透過 XS大量測試並抽絲撥繭 ,發現了一件和隔日開盤價息息相關的因素 :當日收盤價和最高價。

如下圖 : 當日收盤價和當日最高價是同一個價位的時候 ,隔日開盤價呈現了一個明顯的偏離 :開高所佔比幾乎是開低的三倍之多 ,分別是 37% 與13% 。但開平盤仍佔了半數 ! 這樣還是不具備交易誘因的 ! 需要利用XS 進一步分析來取得獲利 !

篩選過許多可能條件 ,XS 系統顯示, 當天長紅棒的漲升幅度 ,大大影響了隔日開高盤的幅度 !!
定義長紅棒幅度 : 收盤價除以開盤價的漲幅百分比。
我們把這個幅度分成五份 ,分別為 : A1: 紅棒長1-2% 、 A2:紅棒長 2-3% 、A3: 紅棒長3-4% 、 A4:紅棒長 4-5% 、A5: 紅棒長>5% 。

由 “今日長紅棒幅度分析圖 ” 中, 我們明顯可以和得出來 ,當長紅棒的幅度越大 ,即從 A1到 A5, 開平盤次數大幅下降 ,開高次數持續上升。到了 A5時 ,開高 1%以上的筆數更是大幅激增 ! 而開低的筆數幾乎是全部躺平不見其影 !
我們得知了一件事 :長紅棒幅度大於 5%且收在最高價者 ,是開高真強者 !!

接下來 ,把 A1到 A5的事件依獲利機會作區分並統計 ,開高者有獲利機會 ,而開平低盤者則無。
如圖顯示 ,當紅棒長度越長 ,可獲利機會由三成快速激升至七成 !!

這時只要善用 XS即時計算跳出交易時機 ,下一個大戶 ,很快又會誕生 !!

o3

o2

o1

開盤價在策略中的應用

程式交易始祖:賴利威廉斯,相當倚重開盤價在策略中的應用,我們今天利用大師的方法來驗證一下台股的開盤現象!

根據大師的說法,開盤價分成四個區域,分別是:
1.開高過昨高,今天開盤的價格,超過昨日的最高價,是最強勢的開盤!
2.開漲不過昨高,今天開盤價大於昨天的收盤價,但是不大於昨天最高價!
3.該跌不過昨低,今天開盤價小於等於昨天收盤價,且大於等於昨天最低價,屬於偏弱格局
4.開低跌過昨低,今天的開盤價小於昨天的最低價,是相當弱勢的開盤!

我們先統計看看,最近一年來,全部上市櫃普通股的開盤價,在各區的分佈比例,如下圖:
open

open1
明顯可見的是,雖然過去一年來台股呈現了多頭走勢,但開低比例卻是偏高的54%(第3,4區總和)!!這部分我們之後再做進一步討論!

我們利用XS把這四個區域的資料統計起來,用收紅能力來評估開盤價這四個區域和收盤價的關係。

定義收紅能力:將收盤價除以開盤價後減去1,取百分比。若此值大於0,則會呈現實體紅K棒,若此值小於0,則會呈現實體黑K棒。

將這四個區域裡的所有資料都用收紅能力計算過一輪,標準化後放在一起比較看看,是不是有什麼不一樣的地方?

如圖可以看到四條標準分佈線。對於第2,第3區而言,多數的收盤價看起來都落在開盤價附近,並沒有特別大的變動差,但比起第3區,第2區有些偏左邊傾了!

接下來才是我們的重點:開在第1區和第4區的比較。

這兩個區域很有趣,開高的那邊,明顯往左邊黑K區域偏離,而開低那邊,也是明顯往右邊紅K棒偏離,而且紅棒平均拉昇幅度,比黑K棒跌幅還高出4成多!! 這樣來看,開偏低買進搶短的贏面,是比開高放空還來得高上一些!

我們透過這樣的資料分析,明確定義出開高收黑K與開低收紅K的操作方式,是等同把每一種具有相當把握的型態,轉換成XQ自動判讀並跳出的訊號,從而大大提升進出場效率!!

交易活躍度指標

我們在操作的時候,最常出現的問題是:當個股轉強時,我們分不清楚這是波段還是小反彈,分不清楚是大行情還是只有小漣漪。

我師父當年為了解決這個問題,叫我用excel跑一些數據,他說,反常必有妖,要看一檔股票股價有沒有大行情,不光看他有沒有持續上漲,還要看他有沒有出現結構性的轉變,這種結構性的轉變,可以從五個地方來看,
1.總成交筆數
2.相對大盤強度
3.外盤均量
4.主動買力
5.開盤委買張數

師父認為,要分辨一檔股票是準備發動攻勢,還是僅僅只是隨著大盤稍為表現一下,主要就是看這幾個方面有沒有出現大變化

師父的這個理論,在有了XS之後,我一直想要把它寫成程式,這次XS改版,同事們幫我把這幾個欄位都變成可以用Getfield語法拿來計算的數字,所以我就寫了一個"交易活躍度指標"

這個指標的邏輯是這樣,上述五項如果超過季平均三成,就算一分,所以總分是五分,腳本如下,附圖是我用這指標來看一些個股時的對應圖,我覺得還不錯用,可以幫我濾一些假訊號

input:days(66);
input:ratio(10);
setinputname(1,"移動平均天數");
setinputname(2,"超出均值比率");
var:count(0);
value1=GetField("當日總成交筆數");
value2=average(value1,days);
value3=GetField("強弱指標");
value4=average(value3,days);
value5=GetField("外盤均量");
value6=average(value5,days);
value7=GetField("主動買力");
value8=average(value7,days);
value9=GetField("開盤委買");
value10=average(value9,days);
count=0;
if value1>=value2*(1+ratio/100)
then count=count+1;
if value3>=value4*(1+ratio/100)
then count=count+1;
if value5>=value6*(1+ratio/100)
then count=count+1;
if value7>=value8*(1+ratio/100)
then count=count+1;
if value9=value10*(1+ratio/100)
then count=count+1;

plot1(count,"交易活躍度指標");


各位可以利用這些欄位來做出更有價值的訊號
各位可以利用這些欄位寫出更有價值的指標或選股雷達

當沖策略之反常必有妖

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

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;