Summary
Bollinger Bands are used to confirm signals. The bands indicate overbought and oversold levels relative to a moving average.
Remarks
Bollinger bands widen in volatile market periods, and contract during less volatile periods. Tightening of the bands is often used a signal that there will shortly be a sharp increase in market volatility.
Syntax
public interface BollingerBands
Members
Name | Type | Summary |
---|---|---|
Bottom | Property | Lower Bollinger Band. |
Main | Property | Moving Average (Middle Bollinger Band). |
Top | Property | Upper Bollinger Band. |
Example 1
//... [Robot] public class SampleRobot : Robot //... [Parameter("Source")] public DataSeries Source { get; set; } [Parameter("BandPeriods", DefaultValue = 14)] public int BandPeriod { get; set; } [Parameter("Std", DefaultValue = 14)] public int std { get; set; } [Parameter("MAType")] public MovingAverageType MAType { get; set; } //... private BollingerBands boll; //... protected override void OnStart() { boll = Indicators.BollingerBands(Source,BandPeriod,std,MAType); } protected override void OnBar() { Print("Current Main Bollinger Band's price is: {0}", boll.Main.LastValue); Print("Current Bottom Bollinger Band's price is: {0}", boll.Bottom.LastValue); Print("Current Top Bollinger Band's price is: {0}", boll.Top.LastValue); } //...
Example 2
using cAlgo.API; using cAlgo.API.Indicators; namespace cAlgo.Robots { /// /// This sample cBot shows how to use the Bollinger Bands indicator /// [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class BollingerBandsSample : Robot { private double _volumeInUnits; private BollingerBands _bollingerBands; [Parameter("Volume (Lots)", DefaultValue = 0.01)] public double VolumeInLots { get; set; } [Parameter("Label", DefaultValue = "Sample")] public string Label { get; set; } [Parameter("Source")] public DataSeries Source { get; set; } public Position[] BotPositions { get { return Positions.FindAll(Label); } } protected override void OnStart() { _volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots); _bollingerBands = Indicators.BollingerBands(Source, 14, 2, MovingAverageType.Exponential); } protected override void OnBar() { if (Bars.LowPrices.Last(1) <= _bollingerBands.Bottom.Last(1) && Bars.LowPrices.Last(2) > _bollingerBands.Bottom.Last(2)) { ClosePositions(TradeType.Sell); ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label); } else if (Bars.HighPrices.Last(1) >= _bollingerBands.Top.Last(1) && Bars.HighPrices.Last(2) < _bollingerBands.Top.Last(2)) { ClosePositions(TradeType.Buy); ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label); } } private void ClosePositions(TradeType tradeType) { foreach (var position in BotPositions) { if (position.TradeType != tradeType) continue; ClosePosition(position); } } } }