Switchcase的流程控制語法

Switchcase



swichcase的控制流程



/透過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;

參照商品

 

當我們在制定交易策略的時候,常常會參考大盤的多空態勢,市場老手常要我們不要逆勢而為,也就是大盤看漲時才作多,大盤看跌時則作空。
過往也有專家分析過,大部份的股票,超過一半的波動因素可歸因於大盤,三成歸因於產業,只有兩成歸因為自身的條件。
我自己的經驗裡,很多個股買進訊號的形成,往往跟大盤有關。

因此,在操作時,把大盤這因素考慮進來,是很合理的安排。

XS為了要讓使用者可以在執行交易策略時,也可以一併考慮大盤的多空態勢,因此,特別設定了一個叫作基準商品參照的功能,讓使用者可以交代電腦,只有在大盤符合特殊條件下,才在個股符合策略腳本時,通知使用者。

舉個例子,如果我們希望電腦在加權指數均線多頭排列時,如果個股出現MACD黃金交叉時,可以通知我們,那麼首先我們要寫一個MACD黃金交叉的腳本
這腳本如下:
// MACD 黃金交叉 (dif向上穿越macd)
//
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);

SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");

MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

Ret = difValue Crosses Above macdValue;



然後我們在進階警示清單中點選新增” ,然後系統會跳出以下的對話框
我們在這個對話框會作以下的動作
1.    幫這個交易策略取了一個名字叫大盤多頭時MACD黃金交叉
2.    選擇要使用的腳本。這邊就是選上面我們寫的這個”MACD黃金交叉的腳本
接下來包括所有的屬性設定先前都曾交代過,這邊就不再贅述。

但跟先前的流程不一樣的是,這一次我們要使用基準商品參照。
請把這個功能前面的小方框打勾
然後按這個基準商品參照的對話框
系統會跳出以下的這個對話框

這個對話框的功能,就是設定進階警示觸發的前提條件。
在這個例子,這個前提條件是加權指數的均線要呈現多頭排列
因此,我們先在基準商品中填入加權指數
接著我們在引用腳本中,選出均線多頭排列的腳本
這腳本的內容如下:
input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: SuperLong(60); setinputname(4,"超長期均線期數");
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: SuperLongaverage(0);

if Close > close[1] then
begin
 shortaverage=Average(close,shortlength);
 midaverage=Average(close,midlength) ;
 Longaverage = Average(close,Longlength);
 Longaverage = Average(close,SuperLong);
 if  close>shortaverage and
     shortaverage>midaverage and
         midaverage>Longaverage and
         Longaverage>SuperLongaverage
 then ret=1;
end;

在完成這樣的設定之後,未來啟動這個進階警示時,系統只有在加權指數呈現多頭排列時,才會去找符合MACD黃金交叉條件的股票,然後通知使用者,一但加權指數沒有多頭排列,緃使個股出現MACD黃金交叉的情況,使用者也不會接到條件觸發的通知。

透過上述的例子,我們可以讓系統同時掃瞄不同的商品,並且在兩個商品都符合不同腳本的情況下,才啟動觸發通知。

洗價模式



在XS平台上,一個警示腳本被開始拿來運算時,有幾種不同的洗價模式

一,單次洗價模式。啟動的時候根據當時的開高低收等最新數據,跑一次腳本,如果符合 警示條件就觸發警示,如果沒有就停止執行。
二,日內單次觸發。
如果您指定的頻率是日線及日線以上,當選這個洗價模式時,系統會自動為您逐筆洗價,一旦符合觸發條件後就啟動警示通知,但接下來今天以內,就算再次符合 警示條件,系統都不會再啟動通知。
如果是日線以下的頻率,包括分鐘線,小時線等,系統會讓使用者自行決定要不要逐筆洗價,若使用者勾逐筆洗價,當某根BAR符合條件時系統就會發出警示,但如果不是勾逐筆洗價,會等到那根BAR畫出來後,再根據該BAR的開高低收來決定是否符合警示條件
三,K棒內單次觸發。
K棒內單次觸發跟日內單次觸發,在日線以上頻率是一樣的意思 ,在日線以下就是某根BAR符合條件時只觸發一次,但下一根BAR如果又符合警示條件會再繼續觸發。


四,連續觸發。

這代表的是只要符合一次就警示一次。

資料讀取與最大引用

在設定新的進階警示時,有兩個跟讀取資料量多寡有關的項目,必須正確的加以填寫,這兩個項目,一個是資料讀取,一個是最大引用。




要怎麼去解釋資料讀取及最大引用這兩個設定呢?  要從XS的運算流程來談起 。

當我們把一個腳本應用到一組商品時,電腦會幫我們去準備資料,而這些資料,原本都是存在XQ程式所在的硬碟中,資料讀取的意義在於讓電腦知道要把原本存在硬碟中,非常長的時間序列,到底要拿多少去放在快閃記憶體中,讓XS要開始根據腳本運算時,有比較好的效率。所以資料讀取要設多少,基本上就看腳本在計算時,會用到多少資料而定。

所以資料讀取就是英文中所謂的max bars for reference,電腦在我們通知它去幫某個商品作運算時,它必須先把這個商品的開高低收成交量準備好,從硬碟把這些資料都先抓來放在快閃記憶體中,所以我們必須設定一下我們要叫電腦幫我們準備多少資料,如果我們只是在拿最近的這幾個K棒,來計算這幾根K棒有沒有符合酒田戰法中的那些型態,那為了節省快閃記憶體的空間,並且加快電腦運算的速度,我們在資料讀取這個地方最好不必設太長。



最大引用(MaxBarsBack)

至於最大引用,則是從Maxbarsback翻譯過來的,它的意思是在我們啟動運算的第一根bar時,我們還必須準備多少根bar來協助這第一根bar的運算。
以上圖為例,若我們在腳本中須要用到五日均線,那在我們運算的第一根bar時,我們前面至少還要準備5根bar,這樣才能算出運算啟動時的第一個五日均線值,這些被多準備的5根bar,並沒有實際被拿去運算,只是拿來作為第一根被運算bar時引用的數字,這時最大引用就可以設為5,代表在開始被運算的第一根bar之前,還有5根bar是被拿來引用加入第一根bar的運算的。

也因此,透過資料讀取及最大引用的設定,我們就可以確定一個腳本是從第幾根bar開始運算起,以上圖為例 ,資料讀取是十根,最大引用是五根,那麼開始運算的第一根bar就是資料讀取減去最大引用,也就是10-5,就是從最後一根往回算第五根是腳本開始運算的第一根,我們如果用currentbar這個函數來表示,那currentbar=1指的就是這一根K棒。


自訂函數

除了系統提供的函數之外,使用者也可以自己制定函數。
XS平台上,如果你要制定函數,共分以下幾個步驟

第一步: 開啟Xscript編輯器,按新增腳本,選擇函數,並取一個名字。


例如我想要作一個函數專門來計算當日上影線佔整體振幅的比例,我就按下新增腳本這個icon,然後會跳出如下圖的對話視窗,先在腳本類型選擇函數,然後填入腳本的名稱。
這裡要特別留意的是其他腳本的名稱不見得要英文,但由於函數可以被其他腳本引用,所以名字一定要取為英文,這樣電腦才看得懂。

在編寫函數時,使用者需要傳入參數的變數類型,目前支援三種,
Numeric
數值,String字串,邏輯值TrueFalse。細分是否傳值或傳址,
是否為陣列、序列、或是簡單型態預先宣告好的型態,Value類的可以
儲存數值,Condition可以儲存邏輯值,所以可以宣告的變數資料型態共可以分成以下的
二十種。
Numeric
StringArray 
TrueFalseArrayRef 
NumericArray 
StringArrayRef 
TrueFalseRef 
NumericArrayRef 
StringRef 
TrueFalseSeries 
NumericRef 
StringSeries 
TrueFalseSimple 
NumericSeries 
StringSimple 
Value1~99
NumericSimple 
TrueFalse 
Condition1~99
String 
TrueFalseArray 
 

相關的這些屬性都填完之後,接下來就直接按確認 來進到下一步開始撰寫腳本。

第二步,撰寫腳本

按完確認後,我們會進到一個全新的腳本編輯頁面,這時候我們就可以開始編寫腳本,例如我想寫一個函數來呈現上影線佔整個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;
我們把這個腳本拿去跑,像以下這樣的股票就會被電腦挑出來通知我們