2010年3月15日

利用 $OHLCPeriodsAgo 修正 OpenD/HighD/LowD/CloseD 函數

在前一篇 文章 裡,我們利用 $OHLCPeriodsAgo 函數來對應不同的交易時段,以取得開/高/低/收價。這次就順便修正內建的 OpenD/ HighD / LowD / CloseD 這四個函數,來對應不同交易時段。

1. $OpenD
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$OpenD = var1 ;

2. $HighD
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$OpenD = var2 ;

3. $LowD
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$LowD = var3 ;

4. $CloseD
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$LowD = var4 ;

修正 OHLCPeriodsAgo 函數-如何取得前N個交易時段之開/高/低/收

Multicharts 的 PowerLanguage Editor 內建了一個 OHLCPeriodsAgo 函數,可以取得 N天前的開/高/低/收價。但是這個函數是以日曆日作為交易時段之區分點,如果遇到跨天的交易時段(比如 CME Globex 交易之商品),算出來的結果會是錯誤的。

利用 EasyLanguage 一系列的 Session 函數,可以解決這問題。以下新增一個 $OHLCPeriodsAgo 函數

Inputs:
    PeriodsAgo(numericsimple),
    oPeriodOpen(numericref),
    oPeriodHigh(numericref),
    oPeriodLow(numericref),
    oPeriodClose(numericref) ;
Variables: Count(0) ;
Arrays: arr0[4,500](-1) ; // O/H/L/C
IF (PeriodsAgo > 500 or BarType > 4) Then //Only keep 500 days of records
    BEgin
      oPeriodOpen = -1 ;
      oPeriodHigh = -1 ;
      oPeriodLow = -1 ;
      oPeriodClose = -1 ;
      $OHLCPeriodsAgo = -1 ;
    ENd
ELSE
    BEgin
         For Value1 = 1 to SessionCount(0)
         begin
          If Value1 < SessionCount(0) then 
             Value2 = Value1 + 1
          else
            Value2 = 1;  
          Condition1 = (SessionEndDayMS(Value1) = DayofWeek(Date[1])) and (Time[1] <= SessionEndTimeMS(Value1))
                       AND
                      (SessionStartDayMS(Value2) = DayofWeek(Date)) and (Time >= SessionStartTimeMS(Value2));
          //Condition1 = (Time[1] <= SessionEndTimeMS(Value1)) AND (Time >= SessionStartTimeMS(Value2));
          if Condition1 then                                        
          begin
            Count = Count - 1 ;                                                     
            if Count <= -1 then Count = 500;                                    
                    arr0[1,Count] = O ;
                    arr0[2,Count] = H ;
            arr0[3,Count] = L ;
            arr0[4,Count] = C ;
          end
          else
          begin
             if H > arr0[2,Count] then arr0[2,Count] = H ;
           if L < arr0[3,Count] then arr0[3,Count] = L ;
           arr0[4,Count] = C[1];
           if PeriodsAgo = 0 then arr0[4,Count] = C;
          end ;
      end;
      oPeriodOpen = arr0[1,Mod(Count + PeriodsAgo, 501)] ;
      oPeriodHigh = arr0[2,Mod(Count + PeriodsAgo, 501)] ;
      oPeriodLow = arr0[3,Mod(Count + PeriodsAgo, 501)] ;
       oPeriodClose = arr0[4,Mod(Count + PeriodsAgo, 501)] ;
      $OHLCPeriodsAgo = 1 ;
    ENd;
IF False THEN Value1 = $OHLCPeriodsAgo[1] ;

2010年3月10日

Multicharts QuoteManager 連接 Bloomberg 之設定方式

找了很久,似乎網路上沒有任何的教學畫面,就連官方網站也只是隨便就帶過去。
只好自己摸索,終於把Multicharts 對 Bloomberg 連線設定好了。

先登入Bloomberg (Professional 或是 Anywhere版本都可以,但Anywhere版本必須使用獨立安裝程式的版本..不能用瀏覽器使用的版本)。
BB01
首先輸入EIS <GO> 進入 即時報價訂閱畫面,檢查一下是不是已經訂閱該交易所的即時報價。如果沒有訂閱的話,可能只會有當日的延遲報價可接收,歷史報價可能不會提供。如果要新增訂閱即時報價,請輸入 96 <GO> –> 1 ,輸入帳號密碼後,選擇要訂閱的交易名稱。
BB00
輸入 CEM <GO> 以檢視 期貨交易所目錄。在這個畫面裡,可以找到要交易的期貨交易所目錄。名稱前面的英文字是簡稱,如果你已經知道簡稱的話,也可以直接輸入 CEM + 簡稱 <GO> 直接進入商品清單。比如我選了 CME (相當於直接輸入 CEM CEM <Go>)
BB02
進入交易所目錄之後,接下來這個畫面會列出該交易所掛牌的商品。
BB03
比如我選了EUR/USD Futures (CME 歐元期貨),選取 CT 合約表,就可以進入商品月份清單啦,或者你可以直接在這個畫面把代碼記下來。
BB04
以下是商品合約表,可以知道個月份合約之代碼,記得抄下來。
BB05
接下來要設定的是期貨連續合約的合約調整。一般來說,舊合約到期在轉倉到新合約的過程,會有轉倉價差產生,因此要針對轉倉價差進行調整。Bloomberg 有提供自動轉倉調整的功能。請輸入 GFUT <GO> 進入轉倉調整畫面。
BB06
接下來切換設定到「序列預設」(也可以直接輸入93 <GO>)。
BB09-1
在價格與波動率的「轉倉類型」下,有許多選項。就是告訴 Bloomberg ,舊月份合約要在哪一天轉倉到新月份合約去,以台灣來說,請選擇「相對於到期」,至於國外商品期貨則是選擇「相對於第一通知日」,「天數」的話依照自己需要設定,通常是「轉倉類型」指定日期的前兩天。
至於「調整」項下,有「無」、「差異」、「比率」、「平均」四項,指的是建構連續合約時,是否要針對換越跳空部份進行調整。「差異」指的是針對新舊合約之結算價差異數進行調整,「比率」指的是針對新舊合約的比值進行調整,「平均」則是加入以合約存續天數作為加權平均因子進行調整。
BB09-2
接下來打開 Multicharts 的 QuoteManager,按下 Instrument –> Add Symbol –> Manually 新增商品…. (也可以用Add Symbol-> From Data Source來找尋商品並加入,不過這部份功能有點難用,還是直接從 Bloomberg 裡面來找比較快)
BB10
接下來請輸入商品的Bloomberg 代號 (比如「大台指近月合約」是 FTA),順便選擇 Exchange 交易所(會影響商品交易時段)以及 Category 商品類別。商品類別這邊要說一下,如果是股價指數及指數期貨,請選擇 Indexes,外匯及外匯及外匯期貨,請選擇 Forex,股票請選擇 Stocks,商品期貨才是選擇 Futures ,要非常注意,選錯商品類別會沒有報價或是報價錯誤。
BB11
接下來會出現商品詳細設定,可以在Description 輸入自訂名稱,Symbol Root 則是 自訂的商品主代號,Symbol 是先前輸入的Bloomberg 代號。
BB12
這個頁面請選擇要套用的交易所設定,或者你可以自訂商品設定明細。
 BB13
最後一個頁面是交易時段的設定。
BB14
設定完後,在Multicharts 新增一個 Charts 畫面,商品設為剛剛新增的這一項,並將 Data Range 設定好之後,Multicharts 就會自動要求 Bloomberg 回補資料了。