Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from QuantConnect.Data.Market import TradeBar


class RollingWindowAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2013, 6, 1)  #Set Start Date
        self.SetEndDate(2017, 7, 1)    #Set End Date
        self.SetCash(10000)             #Set Strategy Cash
        self.SetBrokerageModel(BrokerageName.FxcmBrokerage)
        self.AddForex("EURUSD", Resolution.Daily)
        
        self.window = RollingWindow[QuoteBar](2)
        
        # create a bollinger band
        self.Bolband = self.BB("EURUSD", 20, 0.75, MovingAverageType.Simple, Resolution.Daily)
        
        self.BolbandWin = RollingWindow[IndicatorDataPoint](5)
        
        # set warmup period
        self.SetWarmUp(20)
        
        
    def BolbandUpdated(self, sender, updated):
        '''Adds updated values to rolling window'''
        self.Updated += self.BolbandUpdated
        self.BolbandsWin.Add(updated)
        

    def OnData(self, data):
        
        self.window.Add(data["EURUSD"])
        if not (self.window.IsReady and self.BolbandWin.IsReady): return
        
        
        holdings = self.Portfolio["EURUSD"].Quantity
        price = self.window[0]
        
        previousPrice = self.window[1]
        
        if holdings <= 0:
             
             if previousPrice <= self.Bolband.LowerBand.Current.Value and price > self.Bolband.LowerBand.Current.Value:
                self.SetHoldings("EURUSD", 1.0)
               
        
        if holdings > 0:
            
            if previousPrice >= self.Bolband.UpperBand.Current.Value and price < self.Bolband.UpperBand.Current.Value:
                self.Liquidate()
                
            if previousPrice <= self.Bolband.LowerBand.Current.Value and price > self.Bolband.LowerBand.Current.Value:
                self.SetHoldings("EURUSD", 1.0)