Overall Statistics
Total Trades
193
Average Win
2.34%
Average Loss
-3.80%
Compounding Annual Return
14.621%
Drawdown
30.800%
Expectancy
0.212
Net Profit
98.137%
Sharpe Ratio
0.746
Probabilistic Sharpe Ratio
24.314%
Loss Rate
25%
Win Rate
75%
Profit-Loss Ratio
0.62
Alpha
0
Beta
0.922
Annual Standard Deviation
0.242
Annual Variance
0.059
Information Ratio
-0.086
Tracking Error
0.171
Treynor Ratio
0.196
Total Fees
$263.64
Estimated Strategy Capacity
$290000000.00
Lowest Capacity Asset
AAPL R735QTJ8XC9X
from QuantConnect.Indicators import *
import decimal as d

### <summary>
### In this example we are looking for price to breakout above the bollinger bands
### and look to buy when we see that. We hold our position until price touches the 
### middle band of the bollinger bands.
###

class BollingerBreakoutAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2016, 9, 22)  #Set Start Date
        self.SetCash(10000)             #Set Strategy Cash
        #self.SetBrokerageModel(BrokerageName.GDAX)
        
        self.target_stock = "AAPL"
        
        self.AddEquity(self.target_stock, Resolution.Hour)
        
        # create a bollinger band
        self.Bolband = self.BB(self.target_stock, 20, 2, MovingAverageType.Simple, Resolution.Hour);

        # Plot Bollinger band
        self.PlotIndicator(
            "Indicators",
            self.Bolband.LowerBand,
            self.Bolband.MiddleBand,
            self.Bolband.UpperBand
        )
        
        # set warmup period
        self.SetWarmUp(20)

    def OnData(self, data):
        
        holdings = self.Portfolio[self.target_stock].Quantity
        price = self.Securities[self.target_stock].Close
        
        self.Plot("Indicators", "Close", price);
        
        # buy if price closes above upper bollinger band
        if holdings <= 0:
             if price < self.Bolband.LowerBand.Current.Value:
                self.SetHoldings(self.target_stock, 1.0)
        
        # sell if price closes below middle bollinger band
        if holdings > 0 and price > self.Bolband.UpperBand.Current.Value:
                self.Liquidate()