龙听期货论坛's Archiver

龙听 发表于 2022-11-2 11:27

【OHLCPeriodsAgo】

[code]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 ;
        OHLCPeriodsAgo = -1 ;
        end
else
        begin
                                                                
        if PeriodType = 0 then
                Condition1 = sess_last_bar[1]
        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
                                                                                    
                                                       
                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 ) ] ;

        OHLCPeriodsAgo = 1 ;
        end ;

                                                                                 
                                                            
if false then
        Value1 = OHLCPeriodsAgo[1] ;
[/code]

页: [1]