前交易時段開/高/低/收
作者:MultiCharts MC 來源:cxh99.com 發布時間:2012年07月16日
- 咨詢內容:版本: 6.0 Beta2
交易商品: NYMEX 原油期貨 (美國交易時間 18:00 - 隔日 17:15 相當於臺灣時間 6:00-隔日5:15)
程式 中需要取得前一交易時段開/高/低/收價 以進行計算,當然最直覺就想到OPEND/HIGHD/LOWD/CLOSED 等FUNCTION..
但 國外交易所的交易時間往往都有跨過每天00:00 ,結果透過OPEND/HIGHD/LOWD/CLOSED 等FUNCTION取得前一交易時段
開/高/低/收 價位時,卻發現MC 會在換日的時候當作是兩交易時段的分界...結果就抓到 前一日而非前一交易時段的開/高/低/收,
請問有另外的FUNCTION可以使用嗎? THANKS
- MC技術部:[發問] 前交易時段開/高/低/收 by 2010-02-05 17:38:120 昵稱:SeanWang信箱:不顯示成就:發文(3) / 回文(30) / 推薦(3) 恩.... 已經解決了。
解決方法如下(無論Time Zone 設為Exchange 或是 Local 都OK)..... 透過SESSION 函數很方便
新增 一個 Function 命名 為 $OHLCPeriodsAgo
Inputs:
PeriodsAgo(numericsimple),
oPeriodOpen(numericref),
oPeriodHigh(numericref),
oPeriodLow(numericref),
oPeriodClose(numericref) ;
Variables: Count(0) ;
Arrays: arr0[4,5000](-1) ; // O/H/L/C
if (PeriodsAgo > 5000 or BarType > 4) then //Only keep 5000 days of records
begin
oPeriodOpen = -1 ;
oPeriodHigh = -1 ;
oPeriodLow = -1 ;
oPeriodClose = -1 ;
$OHLCPeriodsAgo = -1 ;
end
else
begin
For Value1 = 1 to SessionCount(0)-1 begin
Condition1 = CurrentBar = 1 or (SessionEndDayMS(Value1) = DayofWeek(Date[1])) and (Time[1] <= SessionEndTimeMS(Value1))
AND
(SessionStartDayMS(Value1+1) = DayofWeek(Date)) and (Time >= SessionStartTimeMS(Value1+1));
if Condition1 then
begin
Count = Count- 1 ;
if Count <= -1 then Count = 5000
else
arr0[2,Count] = H[1] ;
arr0[3,Count] = L[1] ;
arr0[4,Count] = C[1] ;
end
else
begin
arr0[1,Count - 1] = O;
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] ;
end ;
end;
oPeriodOpen = arr0[1,Mod(Count + PeriodsAgo, 5001)] ;
oPeriodHigh = arr0[2,Mod(Count + PeriodsAgo, 5001)] ;
oPeriodLow = arr0[3,Mod(Count + PeriodsAgo, 5001)] ;
oPeriodClose = arr0[4,Mod(Count+ PeriodsAgo, 5001)] ;
$OHLCPeriodsAgo = 1 ;
end;
然後 ....
新增以下名為 $OpenD 的函數
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$OpenD = var1 ;
新增以下名為 $HighD 的函數
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$HighD = var2 ;
新增以下名為 $LowD 的函數
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$LowD = var3 ;
新增以下名為 $CloseD 的函數
inputs: PeriodsAgo( numericsimple ) ;
variables: var1(0), var2(0), var3(0), var4(0) ;
Value1 = $OHLCPeriodsAgo( PeriodsAgo, var1, var2, var3, var4 ) ;
$CloseD = var4 ;
- MC客服:感謝您的分享
- MC客服:謝謝你幫我們實作出來當初有這個想法,一忙就沒去弄^^
- MC客服:很實用的函數,先收下來,感謝分享~