| Overall Statistics |
|
Total Trades 5 Average Win 0% Average Loss 0% Compounding Annual Return 48.930% Drawdown 0.900% Expectancy 0 Net Profit 3.516% Sharpe Ratio 5.336 Probabilistic Sharpe Ratio 90.939% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.141 Beta 0.355 Annual Standard Deviation 0.061 Annual Variance 0.004 Information Ratio -2.428 Tracking Error 0.081 Treynor Ratio 0.921 Total Fees $5.00 Estimated Strategy Capacity $73000000.00 Lowest Capacity Asset AAPL R735QTJ8XC9X |
# region imports
from AlgorithmImports import *
import pandas as pd
import numpy as np
from datetime import time, datetime, timedelta
# endregion
class MyAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 3, 15) # Set Start Date
self.SetEndDate(2021, 4, 15)
self.SetCash(100000) # Set Strategy Cash
self.symbol = self.AddEquity('AAPL', Resolution.Minute)
self.symbol.SetDataNormalizationMode(DataNormalizationMode.Raw)
self.invest = False
self.sell = True
self.liquidate = True
self.potential_buy = False
self.indicator_week = False
self.indicator_day = 0
self.indicatorHigh = 0
self.indicatorWeekHigh = 0
dailyConsolidator = TradeBarConsolidator(timedelta(days=1))
self.SubscriptionManager.AddConsolidator(self.symbol.Symbol, dailyConsolidator)
dailyConsolidator.DataConsolidated += self.OnTwoDayBar
self.barWindow = RollingWindow[TradeBar](2)
weeklyConsolidator = TradeBarConsolidator(Calendar.Weekly)
self.SubscriptionManager.AddConsolidator(self.symbol.Symbol, weeklyConsolidator)
weeklyConsolidator.DataConsolidated += self.OnTwoWeekBar
self.weekBarWindow = RollingWindow[TradeBar](2)
def OnData(self, data):
self.Plot('Custom Chart', 'symbol Price', self.Securities[self.symbol.Symbol].Close)
profit = self.Portfolio[self.symbol.Symbol].UnrealizedProfitPercent
symbol_price = self.Securities[self.symbol.Symbol].Price
if (self.indicator_day == self.Time.day) and (symbol_price > self.indicatorHigh) and self.potential_buy:
shares_to_buy = int(self.Portfolio.Cash / data[self.symbol.Symbol].Open)
self.MarketOrder(self.symbol.Symbol, (shares_to_buy*0.1))
self.potential_buy = False
if (symbol_price > self.indicatorWeekHigh) and self.indicator_week:
shares_to_buy = int(self.Portfolio.Cash / data[self.symbol.Symbol].Open)
self.MarketOrder(self.symbol.Symbol, (shares_to_buy*0.1))
self.potential_buy = False
def OnTwoDayBar(self, sender, bar):
self.barWindow.Add(bar)
if not self.barWindow.IsReady:
return
indicatorBar = self.barWindow[0]
previousBar = self.barWindow[1]
self.indicatorHigh = indicatorBar.High
indicatorLow = indicatorBar.Low
previousHigh = previousBar.High
previousLow = previousBar.Low
# Inside Bar
if (self.indicatorHigh < previousHigh) and (indicatorLow > previousLow):
self.indicator_day = self.Time.day
self.potential_buy = True
# 2Down
if (self.indicatorHigh < previousHigh) and (indicatorLow < previousLow):
self.indicator_day = self.Time.day
self.potential_buy = True
def OnTwoWeekBar(self, sender, bar):
self.barWindow.Add(bar)
if not self.barWindow.IsReady:
return
indicatorBar = self.barWindow[0]
previousBar = self.barWindow[1]
self.indicatorWeekHigh = indicatorBar.High
indicatorLow = indicatorBar.Low
previousHigh = previousBar.High
previousLow = previousBar.Low
# Inside Bar
if (self.indicatorWeekHigh < previousHigh) and (indicatorLow > previousLow):
self.indicator_week = True
# 2Down
if (self.indicatorHigh < previousHigh) and (indicatorLow < previousLow):
self.indicator_week = True