| Overall Statistics |
|
Total Trades 2 Average Win 1.24% Average Loss 0% Compounding Annual Return 89.975% Drawdown 0.800% Expectancy 0 Net Profit 1.238% Sharpe Ratio 11.074 Probabilistic Sharpe Ratio 99.836% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.695 Beta 0.076 Annual Standard Deviation 0.061 Annual Variance 0.004 Information Ratio 4.025 Tracking Error 0.218 Treynor Ratio 8.898 Total Fees $3.05 |
import datetime
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from time import sleep
class ControllClass(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 9, 20) # Set Start Date
self.SetEndDate(2020, 9, 26)
self.SetCash(100000) # Set Strategy Cash
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Cash)
self.Settings.FreePortfolioPercentage = 0.8
self.weekDays = ("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
self.symbols = []
self.openAt = datetime.time(15,55)
self.spy = self.AddEquity("SPY").Symbol
self.symbols.append(self.spy)
self.gld = self.AddEquity("GLD").Symbol
self.symbols.append(self.gld)
self.Schedule.On(self.DateRules.Every(
DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Friday),
self.TimeRules.BeforeMarketClose(self.spy, 21), self.closePositions)
self.sma = self.SMA(self.spy, 34, Resolution.Daily)
self.SetWarmUp(timedelta(days=34))
self.traded = False
def OnData(self, data):
if self.IsWarmingUp: return
if not self.Time.time() >= self.openAt: return
self.Plot("Portfolio", "Cash", self.Portfolio.Cash)
self.Plot("Portfolio", "UnsettledCash", self.Portfolio.UnsettledCash)
if self.Time.weekday() == 0 and not self.traded:
if not self.Portfolio[self.spy].Invested and data[self.spy].Close < self.sma.Current.Value:
self.SetHoldings(self.spy, 1, True)
self.traded = True
def closePositions(self):
if self.Portfolio.Invested:
self.Liquidate()
self.Log(f"Liquidated at {self.Time}")
def OnOrderEvent(self, event):
if event.Quantity == 0: return
self.Debug(str(event))