Skip to content

HasCrossedBelow Method (2)

HasCrossedBelow (1 of 2)

Summary

Returns true, if dataseries1 has crossed below dataseries2, over the specified Period.

Remarks

HasCrossedBelow will compare the crossing dataseries to the crossed dataseries starting from the current value of the series going back the specified period. If period is zero only the current bar values will be compared. If period is one the current bar values will be compared as well as the previous. e.g. Functions.HasCrossedBelow(sma.Result, MarketSeries.Close, 0) will only compare the current values which are not completed until the close of the bar. It is not uncommon that the function will return true and by the end of the bar the two series will uncross.

Signature

1
public static bool HasCrossedBelow(DataSeries crossingSeries, DataSeries crossedSeries, int period)

Parameters

Name Type Description
crossingSeries DataSeries Crossing dataseries
crossedSeries DataSeries Crossed dataseries
period int Period for which to check for crossing

Return Value

bool

Declaring Type

cAlgo.API.Functions

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 //...
 SimpleMovingAverage sma;
 protected override void Initialize()
 {
     sma = Indicators.SimpleMovingAverage(source, period);
 }
 public override void Calculate(int index)
 {
     // IsRising returns true if the current value is greater
     // than the previous value in the data series
     if (Functions.IsRising(sma.Result))
     {
         //Do something
     }
     // IsFalling returns true if the current value is less
     // than the previous value in the data series
     else if(Functions.IsFalling(sma.Result))
     {
         // Do something else
     }
     else // sma is level
     {
         Do something else
     }
     //...
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 using cAlgo.API;
 using cAlgo.API.Indicators;
 namespace cAlgo
 {
     // This sample shows how to use the data series functions
     [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
     public class DataSeriesFunctionsSample : Indicator
     {
         private SimpleMovingAverage _smaFast, _smaSlow;
         protected override void Initialize()
         {
             _smaFast = Indicators.SimpleMovingAverage(Bars.ClosePrices, 9);
             _smaSlow = Indicators.SimpleMovingAverage(Bars.ClosePrices, 20);
         }
         public override void Calculate(int index)
         {
             if (_smaFast.Result.HasCrossedAbove(_smaSlow.Result, 1))
             {
                 // Fast MA crossed above slow MA
             }
             if (_smaFast.Result.HasCrossedBelow(_smaSlow.Result, 1))
             {
                 // Fast MA crossed below slow MA
             }
             if (_smaFast.Result.Maximum(10) > _smaSlow.Result.Maximum(10))
             {
                 // Fast MA last 10 values maximum is larger than slow MA last 10 values
             }
             if (_smaFast.Result.Minimum(10) < _smaSlow.Result.Minimum(10))
             {
                 // Fast MA last 10 values minimum is smaller than slow MA last 10 values
             }
             if (_smaFast.Result.IsFalling() && _smaSlow.Result.IsRising())
             {
                 // Fast MA is falling and slow MA is raising
                 // IsFalling and IsRising compares last two values of the data series
             }
             if (_smaFast.Result.Sum(10) > _smaSlow.Result.Sum(10))
             {
                 // Fast MA last 10 values sum is larger than slow MA last 109 values sum
             }
         }
     }
 }

HasCrossedBelow (2 of 2)

Summary

Checks if dataseries1 has crossed below the value, sometime within the specified period.

Remarks

HasCrossedBelow compares the crossing dataseries to the value starting from thecurrent value of the series going back the specified period.If period is zero, only the current bar value will be examined.If period is one, the current and previous bar value will be examined.e.g. Functions.HasCrossedAbove(sma.Result, value, 0)will only compare the current simple moving average series valuewhich is not completed until the close of the bar.It is not uncommon that the function will return true and by the end of the bar the series will uncross.

Signature

1
public static bool HasCrossedBelow(DataSeries crossingSeries, double value, int period)

Parameters

Name Type Description
crossingSeries DataSeries Crossing DataDeries
value double Price value to check if crossed
period int Period for which to check for crossing

Return Value

bool

Declaring Type

cAlgo.API.Functions

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 //...
 SimpleMovingAverage sma;
 protected override void Initialize()
 {
     sma = Indicators.SimpleMovingAverage(source, period);
 }
 public override void Calculate(int index)
 {
     // IsRising returns true if the current value is greater
     // than the previous value in the data series
     if (Functions.IsRising(sma.Result))
     {
         //Do something
     }
     // IsFalling returns true if the current value is less
     // than the previous value in the data series
     else if(Functions.IsFalling(sma.Result))
     {
         // Do something else
     }
     else // sma is level
     {
         Do something else
     }
     //...
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 using cAlgo.API;
 using cAlgo.API.Indicators;
 namespace cAlgo
 {
     // This sample shows how to use the data series functions
     [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
     public class DataSeriesFunctionsSample : Indicator
     {
         private SimpleMovingAverage _smaFast, _smaSlow;
         protected override void Initialize()
         {
             _smaFast = Indicators.SimpleMovingAverage(Bars.ClosePrices, 9);
             _smaSlow = Indicators.SimpleMovingAverage(Bars.ClosePrices, 20);
         }
         public override void Calculate(int index)
         {
             if (_smaFast.Result.HasCrossedAbove(_smaSlow.Result, 1))
             {
                 // Fast MA crossed above slow MA
             }
             if (_smaFast.Result.HasCrossedBelow(_smaSlow.Result, 1))
             {
                 // Fast MA crossed below slow MA
             }
             if (_smaFast.Result.Maximum(10) > _smaSlow.Result.Maximum(10))
             {
                 // Fast MA last 10 values maximum is larger than slow MA last 10 values
             }
             if (_smaFast.Result.Minimum(10) < _smaSlow.Result.Minimum(10))
             {
                 // Fast MA last 10 values minimum is smaller than slow MA last 10 values
             }
             if (_smaFast.Result.IsFalling() && _smaSlow.Result.IsRising())
             {
                 // Fast MA is falling and slow MA is raising
                 // IsFalling and IsRising compares last two values of the data series
             }
             if (_smaFast.Result.Sum(10) > _smaSlow.Result.Sum(10))
             {
                 // Fast MA last 10 values sum is larger than slow MA last 109 values sum
             }
         }
     }
 }

Last update: March 23, 2023