Author Archives: 發財橘子

多頭遭遇

{
[檔名:] 多頭遭遇 [資料夾:] 酒田戰法 [適用方向] 多
[說明:] 前期收黑K棒 當期開低走高紅棒嘗試反攻昨收

[資料讀取] 10
[最大引用] 5
}
{判斷狀況}
condition1= (open[1] - close[1] ) >(high[1] -low[1]) * 0.75 ;//狀況1: 前期出黑K棒
condition2= close[1] < close[2] ;//狀況2: 前期收跌
condition3= ( close - open ) >(high -low) * 0.75 ;//狀況3: 當期收紅K棒
condition4= open < close[1] and close < close[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[2] > open[2] + high[3]-low[3] ;//狀況1: 前前期長紅棒
condition2= high[2] < high[3] and low[2] > low[3] ;//狀況2: 前期內包黑K棒
condition3= open >= close[1] and close < open[2] ;//狀況3: 開平高跌破三日低點
{結果判斷}
IF
condition1
and condition2
and condition3
THEN RET=1;

 

吊人線

{
[檔名:] 吊人 [資料夾:] 酒田戰法 [適用方向] 空
[說明:] 短黑棒留長下影線

[資料讀取] 10
[最大引用] 5
}

{判斷狀況}
condition1= open = High and close < open ;//狀況1: 開高收低留黑棒
condition2= (high -low) > 2 *(high[1]-low[1]) ;//狀況2: 波動倍增
condition3= (close-low)> (open-close) *2 ;//狀況3: 下影線為實體兩倍以上
{結果判斷}
IF
condition1
and condition2
and condition3
THEN RET=1;

 

夜星

 

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

[資料讀取] 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. 指定腳本執行的時間是否為今天才執行。