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

如何指出指定時間內的高低收位置? [MC]

  • MC用户求助: 您可以看一下帖子http://forums.touchance.cn/forum ... &extra=page%3D1,里面说的比较详细。
    一、由于HighS和LowS函数中使用了关键字sessionlastbar来区分交易所时段,不同的交易所对于时间的划分可能不一样,同一个交易所不同的商品合约对于交易时段的划分也可能不一样,关于某个商品合约的交易所时段您可以在报价管理器中查看。
    二、恒指期货的交易所时段是从9:15到23:45,所以通过highD和HighS函数求得的交易日的最高价是一样的,对于LowD和LowS、closeD和closeS、OpenD和OpenS求得的值都是一样的。
    三、如果您只是想求得日市,也就是恒指的9:15到16:30时间段内的最高价、最低价、开盘价和收盘价,那么您需要自己写一个特定的函数(对HighD、LowD、closeD、openD进行修改就可以了),MC中没有针对特殊时段的求日内最高价、最低价、开盘价和收盘价的函数。

     

  • MC回复讨论一: 您可以看一下帖子http://forums.touchance.cn/forum ... &extra=page%3D1,里面说的比较详细。
    一、由于HighS和LowS函数中使用了关键字sessionlastbar来区分交易所时段,不同的交易所对于时间的划分可能不一样,同一个交易所不同的商品合约对于交易时段的划分也可能不一样,关于某个商品合约的交易所时段您可以在报价管理器中查看。
    二、恒指期货的交易所时段是从9:15到23:45,所以通过highD和HighS函数求得的交易日的最高价是一样的,对于LowD和LowS、closeD和closeS、OpenD和OpenS求得的值都是一样的。
    三、如果您只是想求得日市,也就是恒指的9:15到16:30时间段内的最高价、最低价、开盘价和收盘价,那么您需要自己写一个特定的函数(对HighD、LowD、closeD、openD进行修改就可以了),MC中没有针对特殊时段的求日内最高价、最低价、开盘价和收盘价的函数。

     

  • MC回复讨论二: (對HighD、LowD、closeD、openD進行修改就可以了)<<這個我可以如何入手?
    是否先開一個$OHLCPeriodsAgo , 
    修改內容


    然後新增名為  $HighD 的函數

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

     

  • MC回复讨论三:

    inputs: 
            PeriodType( numericsimple ),                                                
                                     
            PeriodsAgo( numericsimple ), 
            oPeriodOpen( numericref ), 
            oPeriodHigh( numericref ), 
            oPeriodLow( numericref ), 
            oPeriodClose( numericref ) ;

    variables:
            var0( 0 ), sess_last_bar(false) ;

    arrays:
            arr0[ 4, 50 ]( -1 ) ;

    sess_last_bar = sessionlastbar;
    condition1 = PeriodsAgo > 50 or BarType > IFF(PeriodType<>0, PeriodType + 1, PeriodType + 2) or BarType > 4 ;
    if condition1 then
            begin
            oPeriodOpen = -1 ;
            oPeriodHigh = -1 ;
            oPeriodLow = -1 ;
            oPeriodClose = -1 ;
            test_OHLCPeriodsAgo = -1 ;
            end
    else
            begin
                                                                    
            if PeriodType = 0 then
                    Condition1 = sess_last_bar[1] and time[1]<=1600 and time[1]>=1130
            else if PeriodType = 1 then
                    Condition1 = Date <> Date[1]
            else if PeriodType = 2 then
                    Condition1 = DayOfWeek( Date ) < DayOfWeek( Date[1] )
            else if PeriodType = 3 then
                    Condition1 = Month( Date ) <> Month( Date[1] ) 
            else if PeriodType = 4 then
                    Condition1 = Year( Date ) <> Year( Date[1] ) ;

            condition1 = CurrentBar = 1 or Condition1 ;
            if condition1 then                                         
                    begin
                    var0 = var0 - 1 ;                                                      
                    if var0 = -1 
                            then var0 = 50 ;                                     
                                                                                           
                    arr0[ 1, var0 ] = O ;
                    arr0[ 2, var0 ] = H ;
                    arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end 
            else if PeriodType = 1 and time<=1630 then                             
                    begin
                    condition1 = H > arr0[ 2, var0 ] ;
                    if condition1 then arr0[ 2, var0 ] = H ;
                    condition1 = L < arr0[ 3, var0 ] ;
                    if condition1 then arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end 
            else if periodtype<>1 then
                    begin
                    condition1 = H > arr0[ 2, var0 ] ;
                    if condition1 then arr0[ 2, var0 ] = H ;
                    condition1 = L < arr0[ 3, var0 ] ;
                    if condition1 then arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end ;
                    

                                                                                            
                              
            oPeriodOpen = arr0[ 1, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodHigh = arr0[ 2, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodLow = arr0[ 3, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodClose = arr0[ 4, Mod( var0 + PeriodsAgo, 51 ) ] ;

            test_OHLCPeriodsAgo = 1 ;
            end ;

                                                                                     
                                                                 
    if false then
            Value1 = test_OHLCPeriodsAgo[1] ;

    这个是您需要的代码,新建一个函数脚本,名称命名为test_ohlcperiodsago即可,然后再新建test_highd函数,在内部调用test_ohlcperiodsago函数即可。

     

  • MC回复讨论四:

    inputs: 
            PeriodType( numericsimple ),                                                
                                     
            PeriodsAgo( numericsimple ), 
            oPeriodOpen( numericref ), 
            oPeriodHigh( numericref ), 
            oPeriodLow( numericref ), 
            oPeriodClose( numericref ) ;

    variables:
            var0( 0 ), sess_last_bar(false) ;

    arrays:
            arr0[ 4, 50 ]( -1 ) ;

    sess_last_bar = sessionlastbar;
    condition1 = PeriodsAgo > 50 or BarType > IFF(PeriodType<>0, PeriodType + 1, PeriodType + 2) or BarType > 4 ;
    if condition1 then
            begin
            oPeriodOpen = -1 ;
            oPeriodHigh = -1 ;
            oPeriodLow = -1 ;
            oPeriodClose = -1 ;
            test_OHLCPeriodsAgo = -1 ;
            end
    else
            begin
                                                                    
            if PeriodType = 0 then
                    Condition1 = sess_last_bar[1] and time[1]<=1600 and time[1]>=1130
            else if PeriodType = 1 then
                    Condition1 = Date <> Date[1]
            else if PeriodType = 2 then
                    Condition1 = DayOfWeek( Date ) < DayOfWeek( Date[1] )
            else if PeriodType = 3 then
                    Condition1 = Month( Date ) <> Month( Date[1] ) 
            else if PeriodType = 4 then
                    Condition1 = Year( Date ) <> Year( Date[1] ) ;

            condition1 = CurrentBar = 1 or Condition1 ;
            if condition1 then                                         
                    begin
                    var0 = var0 - 1 ;                                                      
                    if var0 = -1 
                            then var0 = 50 ;                                     
                                                                                           
                    arr0[ 1, var0 ] = O ;
                    arr0[ 2, var0 ] = H ;
                    arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end 
            else if PeriodType = 1 and time<=1630 then                             
                    begin
                    condition1 = H > arr0[ 2, var0 ] ;
                    if condition1 then arr0[ 2, var0 ] = H ;
                    condition1 = L < arr0[ 3, var0 ] ;
                    if condition1 then arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end 
            else if periodtype<>1 then
                    begin
                    condition1 = H > arr0[ 2, var0 ] ;
                    if condition1 then arr0[ 2, var0 ] = H ;
                    condition1 = L < arr0[ 3, var0 ] ;
                    if condition1 then arr0[ 3, var0 ] = L ;
                    arr0[ 4, var0 ] = C ;
                    end ;
                    

                                                                                            
                              
            oPeriodOpen = arr0[ 1, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodHigh = arr0[ 2, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodLow = arr0[ 3, Mod( var0 + PeriodsAgo, 51 ) ] ;
            oPeriodClose = arr0[ 4, Mod( var0 + PeriodsAgo, 51 ) ] ;

            test_OHLCPeriodsAgo = 1 ;
            end ;

                                                                                     
                                                                 
    if false then
            Value1 = test_OHLCPeriodsAgo[1] ;

    这个是您需要的代码,新建一个函数脚本,名称命名为test_ohlcperiodsago即可,然后再新建test_highd函数,在内部调用test_ohlcperiodsago函数即可。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容