Overall Statistics
Total Trades
159
Average Win
1.18%
Average Loss
-1.47%
Compounding Annual Return
-15.515%
Drawdown
27.200%
Expectancy
-0.154
Net Profit
-14.376%
Sharpe Ratio
-0.52
Probabilistic Sharpe Ratio
3.686%
Loss Rate
53%
Win Rate
47%
Profit-Loss Ratio
0.81
Alpha
-0.122
Beta
0.183
Annual Standard Deviation
0.183
Annual Variance
0.034
Information Ratio
-0.845
Tracking Error
0.287
Treynor Ratio
-0.519
Total Fees
$18047.72
Estimated Strategy Capacity
$130000000.00
Lowest Capacity Asset
AMD R735QTJ8XC9X
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020,1,1)
        self.SetEndDate(2021,1,1)
        self.SetCash(1000000)

        # add securities 
        self.AddEquity("GOOG", Resolution.Daily)
        self.GOOG = self.Symbol("GOOG")
        self.AddEquity("AMZN", Resolution.Daily)
        self.AMZN = self.Symbol("AMZN")

        self.count = 0 

    def OnData(self, data: Slice):

        if self.count == 0:
            self.MarketOrder("GOOG", 6000)
            self.MarketOrder("AMZN",-8000)

        value = self.Portfolio.TotalPortfolioValue
        self.Log('Portfolio Value : ' + str(value))

        self.count += 1 

        if value < 900000:
            order_ids = self.Liquidate()
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020,1,1)
        self.SetEndDate(2021,1,1)
        self.SetCash(1000000)

        # add securities 
        self.AddEquity("GOOG", Resolution.Daily)
        self.AddEquity("AMZN", Resolution.Daily)

    def OnData(self, data: Slice):

        # get starting date prices
        if self.Time.day == 1 and self.Time.month == 1 and self.Time.year == 2020:
            self.AMZN_start = self.Securities["AMZN"].Price
            self.GOOG_start = self.Securities["GOOG"].Price

            self.LimitOrder("AMZN", -8000, 1.05 * self.AMZN_start)
            self.LimitOrder("GOOG", 6000, 0.95 * self.GOOG_start)

        value = self.Portfolio.TotalPortfolioValue
        if value < 900000:
            order_ids = self.Liquidate()

        value = self.Portfolio.TotalPortfolioValue
        if value < 900000:
            order_ids = self.Liquidate()
# region imports
from AlgorithmImports import *
# endregion

class MeasuredTanJackal(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020,1,1)
        self.SetEndDate(2021,1,1)
        self.SetCash(1000000)

        # add securities 
        self.AddEquity("GOOG", Resolution.Daily)
        self.AddEquity("AMZN", Resolution.Daily)

        self.amzn_orders = -5628
        self.goog_orders = round(self.amzn_orders * 3/4,0)

    def OnData(self, data: Slice):

        self.Debug(f"AMZN : {self.amzn_orders} \n GOOG : {self.goog_orders}")

        if self.Time.day == 1 and self.Time.year == 2020 and self.Time.month == 1:
            self.MarketOrder("AMZN", self.amzn_orders) 
            self.MarketOrder("GOOG", -self.goog_orders)
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    """
    1. (5 pts) Compute the Sharpe Ratio of a buy-and-hold strategy for each of the above stocks 
    individually for the given time period, that is, you need to compute four 
    Sharpe Ratios separately, one for each stock.
    """

    def Initialize(self):
        self.SetStartDate(2019,2,1)
        self.SetEndDate(2021,2,1)
        self.SetCash(1000000)

        #self.AddEquity('GS', Resolution.Daily)
        #self.AddEquity('MS', Resolution.Daily)
        #self.AddEquity('AMD', Resolution.Daily)
        self.AddEquity('XOM', Resolution.Daily)

    def OnData(self, data: Slice):

        #self.SetHoldings('GS', 1)
        #self.SetHoldings('MS', 1)
        #self.SetHoldings('AMD', 1)
        self.SetHoldings('XOM', 1)
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,2,1)
        self.SetEndDate(2021,2,1)
        self.SetCash(1000000)

        # just commenting and uncommenting the below to find the statistic for 
        # the relevant ticker

        #self.AddEquity('GS', Resolution.Daily)
        self.AddEquity('MS', Resolution.Daily)
        #self.AddEquity('AMD', Resolution.Daily)
        #self.AddEquity('XOM', Resolution.Daily)

        self.count = 0 
    
    def OnData(self, data: Slice):

        if self.count == 0:
            #self.SetHoldings('GS', 1)
            self.SetHoldings('MS', 1)
            #self.SetHoldings('AMD', 1)
            #self.SetHoldings('XOM', 1)
        
        value = self.Portfolio.TotalUnrealizedProfit
        stop_loss = 0.07 * 1000000
        self.count += 1

        # with 1MM starting value, equates to losing or gaining $70,000
        if (value <=  -stop_loss) or (value >= stop_loss):
            order = self.Liquidate()
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,2,1)
        self.SetEndDate(2021,2,1)
        self.SetCash(1000000)

        # just commenting and uncommenting the below to find the statistic for 
        # the relevant ticker

        self.AddEquity('GS', Resolution.Daily)
        self.AddEquity('MS', Resolution.Daily)
        #self.AddEquity('AMD', Resolution.Daily)
        #self.AddEquity('XOM', Resolution.Daily)

        self.count = 0 

    def OnData(self, data: Slice):

        if self.count == 0: 
            self.SetHoldings('GS', 0.5)
            self.SetHoldings('MS', -0.5)
            #self.SetHoldings('AMD', 1)
            #self.SetHoldings('XOM', 1)
        
        self.count += 1
    
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,2,1)
        self.SetEndDate(2021,2,1)
        self.SetCash(1000000)

        # just commenting and uncommenting the below to find the statistic for 
        # the relevant ticker

        self.AddEquity('GS', Resolution.Daily)
        self.AddEquity('MS', Resolution.Daily)
        self.AddEquity('AMD', Resolution.Daily)
        self.AddEquity('XOM', Resolution.Daily)

        self.count = 0 

    def OnData(self, data: Slice):

        if self.count == 0:
            self.SetHoldings('GS', 0.25)
            self.SetHoldings('MS', -0.25)
            self.SetHoldings('AMD', 0.25)
            self.SetHoldings('XOM', -.25)

        self.count += 1
        
#region imports
from AlgorithmImports import *
#endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,8,20)
        self.SetEndDate(2020,7,20)
        self.SetCash(2000000)

        self.ticker ='ROKU'
        self.sym = self.AddEquity(self.ticker, Resolution.Daily) #S1
        self.sma = self.SMA(self.ticker, 20, Resolution.Daily)

        self.port = False

        if self.port:
            self.wt = 0.25 # if we have two stocks, each wt will be 25%
        else:
             self.wt = 0.5 # single stock wt 50%

    def OnData(self, data: Slice):
        
        ind = self.sma.Current.Value

        if not self.Portfolio[self.ticker].Invested:
            if self.sym.Price > ind:
                self.SetHoldings(self.sym.Symbol, self.wt)
            elif self.sym.Price < ind:
                self.SetHoldings(self.sym.Symbol, -self.wt)
        elif (self.Portfolio[self.ticker].IsLong and self.sym.Price< ind) or (self.Portfolio[self.ticker].IsShort and self.sym.Price> ind):
            self.SetHoldings(self.sym.Symbol, 0.0)
    
#region imports
from AlgorithmImports import *
#endregion
class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,8,20)
        self.SetEndDate(2020,7,20)
        self.SetCash(2000000)

        self.ticker1 ='AMD'
        self.sym1 = self.AddEquity(self.ticker1, Resolution.Daily) #S1
        self.sma = self.SMA(self.ticker1, 20, Resolution.Daily)

        self.port = False

        if self.port:
            self.wt = 0.25 # if we have two stocks, each wt will be 25%
        else:
             self.wt = 0.5 # single stock wt 50%

    def OnData(self, data: Slice):
        
        ind1 = self.sma.Current.Value

        if not self.Portfolio[self.ticker1].Invested:
            if self.sym1.Price > ind1: 
                self.SetHoldings(self.sym1.Symbol, -self.wt)
            elif self.sym1.Price < ind1:
                self.SetHoldings(self.sym1.Symbol, self.wt)
        elif self.Portfolio[self.ticker1].IsLong and self.sym1.Price< ind1 or self.Portfolio[self.ticker1].IsShort and self.sym1.Price> ind1:
            self.SetHoldings(self.sym1.Symbol, 0.0)    

    
# region imports
from AlgorithmImports import *
# endregion

class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,8,20)
        self.SetEndDate(2020,7,20)
        self.SetCash(2000000)

        self.ticker1 ='ROKU'
        self.sym1 = self.AddEquity(self.ticker1, Resolution.Daily) #S1
        self.sma1 = self.SMA(self.ticker1, 20, Resolution.Daily)

        self.ticker2 = 'AMD'
        self.sym2 = self.AddEquity(self.ticker2, Resolution.Daily) #S2
        self.sma2 = self.SMA(self.ticker2, 20, Resolution.Daily)

        self.port = True

        if self.port:
            self.wt = 0.25 # if we have two stocks, each wt will be 25%
        else:
             self.wt = 0.5 # single stock wt 50%

    def OnData(self, data: Slice):
        
        ind1 = self.sma1.Current.Value
        ind2 = self.sma2.Current.Value

        self.Debug("Price1 " + str(self.sym1.Price) + "indicator " +str(ind1))
        self.Debug("Price2 " + str(self.sym2.Price) + "indicator " +str(ind2))

        if not self.Portfolio[self.ticker1].Invested:
            if self.sym1.Price > ind1:
                self.SetHoldings(self.sym1.Symbol, self.wt)
            elif self.sym1.Price < ind1:
                self.SetHoldings(self.sym1.Symbol, -self.wt)
        elif self.Portfolio[self.ticker1].IsLong and self.sym1.Price< ind1 or \
            self.Portfolio[self.ticker1].IsShort and self.sym1.Price> ind1:
            self.SetHoldings(self.sym1.Symbol, 0.0)

        #Trend-reversal Strategy for self.ticker1
        if self.port:
            if not self.Portfolio[self.ticker2].Invested:
                if self.sym2.Price > ind2:
                    self.SetHoldings(self.sym2.Symbol, -self.wt)
                elif self.sym2.Price <ind2:
                    self.SetHoldings(self.sym2.Symbol, self.wt)
            elif self.Portfolio[self.ticker2].IsLong and self.sym2.Price< ind2 or \
                self.Portfolio[self.ticker2].IsShort and self.sym2.Price> ind2:
                self.SetHoldings(self.sym2.Symbol, 0.0)

    
#region imports
from AlgorithmImports import *
#endregion
class EnergeticYellowGreenGiraffe(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019,8,20)
        self.SetEndDate(2020,7,20)
        self.SetCash(2000000)

        self.ticker1 ='AMD'
        self.sym1 = self.AddEquity(self.ticker1, Resolution.Daily) #S1
        self.sma = self.SMA(self.ticker1, 20, Resolution.Daily)

        self.port = False

        if self.port:
            self.wt = 0.25 # if we have two stocks, each wt will be 25%
        else:
             self.wt = 0.5 # single stock wt 50%

    def OnData(self, data: Slice):
        
        ind1 = self.sma.Current.Value

        if not self.Portfolio[self.ticker1].Invested:
            if self.sym1.Price > ind1: 
                self.SetHoldings(self.sym1.Symbol, -self.wt)
            elif self.sym1.Price < ind1:
                self.SetHoldings(self.sym1.Symbol, self.wt)
        elif self.Portfolio[self.ticker1].IsLong and self.sym1.Price< ind1 or self.Portfolio[self.ticker1].IsShort and self.sym1.Price> ind1:
            self.SetHoldings(self.sym1.Symbol, 0.0)