您现在的位置:程序化交易>> 期货公式>> (MC)multicharts>> MC知识>>正文内容

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

【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容