| Overall Statistics |
|
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -89.043% Drawdown 9.600% Expectancy 0 Net Profit -2.394% Sharpe Ratio -1.059 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -11.27 Beta 147.26 Annual Standard Deviation 0.889 Annual Variance 0.791 Information Ratio -1.146 Tracking Error 0.883 Treynor Ratio -0.006 Total Fees $8.31 Estimated Strategy Capacity $57000000.00 Lowest Capacity Asset AMC VMGNNM1SRKH1 |
class EMAMomentumUniverse(QCAlgorithm):
def Initialize(self):
self.SetBrokerageModel(BrokerageName.AlphaStreams)
self.positionSize = 0.9
self.SetStartDate(2021, 6, 28)
self.SetCash(100000)
self.UniverseSettings.Resolution = Resolution.Daily
self.bull = self.AddEquity("QQQ", Resolution.Second)
self.amc = self.AddEquity("AMC", Resolution.Second)
self.amc.SetDataNormalizationMode(DataNormalizationMode.Raw)
self.isAlreadyExecute = False
self.SetWarmup(100)
# quantity = self.CalculateOrderQuantity(self.amc.Symbol, -self.positionSize)
# self.MarketOrder(self.amc.Symbol, quantity, False, "New pos size {}".format(-self.positionSize))
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.Every(timedelta(minutes=1)),
self.CheckForEntries)
def CheckForEntries(self):
if not self.isAlreadyExecute:
quantity = self.CalculateOrderQuantity(self.amc.Symbol, -self.positionSize)
self.MarketOrder(self.amc.Symbol, quantity, False, "New pos size {}".format(-self.positionSize))
self.isAlreadyExecute = True
class LiquidUniverseSelection(QCAlgorithm):
symbol = "AAME"
isLast = False
x = 2
lastPredictClose = 0
lastClose = 0
stopMarketTicket = None
highestPrice = -1
def Initialize(self):
self.SetStartDate(2021, 2, 5)
self.SetEndDate(2021, 2, 5)
# self.SetEndDate(2021, 3, 5)
self.SetCash(1600)
aame = self.AddEquity(self.symbol, Resolution.Second)
aame.SetDataNormalizationMode(DataNormalizationMode.Raw)
def OnData(self, slice):
if self.Time.hour > 11:
return
close = slice.Bars[self.symbol].Close
quoteBar = slice.QuoteBars[self.symbol]
avgBid = quoteBar.Bid.Low + (quoteBar.Bid.High - quoteBar.Bid.Low) / 2
avgAsk = quoteBar.Ask.Low + (quoteBar.Ask.High - quoteBar.Ask.Low) / 2
bidAskQuoteSkewClose = (avgBid * quoteBar.LastBidSize + avgAsk * quoteBar.LastAskSize)/(quoteBar.LastBidSize + quoteBar.LastAskSize)
# Buy if predictedPrice > close
difference = ((bidAskQuoteSkewClose - close)/close) * 100
if not self.Portfolio[self.symbol].Invested:
if difference > self.x:
self.SetHoldings(self.symbol, 1)
elif self.Portfolio[self.symbol].Invested:
if self.Portfolio[self.symbol].Price > self.highestPrice:
self.highestPrice = self.Portfolio[self.symbol].Price
if self.stopMarketTicket is None:
self.stopMarketTicket = self.StopMarketOrder(self.symbol, -self.Portfolio[self.symbol].Quantity, 0.9 * self.Portfolio[self.symbol].Price)
else:
# self.Log(self.stopMarketTicket.Get(OrderField.StopPrice))
self.Log(self.highestPrice)
updateFields = UpdateOrderFields()
updateFields.StopPrice = 0.9 * self.Portfolio[self.symbol].Price
self.stopMarketTicket.Update(updateFields)