龙听期货论坛's Archiver

龙听 发表于 2022-11-2 13:28

【Stochastic】

[code]inputs:
        PriceValueH( numericseries ),  
        PriceValueL( numericseries ),
        PriceValueC( numericseries ),
        StochLen( numericsimple ),
        Len1( numericsimple ),                                                         
                                 
        Len2( numericsimple ),                                                         
                         
        SmoothingType( numericsimple ),                                                   
                                     
        oFastK( numericref ),
        oFastD( numericref ),
        oSlowK( numericref ),
        oSlowD( numericref ) ;

variables:
        var0( 0 ),               
        var1( 0 ),                 
        var2( 0 ),               
        var3( 0 ),                  
        var4( 0 ),               
        var5( 0 ),                  
        var6( 0 ),
        var7( 0 ) ;

Stochastic = 1 ;

var0 = Lowest( PriceValueL, StochLen ) ;
var1 = Highest( PriceValueH, StochLen ) ;
var2 = PriceValueC - var0 ;
var3 = var1 - var0 ;

if var3 > 0 then
        oFastK = var2 / var3 * 100
else
        begin
        oFastK = 0 ;
        Stochastic = -1 ;
        end ;

if SmoothingType = 1 then            
        begin
        var6 = Len1 - CurrentBar ;
        condition1 = var6 > 0 and CurrentBar > 0;
        if condition1 then
                begin
                                                                                          
                var4 = ( Cum( var2 ) + var6 * var2[ CurrentBar - 1 ] ) / Len1 ;
                var5 = ( Cum( var3 ) + var6 * var3[ CurrentBar - 1 ] ) / Len1 ;
                end
        else
                begin
                var4 = Average( var2, Len1 ) ;
                var5 = Average( var3, Len1 ) ;
                end ;
        if var5 > 0 then
                oFastD = var4 / var5 * 100
        else
                begin
                oFastD = 0 ;
                Stochastic = -1 ;
                end ;
        var7 = Len2 - CurrentBar ;
        condition1 = var7 > 0 and CurrentBar > 0 ;
        if condition1 then
                                                                                          
                oSlowD = ( Cum( oFastD ) + var7 * oFastD[ CurrentBar - 1 ] ) / Len2
        else
                oSlowD = Average( oFastD, Len2 ) ;
        end
else if SmoothingType = 2 then           
        begin
        oFastD = XAverage( oFastK, Len1 ) ;
        oSlowD = XAverageOrig( oFastD, Len2 ) ;
        end ;

oSlowK = oFastD ;
[/code]

页: [1]