| Overall Statistics |
|
Total Trades 7 Average Win 0% Average Loss 0% Compounding Annual Return 0.145% Drawdown 2.600% Expectancy 0 Net Profit 0.036% Sharpe Ratio 0.045 Probabilistic Sharpe Ratio 28.511% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.024 Beta 0.215 Annual Standard Deviation 0.041 Annual Variance 0.002 Information Ratio 0.744 Tracking Error 0.141 Treynor Ratio 0.009 Total Fees $7.00 Estimated Strategy Capacity $170000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
# region imports
from AlgorithmImports import *
import pandas as pd
import numpy as np
from datetime import time, datetime, timedelta
# endregion
class CombinedAlgorithm(QCAlgorithm):
def Initialize(self):
# INITIALIZE
self.SetStartDate(2022, 1, 1) # Set Start Date
self.SetEndDate(2022, 4, 1)
self.SetCash(10000) # Set Strategy Cash
self.spy = self.AddEquity('SPY', Resolution.Minute)
self.spy.SetDataNormalizationMode(DataNormalizationMode.Raw)
# SCHEDULED EVENTS
self.Schedule.On(self.DateRules.WeekStart("SPY"), self.TimeRules.AfterMarketOpen("SPY",1), self.WeekStart)
self.Schedule.On(self.DateRules.WeekEnd("SPY"), self.TimeRules.BeforeMarketClose("SPY"), self.WeekEnd)
# TOGGLES
# self.short_ema_trail = True
self.invest = False
self.weekly_trigger = False
# VARIABLES
self.trigger_week_high = 0
self.trigger_week_low = 0
self.SetWarmUp(timedelta(days = 20))
weeklyConsolidator = TradeBarConsolidator(timedelta(weeks=1))
self.SubscriptionManager.AddConsolidator(self.spy.Symbol, weeklyConsolidator)
weeklyConsolidator.DataConsolidated += self.OnTwoWeekBar
self.weekBarWindow = RollingWindow[TradeBar](1) # 2
# CUSTOM CHART
log_plot = Chart('Custom Chart')
log_plot.AddSeries(Series('Orders',SeriesType.Scatter,0))
log_plot.AddSeries(Series('Spy Price', SeriesType.Line,0))
self.AddChart(log_plot)
def Rebalance(self):
if self.IsWarmingUp:
return
def OnData(self, data):
# VARIABLES
spy_price = self.Securities[self.spy.Symbol].Price
held_stocks = self.Portfolio[self.spy.Symbol].Quantity
shares_to_buy = int(self.Portfolio.Cash / self.Securities[self.spy.Symbol].Price)
profit = self.Portfolio[self.spy.Symbol].UnrealizedProfitPercent
if self.weekly_trigger and (spy_price > self.trigger_week_high) and self.invest:
self.MarketOrder(self.spy.Symbol, (shares_to_buy*0.1))
self.invest = False
self.weekly_trigger = False
self.Log(f'{self.trigger_week_high} previous weeks high ORDER')
def OnTwoWeekBar(self, sender, bar):
self.weekBarWindow.Add(bar)
if not self.weekBarWindow.IsReady:
return
trigger_week = self.weekBarWindow[0]
self.trigger_week_high = trigger_week.High
self.trigger_week_low = trigger_week.Low
self.Log(f'{self.trigger_week_high} previous weeks high')
def WeekStart(self):
self.weekly_trigger = True
self.invest = True
def WeekEnd(self):
if self.weekly_trigger:
self.weekly_trigger = False
self.invest = False
def OnOrderEvent(self, orderEvent):
if orderEvent.FillQuantity == 0:
return
fetched = self.Transactions.GetOrderById(orderEvent.OrderId)
symbol = orderEvent.Symbol
fill_price = orderEvent.FillPrice