2020年6月8日 星期一

結算日語法如何寫 --- 台指期


台指期的結算日在每月的第三個禮拜三,到這日波段單便要出場。因,我們需要在語法中判斷出結算日。

 


 

每月的第三個禮拜三由15號至21 號都有可能。上圖是2020年月曆。如果當月的 1 號是禮拜三,第三個禮拜三會是15 號,例如今年的一月。如果當月的 1 號是禮拜四,第三個禮拜三會是21 號,例如今年的十月。

 

vars: Settlement(false);

 

If Date <> Date [1] then Settlement = false;

 

If DayOfMonth(Date)>=15 and DayOfMonth(Date)<=21 and DayOfWeek(Date)=3 then Settlement = True;

 

If marketposition <> 0 and Settlement = true then setexitonclose;

 

在語法中,先定義出一個變數Settlement,初始值為false,如符合條件Settlement = True 。如果結算日當天有部位,則收盤時出場。

 

這好像很簡單喔!  可是,現實中會出現延後結算,如果第三個禮拜三當天遇上了假期,像遇上了颱風,便會出現延後結算的問題。關於這個問題,解決方法是寫一個能判斷延後結算的函數。寫法可以參考曾永政老師的版本,以下符上連結

http://www.yctseng.net/2012/03/blog-post_13.html

 

Powerlanguage Editor 裡新增一個函數CheckDay,函數回傳類型為True/False,儲存類型為時序。

var:mark(0);
 
if D>D[1] then CheckDay=false;
 
if Month(D)<>Month(D)[1] then mark=0;
 
if (DayOfMonth(D)>=15 and DayOfMonth(D)<=21 and DayOfWeek(D)=3) then begin
 
  CheckDay=True;
  mark=1;
  end
     
else 
  if mark=0 and
     (
       (DayOfMonth(D)>=16 and DayOfMonth(D)<=22 and DayOfWeek(D)=4) or
       (DayOfMonth(D)>=17 and DayOfMonth(D)<=23 and DayOfWeek(D)=5) or
       (DayOfMonth(D)>=18 and DayOfMonth(D)<=24 and DayOfWeek(D)=6) or
       (DayOfMonth(D)>=20 and DayOfMonth(D)<=26 and DayOfWeek(D)=1) or
       (DayOfMonth(D)>=21 and DayOfMonth(D)<=27 and DayOfWeek(D)=2) or
       (DayOfMonth(D)>=22)
      ) then begin
 
    CheckDay=True;
    mark=1;
 
  end;

 

有了這個函數後,結算日出場便可寫成:

If marketposition <> 0 and CheckDay = true then setexitonclose;


經典當沖交易系統 --- ORB

ORB 即是 Opening Range Breakout ,意思是開盤區間突破,先定義出一個區 間 ,突破此區間進場,收盤前平倉。定義區 間 的做 法 會以當天開盤價或開盤時段的高低點作參考。例如以開盤後 30 分鐘內的最高價和最低價作為區間,突破開盤後 30 分鐘內的最高價進...