Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
-4.497%
Drawdown
14.000%
Expectancy
0
Net Profit
-4.473%
Sharpe Ratio
-0.293
Probabilistic Sharpe Ratio
6.024%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.109
Beta
0.554
Annual Standard Deviation
0.093
Annual Variance
0.009
Information Ratio
-1.929
Tracking Error
0.091
Treynor Ratio
-0.049
Total Fees
$74.65
Estimated Strategy Capacity
$38000000.00
Lowest Capacity Asset
XON R735QTJ8XC9X
# region imports
from AlgorithmImports import *
# endregion

class SquareGreenRhinoceros(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2017, 1, 1)  # Set Start Date
        self.SetEndDate(2018, 1, 1)  # Set Start Date
        self.SetCash(1000000)  # Set Strategy Cash
        ms = self.AddEquity("MS", Resolution.Daily).Symbol
        xom = self.AddEquity("XOM", Resolution.Daily).Symbol
        spy = self.AddEquity("SPY", Resolution.Daily).Symbol

        self.series = {}
        self.InitChart('MS')
        self.InitChart('XOM')
        self.InitChart('SPY')

        self.ind = {}
        self.InitIndicators(ms.Value, 5)
        self.InitIndicators(xom.Value, 5)
        self.InitIndicators(spy.Value, 5)

    def InitChart(self, name):
        chart = Chart(name + ' Stats')
        self.AddChart(chart)

        self.series[name + ' SharpRatio'] = Series(name + ' SharpRatio', SeriesType.Line, 'r/v', Color.Blue)
        # The log return are in reality the logarithmic of compound returns
        # which by logarithmic propieties end up being the substraction
        # of the logarithm on current price minus price on day cero for a given period
        self.series[name + ' Log Return'] = Series(name + ' Log Return', SeriesType.Line, '', Color.Green)
        self.series[name + ' STD'] = Series(name + ' STD', SeriesType.Line, '', Color.Red)
    
        chart.AddSeries(self.series[name + ' SharpRatio'])
        chart.AddSeries(self.series[name + ' Log Return'])
        chart.AddSeries(self.series[name + ' STD'])

    def InitIndicators(self, symbol, period):

        # Create indicators
        self.ind[symbol+'_logr'] = LogReturn(symbol+'_logr',period)
        self.RegisterIndicator(symbol, self.ind[symbol+'_logr'], Resolution.Daily)

        self.ind[symbol+'_sr'] = SharpeRatio(symbol+'_sr',period, 0)
        self.RegisterIndicator(symbol, self.ind[symbol+'_sr'], Resolution.Daily)
        
        self.ind[symbol+'_std'] = StandardDeviation(symbol+'_std',period)
        self.RegisterIndicator(symbol, self.ind[symbol+'_std'], Resolution.Daily)

        

        self.logr = self.LOGR(symbol, 1)

    def OnData(self, data: Slice):
        if not self.Portfolio.Invested:
            self.SetHoldings("MS", self.GetParameter('w_ms'))
            self.SetHoldings("XOM", self.GetParameter('w_xom'))
            self.SetHoldings("SPY", self.GetParameter('w_spy'))

        self.PlotPoints('MS')
        self.PlotPoints('XOM')
        self.PlotPoints('SPY')
    def PlotPoints(self, symbol):
        self.series[symbol + ' Log Return'].AddPoint(self.Time,self.ind[symbol+'_logr'].Current.Value)
        self.series[symbol + ' SharpRatio'].AddPoint(self.Time,self.ind[symbol+'_sr'].Current.Value)
        self.series[symbol + ' STD'].AddPoint(self.Time,self.ind[symbol+'_std'].Current.Value)