Overall Statistics
Total Trades
40
Average Win
1037.21%
Average Loss
-5.15%
Compounding Annual Return
229.860%
Drawdown
70.900%
Expectancy
35.807
Net Profit
1705.240%
Sharpe Ratio
2.833
Probabilistic Sharpe Ratio
89.133%
Loss Rate
82%
Win Rate
18%
Profit-Loss Ratio
201.44
Alpha
1.698
Beta
0.032
Annual Standard Deviation
0.617
Annual Variance
0.38
Information Ratio
0.208
Tracking Error
0.907
Treynor Ratio
55.398
Total Fees
$478.73
Estimated Strategy Capacity
$2800000.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):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''

        self.SetStartDate(2016,6,1)   #Set Start Date
        self.SetEndDate(2018,11,1)    #Set End Date
        self.SetCash(1000)            #Set Strategy Cash
      
        self.symbol= "BTCUSD"
        btc = self.AddCrypto("BTCUSD", Resolution.Daily,Market.GDAX)
        btc.SetLeverage(1)
        
        self.period = 200
        self.sma = self.SMA(self.symbol,self.period )
        
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
        #self.SetBrokerageModel(BrokerageName.AlphaStreams)
        self.real_wt = {}
        self.invested = 0
        self.Schedule.On(self.DateRules.MonthStart("BTCUSD"), self.TimeRules.BeforeMarketClose("BTCUSD",0),self.deposit)
    def deposit(self):
        self.Portfolio.CashBook["USD"].AddAmount(100)
        self.invested += 100

    def OnData(self, data):
        close = self.Securities[self.symbol].Close
        
        if close > self.sma.Current.Value:
            self.SetHoldings(self.symbol, 1)
            
        else:
            self.SetHoldings(self.symbol, 0)
            #self.SetHoldings([PortfolioTarget(self.symbol, 0)])
            #self.Liquidate()
            
            
    def OnEndOfDay(self): 
        account_leverage = self.Portfolio.TotalHoldingsValue / self.Portfolio.TotalPortfolioValue
        self.Plot('Holdings', 'leverage', round(account_leverage, 2)) 
        
        for sec, weight in self.Portfolio.items(): 
            self.real_wt[sec] = round(self.ActiveSecurities[sec].Holdings.Quantity * self.Securities[sec].Price / self.Portfolio.TotalPortfolioValue,4)
            self.Plot('Holdings', self.Portfolio[sec].Symbol.Value, round(self.real_wt[sec], 2))