StochasticOscillator Summary The Stochastic Oscillator is a momentum indicator that aims to show price reversals by comparing the closing price to the price range.
Calculates the range between the high and low price during a given period of time. The current price is then expressed as a percentage of this range with 0% indicating the bottom of the range and 100% indicating the top of the range over this time period. Based on the theory that prices tend to close near the boundaries of the recent range.
Signature public abstract interface StochasticOscillator
Namespace cAlgo.API.Indicators
Properties Examples Example 1 Example 2
private StochasticOscillator _stochastic ;
protected override void Initialize ()
{
// Initialize the Stochastic Oscillator indicator
_stochastic = Indicators . StochasticOscillator ( kPeriods , kSlowing , dPeriods , maType );
}
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
45
46
47
48
49
50
51
52
53 using cAlgo.API ;
using cAlgo.API.Indicators ;
namespace cAlgo.Robots
{
// This sample cBot shows how to use the Stochastic Oscillator indicator
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class StochasticOscillatorSample : Robot
{
private double _volumeInUnits ;
private StochasticOscillator _stochasticOscillator ;
[Parameter("Volume (Lots)", DefaultValue = 0.01)]
public double VolumeInLots { get ; set ; }
[Parameter("Stop Loss (Pips)", DefaultValue = 10)]
public double StopLossInPips { get ; set ; }
[Parameter("Take Profit (Pips)", DefaultValue = 10)]
public double TakeProfitInPips { get ; set ; }
[Parameter("Label", DefaultValue = "Sample")]
public string Label { get ; set ; }
public Position [] BotPositions
{
get
{
return Positions . FindAll ( Label );
}
}
protected override void OnStart ()
{
_volumeInUnits = Symbol . QuantityToVolumeInUnits ( VolumeInLots );
_stochasticOscillator = Indicators . StochasticOscillator ( 9 , 3 , 9 , MovingAverageType . Simple );
}
protected override void OnBar ()
{
if ( _stochasticOscillator . PercentK . HasCrossedAbove ( _stochasticOscillator . PercentD , 0 ) && _stochasticOscillator . PercentK . Last ( 1 ) <= 20 )
{
ClosePositions ( TradeType . Sell );
ExecuteMarketOrder ( TradeType . Buy , SymbolName , _volumeInUnits , Label , StopLossInPips , TakeProfitInPips );
}
else if ( _stochasticOscillator . PercentK . HasCrossedBelow ( _stochasticOscillator . PercentD , 0 ) && _stochasticOscillator . PercentK . Last ( 1 ) >= 80 )
{
ClosePositions ( TradeType . Buy );
ExecuteMarketOrder ( TradeType . Sell , SymbolName , _volumeInUnits , Label , StopLossInPips , TakeProfitInPips );
}
}
private void ClosePositions ( TradeType tradeType )
{
foreach ( var position in BotPositions )
{
if ( position . TradeType != tradeType ) continue ;
ClosePosition ( position );
}
}
}
}
Last update: January 30, 2023