The Stochastic Oscillator is a momentum indicator that aims to show price reversals by comparing the closing price to the price range.
Remarks
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
1
publicabstractinterfaceStochasticOscillator
Namespace
cAlgo.API.Indicators
Examples
123456
privateStochasticOscillator_stochastic;protectedoverridevoidInitialize(){// Initialize the Stochastic Oscillator indicator_stochastic=Indicators.StochasticOscillator(kPeriods,kSlowing,dPeriods,maType);}
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{// This sample cBot shows how to use the Stochastic Oscillator indicator[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassStochasticOscillatorSample:Robot{privatedouble_volumeInUnits;privateStochasticOscillator_stochasticOscillator;[Parameter("Volume (Lots)", DefaultValue = 0.01)]publicdoubleVolumeInLots{get;set;}[Parameter("Stop Loss (Pips)", DefaultValue = 10)]publicdoubleStopLossInPips{get;set;}[Parameter("Take Profit (Pips)", DefaultValue = 10)]publicdoubleTakeProfitInPips{get;set;}[Parameter("Label", DefaultValue = "Sample")]publicstringLabel{get;set;}publicPosition[]BotPositions{get{returnPositions.FindAll(Label);}}protectedoverridevoidOnStart(){_volumeInUnits=Symbol.QuantityToVolumeInUnits(VolumeInLots);_stochasticOscillator=Indicators.StochasticOscillator(9,3,9,MovingAverageType.Simple);}protectedoverridevoidOnBar(){if(_stochasticOscillator.PercentK.HasCrossedAbove(_stochasticOscillator.PercentD,0)&&_stochasticOscillator.PercentK.Last(1)<=20){ClosePositions(TradeType.Sell);ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}elseif(_stochasticOscillator.PercentK.HasCrossedBelow(_stochasticOscillator.PercentD,0)&&_stochasticOscillator.PercentK.Last(1)>=80){ClosePositions(TradeType.Buy);ExecuteMarketOrder(TradeType.Sell,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}}privatevoidClosePositions(TradeTypetradeType){foreach(varpositioninBotPositions){if(position.TradeType!=tradeType)continue;ClosePosition(position);}}}}
123456789
importclrclr.AddReference("cAlgo.API")fromcAlgo.APIimport*importmathclassTest():definitialize(self):# Initialize the Stochastic Oscillator indicator# KPeriods, KSlowing, DPeriods, and MaType are parameters defined in C# file of indicatorself.stochasticOscillator=api.Indicators.StochasticOscillator(api.KPeriods,api.KSlowing,api.DPeriods,api.MaType)
1 2 3 4 5 6 7 8 9101112131415161718192021222324
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*# Import trading wrapper functionsfromrobot_wrapperimport*classStochasticOscillatorSample():defon_start(self):self.volumeInUnits=api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)self.stochasticOscillator=api.Indicators.StochasticOscillator(api.KPeriods,api.KSlowing,api.DPeriods,api.MaType)defon_bar_closed(self):ifFunctions.HasCrossedAbove(self.stochasticOscillator.PercentK,self.stochasticOscillator.PercentD,0)andself.stochasticOscillator.PercentK.Last(1)<=api.DownValue:self.close_positions(TradeType.Sell)api.ExecuteMarketOrder(TradeType.Buy,api.SymbolName,self.volumeInUnits,api.Label,api.StopLossInPips,api.TakeProfitInPips)elifFunctions.HasCrossedBelow(self.stochasticOscillator.PercentK,self.stochasticOscillator.PercentD,0)andself.stochasticOscillator.PercentK.Last(1)>=api.UpValue:self.close_positions(TradeType.Buy)api.ExecuteMarketOrder(TradeType.Sell,api.SymbolName,self.volumeInUnits,api.Label,api.StopLossInPips,api.TakeProfitInPips)defget_bot_positions(self):returnapi.Positions.FindAll(api.Label)defclose_positions(self,tradeType):forpositioninself.get_bot_positions():ifposition.TradeType!=tradeType:continueapi.ClosePosition(position)
Properties
PercentD
Summary
%D is 3 Period Exponential Moving Average of %K.
Signature
1
publicabstractIndicatorDataSeriesPercentD{get;}
Return Value
IndicatorDataSeries
Examples
1
doubleresult=_stochastic.PercentK[index];
1
result=self.stochastic.PercentK[index]
PercentK
Summary
Calculation of %K is 100 multiplied by the ratio of the closing price minus the lowest price over the last N periods over the highest price over the last N minus the lowest price over the last N periods.