Overall Statistics
Total Trades
23
Average Win
0.34%
Average Loss
-0.04%
Compounding Annual Return
-1.813%
Drawdown
4.000%
Expectancy
5.412
Net Profit
-1.774%
Sharpe Ratio
-0.582
Loss Rate
33%
Win Rate
67%
Profit-Loss Ratio
8.62
Alpha
-0.005
Beta
-0.621
Annual Standard Deviation
0.03
Annual Variance
0.001
Information Ratio
-1.235
Tracking Error
0.03
Treynor Ratio
0.029
Total Fees
$23.00
from Alphas.ConstantAlphaModel import ConstantAlphaModel
from Risk.NullRiskManagementModel import NullRiskManagementModel

import pandas as pd
from datetime import timedelta
import decimal as d
import numpy as np
from datetime import datetime
from clr import AddReference

AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from QuantConnect.Data.UniverseSelection import *

class BasicTemplateFrameworkAlgorithm(QCAlgorithmFramework):

    def __init__(self):
        self.date = None
        
    def Initialize(self):

        self.UniverseSettings.Resolution = Resolution.Daily

        self.SetStartDate(2018, 1, 7)  #Set Start Date
        self.SetEndDate(2018, 12, 28)    #Set End Date
        self.SetCash(30000)             #Set Strategy Cash

        tickers = ["AAPL","FB", "SPY"]
        for x in tickers:
            self.AddEquity(x, Resolution.Daily)

        symbols = [ Symbol.Create(x, SecurityType.Equity, Market.USA) for x in tickers]
        self.universe = symbols
        self.SetUniverseSelection( ManualUniverseSelectionModel(symbols) )

        self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY",0), self.trade)

        self.SetAlpha(NullAlphaModel())
        self.SetPortfolioConstruction(NullPortfolioConstructionModel())
        self.SetExecution(NullExecutionModel())
        self.SetRiskManagement(NullRiskManagementModel())
       
        for x in tickers:
            self.rsi = self.RSI(x, 8)
        self.SetWarmUp(20)
        
    def trade(self):
        if self.IsWarmingUp: return
        for s in self.universe:
            if self.rsi.Current.Value < 35:
                self.SetHoldings(s,0.05)
            if self.Securities[str(s)].Invested:
                if self.rsi.Current.Value > 70:
                    self.Liquidate ()

    def OnOrderEvent(self, orderEvent):
        self.Log(str(orderEvent))
        
    def OnEndOfDay(self):
        self.Plot("Indicators","RSI", self.rsi.Current.Value)
##