前交易时段开/高/低/收 [MultiCharts MC]
- 咨询内容:版本: 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客服:很实用的函数,先收下来,感谢分享~