Author Archives: 發財橘子

圖說技術指標的設計方式與背後的思維(三)

在討論過用開高低收成交量所衍生出來的各種技術指標之後,今天我們來討論趨勢型指標的思維與設計方式。

趨勢型技術指標在市場上被廣泛使用,像移動平均線,MACD等等大家耳熟能詳的技術指標都屬於趨勢指標。

趨勢指標最早被當成一個主流派別,應該是來自鼎鼎大名的道氏理論,道氏理論的核心是因為投資人趨吉避凶的心理,且具有心理學上的增強效應,市場會在沿著主要趨勢波動,我們可以透過股價的波動方向,來判斷市場的多空趨勢。

基於這樣的理論,技術分析者使用移動平均線等等的指標,來更清晰的觀察市場的主要趨勢。

最常被使用到的,是以下幾個指標

一,移動平均線

一般的移動平均線,就是把平均線期別裡的每個收盤價加總起來除以天期,XS裡的average函數就是這麼算的,腳本如下

SetBarMode(1);

input:thePrice(numericseries); //"價格序列"
input:Length(numericsimple); //"計算期間"

if Length > 0 then
Average = Summation(thePrice, Length) / Length
else 
Average =0;

因為是這麼計算出來的,所以很多分析師會用平均成本來介紹移動平均線,如果不同天期的移動平均線糾在在一起,我們會說短中長期的持股者的平均成本都差不多。

二,加權移動平均線

簡單的移動平均線最常被垢病的,是把過去的價格跟現在的價格視為一樣重要,這樣在價格波動時,可能反應不夠靈敏,所以有人主張,應該不能用簡單平均,要用加權平均來算移動平均線,給予最新的價格較高的權重。XS裡有一個函數Xaverage就是這樣的作法。

SetBarMode(2);

input:thePrice(numericseries); //"價格序列"
input:Length(Numeric); //"計算期間"

variable: Factor(0);

if length + 1 = 0 then Factor = 1 else Factor = 2 / (Length + 1);

if CurrentBar = 1 then
XAverage = thePrice
else
XAverage = XAverage[1] + Factor * (thePrice - XAverage[1]);

這樣的作法大家在自訂指標時可以拿來用,其中的Factor要怎麼訂,也是可以多方嚐試的。非常有名的MACD就是一個運用加權移動平均方法計算出來的指標。

三,MACD

我們先來看看這個指標的函數計算方式

SetBarMode(1);

// MACD function
// Input: Price序列, FastLength, SlowLength, MACDLength
// Output: DifValue, MACDValue, OscValue
// 
Input: Price(numericseries), FastLength(numericsimple), SlowLength(numericsimple), MACDLength(numericsimple);
Input: DifValue(numericref), MACDValue(numericref), OscValue(numericref);

DifValue = XAverage(price, FastLength) - XAverage(price, SlowLength);
MACDValue = XAverage(DifValue, MACDLength) ;
OscValue = DifValue - MACDValue;

從上面的腳本可以發現,MACD是把不同天期的加權移動平均線相減後再作一次加權移動平均。

以下圖為例,市場最常用的MACD參數是12,26,9

也就是計算12日的加權移動平均,26日的加權移動平均,然後前者減後者之後再計算九日的加權移動平均

四,TRIX三重指數平滑移動平均標

如果要說把加權移動平均的概念運用的最到位的,TRIX指標應該是其中一個,它的計算公式如下

Input: price(numericseries), length(numericsimple);

value1 = XAverage(price, length);
value2 = XAverage(value1, length);
value3 = XAverage(value2, length);
	
if CurrentBar = 1 then
	TRIX = 0
else
begin
    if value3[1] <> 0 then
        TRIX = (value3 - value3[1]) / value3[1]
    else
        TRIX = 0;
end;

可以看得出來,它是把股價,用同一期別,加權移動平均線計算了三次,所以會成為很平滑的線,以下圖為例,就是畫出9天跟15天的TRIX,線圖都非常的平滑,大方向也看的很清楚

今天跟大家介紹的是利用移動平均與加權移動平均的算法來掌握股價的大趨勢,運用這個方法來發展的自訂指標有非常的多,大家可以自己來試看看。

 

xqlite banner

 

圖說技術指標的設計方式與背後的思維(二)

前一篇提到透過最近兩根開高低收8個值來設計技術指標,今天延續前一篇的概念,但是把成交量這個元素也加進來,來介紹這八個值加上成交量所發展出來的技術指標。

提到成交量,大家最耳熟能詳的應該是能量潮OBV指標,這指標的腳本如下

variable: obvolume(0);

if CurrentBar = 1 then
	obvolume = 0
else
  begin	
	if close > close[1] then
		obvolume = obvolume[1] + volume
	else
	  begin
		if close < close[1] then
			obvolume = obvolume[1] - volume
		else
			obvolume = obvolume[1];
	  end;		
  end;
  
Plot1(obvolume, "OBV");

這裡是用到昨天跟今天的收盤價,然後再把成交量加進來運算。

另外一個把各價位跟成交量結合的技術指標叫作Chaikin Money Flow,它的腳本如下

variable:ad(0),chai(0);
if h-l<> 0 then 
ad=((c-l)-(h-c))/(h-l)*volume;
input:length(5);
value1=summation(ad,length);
value2=summation(volume,length);
if value2<>0 then 
chai=value1/value2;
plot1(chai);

這個指標是把收盤價-最低價與最高價-收盤價相減去除以最高價與最低價的差,然後再乘以當根的成交量,作加總,再去除以區間的成交量,從計算公式來看,這個指標可以掌握當根K棒中多空力量是那一邊佔上風,下圖是台積電的對照圖,我們可以從圖中了解到多空力道的轉折點,以及盤整時,真實的多空力道是那一邊佔上風。

這個指標重視的是當根K棒的多空力道變化,但沒有考慮到前後根K棒價格的變化,有另一個技術指標Money Flow Index則是把成交量跟前後根的變化一起考量,這個指標的計算腳本如下

Input: Length(6);
variable: tp(0), tv(0), utv(0), dtv(0), pmf(0), nmf(0), mfivalue(0);

SetInputName(1, "天數");

tp = TypicalPrice;
tv = tp * Volume;

if tp > tp[1] then
begin
utv = tv;
dtv = 0;
end
else
begin
utv = 0;
dtv = tv;
end;

pmf = Average(utv, MinList(CurrentBar, length));
nmf = Average(dtv, MinList(CurrentBar, length));


if CurrentBar < Length or (pmf + nmf) = 0 then
mfivalue = 50
else 
mfivalue = 100 * pmf /(pmf + nmf);

Plot1(mfivalue, "MFI");

它是先把收盤價+最高價+最低價除以三,計算出一個中價(typicalprice),然後把中價乘以成交量,然後再視中價與前一根中價的價差,然決定中價乘以成交量是要視為上漲量還是下跌量

然後再計算上漲量與下跌量的移動平均,最後計算上漲量的移動平均值佔整體的比例,下圖是台積電的MFI對照圖

這是一個以50為多空分界的指標。

 

當我們在自訂指標的時候,把最近兩根的成交量跟開高低收共十個值來做運算,的確可以衍生出各種的技術指標,當我們了解背後代表的意義,就可以把不同的指標一起整合成一個交易策略,如果只是拿現成的指標人云亦云的使用,那麼就不具備了資訊領先的優勢。

 

之後我會繼續跟大家進一步分享其他的技術分析指標設計的背後概念。

 

xqlite banner

 

 

圖說技術指標的設計方式與背後的思維(一)

技術分析分成很多派別,背後各有其思想基礎,近來用XS想要發展一些自訂指標,來建構自己的技術分析體系,所以作了不少的嚐試,這系列是來跟大家分享我的心路歷程

今天先來跟大家介紹的,是技術指標發明者 ,如何透過單根K棒裡,開高低收的四個相對位置,來偵測多空雙方的力道拉扯。

就像下面這張圖

我們可以把當根K線的開高低收四個點位,配合前一根的開高低收,定義出各式各樣的多空數據

例如,累積/派發線這個技術指標,就認為

一,收盤價-最低價: 當根K棒裡,多頭的淨力道

二,最高價-收價盤:當根K棒裡,空頭的淨力道

三,最高價-最低價:當根K棒裡,多空爭戰的整個戰場區域

所以當天的淨多空力道比例是((收盤價-最低價)-(最高價-收盤價))/(最高價-最低價)

所以累積/派發線指標的腳本就可以撰寫如下

VAR:ADL(0);
if currentbar=1 then 
adl=((close-low)-(high-close))/(high-low)*volume
else if high<>low then 
adl=adl[1]+((close-low)-(high-close))/(high-low)*volume
else 
adl=adl[1]+((close/close[1])-1)*volume;
plot1(adl,"累積派發線");

用這個指標畫成的圖就如下圖

類似的作法,也出現在大家常用的DMI指標上。

如上圖,DMI指標的計算,是先定義了三個數值

一,Truerange真實波動區間,如上圖右邊的概念,代表了當根K棒跟前一根之間最大的波動區間。

二,+DM : 如上圖左邊,如果最新一根BAR的高點比前一天的高點更高,那+DM就是最新一根K棒的高點減前一根的高點,否則就是零,這意思是+DM代表了最近一根K棒多頭所新攻克的區域

三,-DM: 同理 ,就代表最近一根K棒空頭所新攻下的區域。

在計算DMI時,要先比較+DM與-DM的值,那個數字大,另一個數字就=0

+DMI這數據就是+DM的移動平均/真實波動區間的移動平均

-DMI則是-DM的移動平均/真實波動區間的移動平均

從計算公式來看,就了解DMI指標是來計算每一根K棒多頭新攻下的城池VS空頭新攻下的城池的對應數據。

這種拿最新一根K棒的開高低收與前一根K棒的開高低收等八個數字對應關係所衍生的技術指標非常非常的多,大家在自訂指標時,可以參考前人的思維邏輯再來加以衍生。

接下來就跟大家分享兩個這類的指標

一,錢德動能震盪指標

Input:length(10, "天期");
variable: SU(0),SD(0); 
if close >= close[1] then 
SU = CLOSE - CLOSE[1] 
//上漲值 
else 
SU = 0; 
if close < close[1] then 
SD = CLOSE[1] - CLOSE 
//下跌值 
else 
SD = 0; 
value1 = summation(SU,length); 
//區間上漲值的總合 
value2 = summation(SD,length); 
//區間下跌值的總合 
value3 = (value1-value2)/(value1+value2)*100; 
//區間上漲值總合減下跌值總合的結果當分子
//兩者的總合當分母 
plot1(value3, "CMO");

這裡用的就只是最近兩期的收盤價

二,相對強度(RS)

類似把一段區間上漲與下跌值相加總之後再作運算的,最普遍被應用的是RSI這個指標,這個指標是由RS相對強度這個概念而來,以下是相對強度的腳本

SetBarMode(1);
//指定為simple函數
input: price(numericseries), length(numericsimple); 
variable: sumUp(0), sumDown(0), up(0), down(0);
if CurrentBar = 1 then begin
sumUp = Average(maxlist(price - price[1], 0), length); 
//第一根的sumUP是過去一段期間內上漲點數合的平均值
sumDown = Average(maxlist(price[1] - price, 0), length); 
//第一個的sumDown是過去一段期間內下跌點數合的平均值
end else begin
up = maxlist(price - price[1], 0);
// up是如果當天上漲時的上漲值
down = maxlist(price[1] - price, 0);
//down是如果當日下跌時的下跌值 
sumUp = sumUp[1] + (up - sumUp[1]) / length;
//sumUp是前一期的sumUP+最近一期上漲值(如果上漲的話)
sumDown = sumDown[1] + (down - sumDown[1]) / length;
//sumDown是前一期的sumDown+最近一期下跌值(如果下跌的話)
end;
if sumDown = 0 then RS = 0 else RS = sumUp /sumDown;

這是個函數腳本,用這個函數,RSI的計算公司如下

所以基本上,RSI這個指標也是K棒開高低收四點所衍生出來的技術指標,它用的是當根收盤價與前一根收盤價的差值。

從上面這些例子,我們可以了解到,有一派的技術指標,是根據K棒開高低收的相對位置,來研判多空勢力的變化,大家可以根據這樣的思維,自己定義多空的不同力量,發展出自己的自訂指標。

 

xqlite banner

歐沙納希價值型交易策略

山雨欲來,面對未知的世界,我們能做的,就是相信那些我們一直相信的,對於價值型投資者來說,相信的就是當股價遠低於合理估值,且重新贏得市場青睞時,就是最佳進場點。

那麼什麼情況下算是股價遠低於估值呢? 歐沙納希有兩條標準

一,本益比夠低

二,營收市值比夠低

 

那麼什麼是重新贏得市場青睞呢?

我用的是暴量剛起漲這個腳本

Input: day(30,"日期區間");
Input: ratioLimit(7, "區間最大漲幅%");

Condition1 = C=highest(C,day);
//今日最高創區間最高價

Condition2 = V=highest(v,day);
//今日成交量創區間最大量

Condition3 = highest(H,day) < lowest(L,day)*(1 + ratioLimit*0.01);
//今日最高價距離區間最低價漲幅尚不大

Ret = Condition1 And Condition2 And Condition3;

這個腳本我很常用,由於是價值型投資,所以我參數用的是較長天期

我根據上述的思維,訂出了一個選股策略

拿這個選股策略去回測,停損停利都設7%, 過去三年勝率是有六成,在市場大跌回升階段,勝率更有七成。所以我們可以先把那些市值營收比及本益比夠低的公司先挑出來,後續再看看這些股票會在那裡止跌打底。下圖是我拿符合上面兩個條件再加上每年EPS都大於1元這個條件所挑出來的股票。

當市場變化莫測時,我們只能相信那些過去我們印證過覺得值得相信的事情,這也是為什麼我們要學習把想法寫成語法,拿歷史資料去回測的原因,因為只有這樣做,才能找出那些是高機率會不斷發生的事情。

xqlite banner

在多變的世界裡,尋找一些靠譜的事

肺炎肆虐下,驚弓之鳥下過度反映的市場情緒,消息面主導了盤勢,我趁著不能外出,重新整理一些比較禁得起時間考驗的交易策略,今天來跟大家介紹一個我入行以來,一直深信不疑的事情。

我入行以來,讓我賺最多錢的股票,是那些團隊很不錯,過去公司也經營的很好,但原本的成長動能受限於外在環境,或是市場飽和而停滯,新的成長動力還沒有出現,所以有些年股價表現的不如人意,但只要給這些認真努力的團隊一點時間,他們終究會找到新的成長動力,股價也有機會重返榮耀,這種劇情是最振奮人心,找到這樣的股票也帶來豊盛的報酬。

我首先用以下的選股策略來找出初步符合條件的股票

其中過去n年有一年eps超過m元的腳本如下

input:period(7,"年期");
input:l1(4,"eps");
value1=GetField("每股稅後淨利(元)","Y");
if trueany(value1>=l1,period)
then ret=1;

過去n天股價都小於m元的腳本則如下

input:period(400,"天期");
input:l1(30,"股價上限");
if trueall(high<=l1,period)
then ret=1;

再搭配股本的限制條件,組合成初步的選股條件

我用這個腳本,搭配暴量剛起漲的價量條件,所組成的選股策略,過去兩年的回測報告,表現的很穩定

但其實這個策略還需要從裡頭去仔細檢視這些公司有那一些還能保有強大的經營團隊,有那一些還競競業業的正在努力的創造下一個新的成長動力。

外在環境雖然充滿變數,但向上提昇的力量如果能眾志成城,就是我們可以長期留意的標的。

值此特別的時日,跟大家分享比較長線的研究方向。

關於極短線交易策略撰寫上的一些小技巧(一)

先前介紹我撰寫當沖腳本的流程,今天接著來跟大家介紹一些我自己最常卡關的地方,以及公司高手們的寫法範本,讓大家可以做個參考,介紹卡關的部份之前,先列出我研究過去的分時圖之後,整理的一些想要寫成腳本的敘述

  1. 開盤下跌後馬上站上平盤且急拉後只回檔一兩檔即再創新高
  2. 10點之後帶量突破先前的箱型盤整區,且拉回幅度不大後再創新高
  3. 預估量爆增且大戶買盤成交比例很高
  4. 10點之後創當日新高,也創波段新高
  5. 開高後大盤下跌仍不跌且10點後創新高
  6. 開盤前三分鐘有一分鐘K拉超過2%
  7. 開高後長時間沒有拉回,12後創新高
  8. 開盤後緩步攻堅,一底高過一底,一峰高過一峰
  9. 開盤即暴量跳空突破前幾日盤整以來的高點且未拉回
  10. 開高拉回後迅速創新高
  11. 開盤五分鐘K棒連三紅
  12. 日線盤整結束,當日開高後,底部一路愈墊愈高
  13. 急拉後回檔然後再急拉創高
  14. 開高後多次探底後回升
  15. 開高後不拉回嚐試回補之前日線的跳空下跌
  16. 開盤急拉漲勢結束後現在拉回整理幅度為漲幅的1/3
  17. 沒量的股票突然暴大量急拉
  18. 當天已衝過前一日的高點
  19. 上攻走勢很陡之後拉回整理長期未破底
  20. 開高後拉回整理後突破當日高點
  21. 大跌後,開高直接跳空突破前一天高點且拉回未踫觸到前一天高點
  22. 開盤大跌,但超過10分鐘沒有再破底且一直創當日新高
  23. 開盤大跌但09:30之前就站回平盤
  24. 早盤有急拉,雖然之後有明顯的拉回,但接下來底部愈墊愈高
  25. 外盤量遠超過正水準

我在想要描述這些情況時,最常卡關的有以下的狀況,我請了公司同仁寫了範本給我參考,以下是這些範本的說明

卡關一: 在同一天裡有個值要一直累計該怎麼寫?

例如想要累計今天大買單或大賣單的成交金額或張數,想要累計外盤成交的筆數之類的,這是我們在寫極短線腳本時會常用到的,但卻不知道怎麼寫,後來我請了同事給了我一個範本,他寫的是今天大單買進超過N次的腳本

input: atVolume(100,"大單門檻");
input: LaTime(10,"大單筆數");
input:TXT("須逐筆洗價","使用限制");
settotalbar(3);
variable: intrabarpersist Xtime(0);
//計數器
variable: intrabarpersist Volumestamp(0);
Volumestamp =q_DailyVolume;
if Date> date[1] or 
Volumestamp = Volumestamp[1]
then Xtime =0; //開盤那根要歸0次數
if q_tickvolume > atVolume
//單筆tick成交量超過大單門檻
and GetQuote("BidAskFlag")=1
//外盤成交
then Xtime+=1; 
//量夠大就加1次
if Xtime > LaTime 
and close>close[1]*1.01
then 
begin
ret=1; 
Xtime=0;
end;

這個腳本可以在當個股外盤成交超過100張的次數超過10次時即發出警示訊號,這個腳本的眉角有幾個

1.宣告一個intrabarpersist的變數

關於intrabarpersist的意義及寫法,請參考這個網頁

使用這個語法,在同一根K線裡,逐筆的每個TICK帶來的新變化都會更新該K棒裡的特定宣告變數值,這麼一來,當根K棒裡每個TICK的數據都可以被累計。

2.開盤時計數器歸零的寫作技巧

variable: intrabarpersist Volumestamp(0);
Volumestamp =q_DailyVolume;
if Date> date[1] or 
Volumestamp = Volumestamp[1]
then Xtime =0; //開盤那根要歸0次數

這一段的意思是當日量沒有再增加或日期不等於前一筆的日期時,就代表是隔一日的第一筆,這時候計數器就要歸零

3.計數器的寫法

Xtime+=1這樣的寫法,其實是Xtime=Xtime+1的快速寫法,也就是符合前面if的條件時,就加1的意思。這個寫作技巧在計算分數或次數常會用到。

結合這三個撰寫的技巧,就可以在日線的計算的基礎下去累計每個tick的相關數據。

卡關二:計算開盤到現在一共是多少根bar

我們常會寫一些腳本是屬於那種要從第N根1分鐘線開始作計算的腳本,例如開盤八法是去計算前三根五分鐘線的漲跌情況,我的同事寫了一個開盤前三根都是紅K棒的腳本給我

if barfreq <> "Min" or Barinterval <>1 then RaiseRuntimeError("請設定頻率為1分鐘");
variable:BarNumberOfToday(0);
if Date <> Date[1] then
BarNumberOfToday=1
else
BarNumberOfToday+=1;{記錄今天的Bar數}
if barnumberoftoday=3 then begin
//今天第三根1分鐘K,也就是開盤第三分鐘
if trueall(close>=close[1],3)
//連三根K棒都是紅棒
and volume>average(volume[1],3)*2
//成交量是過去三根量平均量的兩倍以上
and close=highd(0)
//收最高
then ret=1;
end;

這個腳本主要是透過計數器,去計算現在是分鐘K的第幾根,可以用在不同頻率的分鐘K

另外這個腳本也示範了策略指定頻率時要怎麼寫

卡關三:從那一根開始算起,以及第一根要往前引用多少根

我在寫極短線腳本時,經常用到1分鐘線,這時候常會想要確定要拿多少跟K棒來算,以及每一根K棒是計算的第幾根,還有第一根如果要計算像十根移動平均時,必須再往前多拿九根來算,這些到底在腳本上要怎麼設,我常弄的迷迷糊糊,後來我同事就寫了一個範本給我

input:Length(100,"計算期數");
input:Ratio(0.5,"突破幅度%");
input:RRatio(1.5,"盤整區間幅度%");
input:TXT1("僅適用5分鐘線","使用限制");

settotalbar(3);
setbarback(Length);

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

variable: RangeHigh(0);
variable: RangeLow(0);
RangeHigh=highest(close[1],length);
RangeLow=lowest(close[1],length);

if RangeHigh[1] < RangeLow[1] * (1+ RRatio/100) then begin
if Close crosses over RangeHigh*(1+Ratio/100)
and volume>average(volume,length)*1.5
then ret=1;
end;

 

這個腳本用到兩個內建函數,一個是用來設定資料讀取範圍的settotalbar,以及設定最大引用範圍的setbarback。這兩個函數的意義,可以參考這一頁

在這個腳本裡,為了要表達糾結均線,所以要拿過去100根的5分鐘K來計算,所以必須把setbarback設為100,但要觀察現在的K棒有沒有突破這糾結的均線,只要看最近幾筆,所以settotalbar設的很短。

透過這兩個函數,我們就可以框定這個腳本要從最近一根之前的第幾根bar開始計算起,然後要往前引用多少根的資料,把每根bar標示號碼之後,就可以用currentbar這個函數來表達現在要的是第幾根,例如以下的腳本是去計算加權平均值,這時候第一根必須引用收盤價作為加權平均值,所以腳本可以如下面這麼寫

if CurrentBar = 1 then
    XAverage = Close
else
    XAverage = XAverage[1] + Factor * (Close - XAverage[1])

透過Currentbar這個函數,就可以宣告要從第幾根bar開始計算,透過這三個函數,我們就可以很清楚知道要計算的這個時間序列,會從那裡開始被計算,要標定任何一根的特定數據,都可以用currentbar=n來處理,這樣我們就可以楚理這個時間序列裡的每個數據而不會對錯位置。

卡關四:設定某特定時點作為結算點

我在寫極短線腳本時,會希望設定一些特定時間的關卡點,例如09:15或是10點,是午飯時間如12:00之類的,我們同事寫了一個範本給我

input: timeline(100000); setinputname(1,"時間切算點");
input:TXT1("限用分鐘線"); setinputname(2,"使用限制");
input:TXT2("高點自開盤起算"); setinputname(3,"使用說明");
settotalbar(3);
if barfreq<> "Min" then return;
variable:RangeHigh(0);
if date <> date[1] then RangeHigh = 0;
if Time < timeline then RangeHigh = maxlist(RangeHigh,high)
else if time >= timeline and RangeHigh > 0 and Close > RangeHigh*1.005 then ret=1 ;

這個範本的概念是在10點以後,如果突破10點之前的高點就出訊號

這是用Time這個回傳值與設定一個 timeline這樣的參數來設定計算的時間區段,我用這個範本就知道怎麼處理時間的問題了

卡關五:如何在分鐘線裡引用日線的價量資料

我們在透過分鐘線描述當天走勢時,常常會想要考慮到日線對應的價量關係,例如今天盤中一分鐘線突破前一根日線高點之類的想法,這時候會希望可以在分鐘線的腳本中,引用日線的價量資料,這時候就需要用到一些語法上的小技巧,茲舉例如下

input: volumeRatio(0.1, "分鐘量暴量比例");
input: changeRatio(3, "最近3日最大上漲幅度");
input: averageVolume(1000, "5日均量");

variable:KBarOfDay(0), BreakHigh(false);

KBarOfDay+=1;
if date<>date[1] then begin
KBarOfDay=1; 
BreakHigh = false;
end; 

condition1 = KBarOfDay = 6;
//一分鐘線每天的第六根

condition2 = Countif(High > High[1] and Close > Close[1] ,5) >=3;
//近五根裡至少三根最高價比前一根高且收盤比前一根高

if KBarOfDay = 1
and close > getfield("close", "d")[1] 
//一分鐘線第一根的最新價格高於前一日的收盤價
then BreakHigh = true;
//開高

value1 = average(GetField("Volume", "D")[1], 5);
//用getfield語法來取得過去五天成交量再作移動平均
//五日均量

condition3 = value1 > averageVolume;
//五日均量大於某張數

value2 = rateofchange(GetField("Close", "D")[1], 3);
condition4 = AbsValue(value2) < changeRatio;
//前三日漲帳幅小於一定標準

condition5 = summation(volume, 5) > value1 * volumeRatio;
//前五根一分鐘線成交量的合計大於五日均量某個比例

if condition1 and condition2 and condition3
and Condition4 and Condition5 
and BreakHigh
then ret=1;

這個腳本裡跑的是一分鐘線,主敘述是近幾天整理格局的股票,開盤跳空上漲且五分鐘內到少三次創新高,且成交量增加,這裡必須用日線來描敘跳高,計算五日均線,以及描敘過去幾點基本上屬於盤整格局,這些都是需要用到日線,這個樣本透過 getfield語法,在1分鐘線裡,大量的使用日線的收盤價及成交量來協助運算。

卡關六:如何撰寫突破盤中整理時高點的腳本?

我在描繪分時圖盤整後突破高點時,不知道要怎麼寫才合適? 同事給了我一個範本如下

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

settotalbar(Length + 3);

variable: theHigh(0);
theHigh = Highest(High[1],Length); 
//找到過去其間的最高點
variable: HighLowerBound(0); 
HighLowerBound = theHigh *(100-RangeRatio)/100;
// 設為瓶頸區間上界
variable: TouchRangeTimes(0); 

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

if TouchRangeTimes >= HitTimes and close > theHigh then ret=1;

這個腳本是用來描繪在分鐘線下底下,一段時間以來,多次股價有上攻到高點附近但都拉回,最後則順利站上新高點的腳本,這個腳本的做法是先把高點標示出來,然後畫出一塊高原區,只要股價有進到高原區就算一次上攻,然後如果先前有進攻三次以上,就算是多次上攻。

 

以上是我在撰寫分鐘線腳本時所踫到的一些卡關的地方,以及語法上對應的寫法樣本,祝大家都能順利寫出自己的想法。

xqlite banner

如何快速定義及應用K線型態來寫腳本?

這兩天盤的波動較大,非經濟因素帶來的衝擊,對一些長期趨勢型的分析工具可能比較容易失真,透過1到數根K棒的型態分析,再搭配籌碼及基本面因素的選股方式,變成短期因應之道,但坊間的選股工具,一般都是K線型態歸一類,籌碼與基本面分析的歸另一類,較少組合起來選股的工具,於是有XS的User反映能否把K線型態內建成函數,以利於跟其他選股條件組合使用,今天就來回應這個需求

首先,我寫了一個樣本函數如下:

bKpatterm型態函數

settotalbar(5);
condition2 = (minlist(open,close)-Low) > absvalue(open-close)*3;
condition3 = minlist(open, close) > low* (100 + 2)/100;

if trueall( condition2 and condition3, 3)
then bkpatterm="三長下影線";

{[檔名:] 紅三兵
[說明:] 連續三根上漲實體K棒
}

condition1= ( close - open ) >(high -low) * 0.75;
//狀況1:實體上漲K棒
condition4= ( close[1] - open[1] ) >(high[1] -low[1]) * 0.75;
//狀況2:前一根也是實體上漲K棒
condition5= ( close[2] - open[2] ) >(high[2] -low[2]) * 0.75;
//狀況3:前前根也是實體上漲K棒
condition6= close > close[1];
//狀況4: 上漲
condition7= close[1] > close[2];//狀況5:上漲
{結果判斷}
IF
condition1
and condition4
and condition5
and condition6
and condition7
THEN bkpatterm="紅三兵";

condition8= ( open[2] - close[2] ) >(high[2] -low[2]) * 0.75;
//狀況1:實體下跌K棒
condition9= ( close[1] - open[1] ) >(high[1] -low[1]) * 0.75;
//狀況2:實體上漲K棒
condition10= high[1] < high[2] and low[1] > low[2];
//狀況3:前期內包於前前期
condition11=( close - open ) > 0.75 *(high -low);
//狀況4:當期實體上漲K棒
condition12=close > open[2];
//狀況5:現價突破前前期開盤價
IF condition8
and condition9
and condition10
and condition11
and condition12
THEN bkpatterm="內困三日翻紅";

condition13=open = High and close < open ;//狀況1: 開高收低留黑棒
condition14=(high -low) > 2 *(high[1]-low[1]) ;//狀況2: 波動倍增
condition15=(close-low)> (open-close) *2 ;//狀況3: 下影線為實體兩倍以上

IF condition13
and condition14
and condition15
THEN bkpatterm="吊人線";

condition16=(open[1] - close[1] ) >(high[1] -low[1])*0.75;
//狀況1:前期出黑K棒
condition17=( close - open ) >(high -low) * 0.75;
//狀況2:當期紅棒
condition18=high > high[1];
//狀況3:高過昨高
condition19=open<low[1];
//狀況4:開低破昨低
IF condition16
and condition17
and condition18
and condition19
THEN bkpatterm="多頭吞噬";

{
[檔名:] 多頭執帶
[說明:] 開在最低點一路走高收在最高點附近的K棒
}
condition20=close>open;
condition21=(Close-Open)>(high-low)*0.9;
condition22=Close>Close[1]+high[1]-low[1];
IF condition20
and condition21
and condition22
THEN bkpatterm="多頭執帶";

{
[檔名:] 多頭母子
[說明:] 前期收長黑K棒 今期開高小幅收紅不過昨高
}

condition23=( open[1] - close[1] ) >(high[1] -low[1])*0.75;
//狀況1:前期出長黑K棒
condition24=close[3]-close[2]<close[2]-close[1];
//狀況2:前期呈波動放大下跌
condition25=( close - open ) >(high -low) * 0.75;
//狀況3:當期紅棒
condition26=high < high[1];
//狀況4:高不過昨高
condition27=low>low[1];
//狀況5:低不破昨低

IF
condition23
and condition24
and condition25
and condition26
and condition27
THEN bkpatterm="多頭母子";

{
[檔名:] 多頭遭遇
[說明:] 前期收黑K棒 當期開低走高紅棒嘗試反攻昨收
}

condition28= (open[1] - close[1] ) >(high[1] -low[1]) * 0.75;
//狀況1:前期出黑K棒
condition29= close[1] < close[2];
//狀況2:前期收跌
condition30= ( close - open ) >(high -low) * 0.75;
//狀況3:當期收紅K棒
condition31= open < close[1] and close < close[1];
//狀況4:開低且收跌
condition32= low < low[1];//狀況5:破前期低點
{結果判斷}
IF
condition28
and condition29
and condition30
and condition31
and condition32
THEN bkpatterm="多頭遭遇";

有了這個函數,我就可以把型態跟其他選股條件組合在一起,成為一個新的選股策略。

舉個例子,K線型態上有個叫多頭母子的型態,其樣式如下圖

我寫了一個選股策略如下

這當中除了本益比小於12及近一日三大法人合計買超這兩個條件是系統內建的之外,另外加了一個腳本型的選股條件: 低本益比股大跌後出現多頭母子,我寫的腳本如下:

if bkpatterm="多頭母子"
and close*1.4<close[90]
and close*1.2<close[30]
then ret=1;

這個腳本是去尋找過去九十天跌了四成,過去三十天跌了兩成的股票,然後它的K線型態符合多頭母子。

如果拿這腳本跟上述條件組合而成的策略去選股,回測過去兩年,出場點設為20天之後,回測報告如下

過去兩年共出現八次抄底的機會,每次都能獲利出場,我把回測的時間接長到五年及十年,勝率也都有六成以上,平均報酬率也都還可以。

以上是bkpatterm這個函數的介紹及應用,這個函數目前包括的K線型態還不夠多,我會找時間把各種型態如W底,M頭等等的都補齊,未來大家直接引用即可。

 

xqlite banner

 

大跌後出現什麼癥兆是可以抄底的?

我先前寫過不少大跌後抄底的腳本,這次武漢肺炎所帶來的急跌,朋友們最想知道的就是跌下來要買那一檔? 我想整理這些腳本,找出其中勝率較高的,來跟大家介紹。

一,大跌後的主力回頭收集

這個腳本的想法是如果股價這二十天到三十天有一定的跌幅,但在這段時間內,分公司賣出家數愈來愈多,分公司買進家數愈來愈少,代表有特定買盤趁著大跌在默默吸納籌碼。

我寫的腳本如下

input:period(20);
value1=GetField("分公司賣出家數")[1];
value2=GetField("分公司買進家數")[1];

if linearregslope(value1,period)>0
//賣出的家數愈來愈多
and linearregslope(value2,period)<0
//買進的家數愈來愈少
and
close*1.05<close[period]
//過去一段時間股價在跌
and close*1.25<close[30]

then ret=1;

二,大跌後的低檔五連陽

這個策略是去尋找長期下跌,近期跌勢加遽,但最近五天收盤都大於開盤的股票

對應的腳本如下

 if trueall(close>open,5) 
and close*1.4<close[90]
and close*1.2<close[20]
then ret=1;

三,大跌後的價量背離

這個策略是去尋找大跌且近期急跌後,近十個交易日價量背離的股票

input:period(10);
input:times(5);
if close[1]*1.4<close[90]
and close*1.2<close[30]
and countif(c>c[1]xor v>v[1],period)
>=times
and close=highest(close,period)
then ret=1;

四,大跌後的長黑後長紅

這個腳本是去尋找那些大跌之後,加速趕底後,出現長紅的股票

if close*1.4<close[90]
and close*1.2<close[20]
then begin
if close[1]*1.05<close[2]
and close>1.05*close[1]
then ret=1;
end;

五,大跌後出現長下影線

這是去尋找大跌後,近三天出現至少一根長下影線的股票

input: Percent(1.5,"下影線佔股價絕對百分比");
settotalbar(5);
condition1 = (minlist(open,close)-Low) > absvalue(open-close)*3; 
//下影線的長度是實體的三倍以上
condition2 = minlist(open, close) > low* (100 + Percent)/100;
if countif( condition1 and condition2, 5)>=1
and close[20]> close*1.25
and close[90]>close*1.4
then ret=1;

 

六,大跌後的急拉

這個腳本是去尋找大跌且股價很久沒有上漲超過6%的股票

value1=barslast(close>=close[1]*1.06);
if value1[1]>50
//超過50天沒有單日上漲超過6%
and value1=0
//今天上漲超過6%
and average(volume,100)>500
and volume>1000
and close[1]*1.25<close[50]
//過去50天跌幅超過25%
then ret=1;

七,大跌後的第一次突破月線

這個腳本是股價大跌後,去尋找股價離低點沒有很遠,且股價近期以來第一次突破月線的標的

input:period(90,"計算區間");

value1=highest(high,period);
value2=lowest(low,period);
if value2*1.3<value1
and close<value2*1.07
and barslast(close cross over average(close,22))=0
and barslast(close cross over average(close,22))[1]>30

then ret=1;




 

以上這七個策略的勝率都接近六成,大家也可以根據這些樣本, 發展出自己的大跌後對應策略,祝大家在驚濤中都能乘風而行。

 

推荐碼@XQ8899

XQ全球贏家下載連結

XQ超人氣加值模組介紹

XQ手機版支援下單

XQ量化交易平台學習地圖

統一證券開戶連結

群益金鼎證券開戶連結

華南永昌開戶連結

長線客買賣超張數指標

XS提供了一些籌碼相關的欄位,我運用這些欄位,寫過不少交易策略,今天就來跟大家分享一個最近寫的指標 。

之前有跟大家聊過關鍵券商,地緣券商,官股券商及前十大綜合券商總公司的意義,這些都是屬於長線的力量,再搭配外資,投信及非套利的自營商買賣超,應該可以代表一檔股票長線的買賣力道,我把這些力量加總起來,組合成一個長線客買賣超張數指標,以下是這個指標的腳本

value1=GetField("關鍵券商買賣超張數","D");
value2=GetField("地緣券商買賣超張數","D");
value3=GetField("外資買賣超張數");
value4=GetField("投信買賣超張數");
value5=GetField("自營商自行買賣買賣超");
value6=GetField("官股券商買賣超張數","D");
value7=GetField("綜合前十大券商買賣超張數","D");
value8=value1+value2+value3+value4+value5+value6+value7;
plot1(value8,"長線客買賣超張數");

我把這個指標拿來跟K線圖對照,我發現,這個指標對於中小型電子股有不錯的參考意義,以下是幾個例子

 

 

我把這個腳本改成選股腳本,找出當日長線買盤佔成交量一成以上的股票

我所寫的腳本如下

value1=GetField("關鍵券商買賣超張數","D");
value2=GetField("地緣券商買賣超張數","D");
value3=GetField("外資買賣超","D");
value4=GetField("投信買賣超","D");
value5=GetField("自營商自行買賣買賣超","D");
value6=GetField("官股券商買賣超張數","D");
value7=GetField("綜合前十大券商買賣超張數","D");
value8=value1+value2+value3+value4+value5+value6+value7;
input:ratio(10,"長線買盤佔百分比");
if volume<>0 then value9=value8/volume*100;
if value9>=ratio and volume>2000
then ret=1;
outputfield(1,value9,2,"長線買盤佔比");

以昨天的數據來跑,這個比例最高的的股票如下

謹供大家參考。

 

 

 

 

 

如何建構及維運”我的觀察名單“

今天有那些股票值得留意? 寫好了交易策略後要跑那些股票? 考量到我實在跑了太多的策略,為了怕電腦撐不住,不會跑所有上市上櫃的普通股,而是跑一個每天更新的”我的觀察名單“,今天就來跟大家介紹我是怎麼建構這個觀察名單,以及如何維運它。

首先,先跟大家介紹,我如何使用操盤高手中,免費功能裡的服務,去挑股票進觀察名單

一,型態辨識

我先前有寫過一篇這功能的介紹文,這功能在操盤高手中是在策略選單裡的第二項”型態選股“中

我會把符合各種抄底型態及突破繼續型態的股票很快看一遍,然後把覺得值得留意的股票加到觀察名單中。

例如下圖就是一個例子

二,戰情中心

在操盤高手的報價選單的第一項就是戰情中心,這個功能裡有一些條件,可以挑出符合特定常用的條件的股票,參考畫面如下

在這裡可以看到即將開法說會的股票,即將除權息的股票,營收創新高的股票,報上有利多的股票,法人同步買超的股票等等,我習慣每天從裡頭挑出今天盤中要特別留意的股票。

三,今日財經

在操盤高手的新聞選單中,有一個今日財經的功能,這功能會列出與嘉實合作的新聞供應商的新聞標題,我會從中找出值得追蹤的個股,把它加入觀察名單

四,法人推荐股

這個功能在選股項下,系統會找出法人最新調整評等的股票,也會整理出距離目標價位的潛在上漲空間

我會從裡頭挑出值得注意的股票來加入觀察名單。

 

五,微股力的達人文章

除了從操盤高手中挑到股票之外,我也會看看微股力的達人文章中推荐了那些個股,然後把它加入我的觀察名單中

 

 

完成這些觀察名單之後,我就讓雲端策略中心我挑到的股票都只跑這組自選股

設定的方式如下圖

至於雲端策略中心裡有不少策略,到底要跑那一些策略?

我的作法是挑那些報酬走勢表現的不錯的策略

以上是如果使用免費版操盤高手裡的功能時,我建構及維護觀察名單,以及用這組觀察名單來跑策略的方法。

當然如果擁有加值權限時,我會用加值功能來把一些個股加入觀察名單,這部份我先前寫過不少,就不多說了。

至於觀察名單要怎麼刪減,我的作法是,看漲跌幅,已經漲上來的,我就會處理掉,我都比較偏好在觀察名單裡的股票剛剛冒上來時才進場。

以上報告

xqlite banner