Overall Statistics
Total Trades
272
Average Win
0.01%
Average Loss
0.00%
Compounding Annual Return
-24.366%
Drawdown
0.300%
Expectancy
-0.970
Net Profit
-0.306%
Sharpe Ratio
-15.538
Probabilistic Sharpe Ratio
0%
Loss Rate
99%
Win Rate
1%
Profit-Loss Ratio
2.64
Alpha
-0.197
Beta
-0.051
Annual Standard Deviation
0.015
Annual Variance
0
Information Ratio
-13.628
Tracking Error
0.059
Treynor Ratio
4.406
Total Fees
$272.00
Estimated Strategy Capacity
$1000.00
Lowest Capacity Asset
CHPMW XB2MASNUBG4L
# region imports
from AlgorithmImports import *
from QuantConnect.DataSource import *
# endregion

class CrawlingMagentaAlbatross(QCAlgorithm):

    def Initialize(self):
#        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Cash)
        self.SetStartDate(2022, 1, 1)  # Set Start Date
        self.SetEndDate(2022, 1, 4)
        self.SetCash(100000)  # Set Strategy Cash
        self.AddUniverse(self.SelectCoarse)
        self.AddEquity("SPY", Resolution.Minute)

        self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 1), self.updateOpenPrice)
        self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY", 10), self.onMarketClose)


        self.opening_price ={}
        self.symbols_below_k = []
        self.count = 0

    def SelectCoarse(self, coarse):
        allSymbols = sorted(coarse, key=lambda c:c.DollarVolume, reverse=True)

        self.symbols_below_k = [s.Symbol for s in allSymbols if s.Price < 1000]

        return self.symbols_below_k

    def OnSecuritiesChanged(self, changes: SecurityChanges):
        for security in changes.AddedSecurities:
            self.opening_price[security.Symbol] = {'MarketOpenPrice': 0.0}

    def OnData(self, data):
        if not self.Portfolio.Invested:
            for x in self.opening_price:
                if self.opening_price[x]['MarketOpenPrice'] == 0.0:
                    continue
                if float(self.Securities[x].Price) > 1.1 * float(self.opening_price[x]['MarketOpenPrice']):
                    self.MarketOrder(x, 1)
                    self.count += 1
                    self.Log("[{t}] {x}: openPrice: {o} buyingPrice: {b}".format(t=self.Time, x=x, o=self.opening_price[x]['MarketOpenPrice'], b=self.Securities[x].Price))

    def onMarketClose(self):
        self.Log("End day. Liquidating!")

        self.Liquidate()
        self.Log("Count: {c}".format(c=self.count))

    def updateOpenPrice(self):
        for x in self.opening_price:
            self.opening_price[x] = {'MarketOpenPrice': float(self.Securities[x].Price)}