Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -0.262 Tracking Error 0.16 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from AlgorithmImports import * import numpy as np from sklearn.linear_model import LogisticRegression from datetime import date, datetime, timedelta from sklearn.model_selection import train_test_split class SleepyYellowGreenWhale(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 1, 1) self.SetEndDate(2023, 2, 25) #2. Required: Brokerage Models: self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) #3. Required: Significant AUM Capacity self.SetCash(10000) #4. Required: Benchmark to SPY self.SetBenchmark("SPY") self.SetPortfolioConstruction(InsightWeightingPortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) #spx = qb.AddCfd("SPX500USD").Symbol self.assets = ["SPY", "QQQ", "GLD"] self.symbols = {} self.portfolioValue = RollingWindow[Decimal](500) self.SetWarmup(500) self.take_profit = 0.70 self.stop_loss = 0.17 self.min_data = 100 self.lookback = 100 #self.hyperparameter_update_interval = 14 #self.last_training = datetime.min self.units = 10 #self.signal=0 def EveryDayAfterMarketOpen(self): holdings = {} for symbol in self.assets: holdings[symbol] = self.Portfolio[symbol].Quantity for symbol in self.assets: holdings[symbol] = self.Portfolio[symbol].Quantity signal = self.GetSignal(symbol) if holdings[symbol] == 0: if signal == 1: order = self.MarketOrder(symbol, self.units) self.CreateStopLossAndTakeProfitOrders(order) elif holdings[symbol] > 0: if signal == -1: self.Liquidate(symbol) elif signal == 1: self.SetHoldings(symbol, 1/len(self.assets)) else: if signal == 1: order = self.MarketOrder(symbol, self.units) self.CreateStopLossAndTakeProfitOrders(order) def CreateStopLossAndTakeProfitOrders(self, order): self.stopMarketTicket = self.StopMarketOrder(order.Symbol, -self.units, self.stop_loss * order.AverageFillPrice, "Stop Loss") self.profitTargetTicket = self.LimitOrder(order.Symbol, self.units, self.take_profit * order.AverageFillPrice, "Take Profit") def GetSignal(self, symbol): df = self.History([symbol], self.lookback, Resolution.Daily) if df is None: return 0 df['ma60'] = self.SMA(symbol, 60) df['ma150'] = self.SMA(symbol, 150) df['rsi30'] = self.RSI(symbol, 30) if len(df) >= self.min_data: X = df['open', 'high', 'low', 'close', 'volume', 'ma60', 'ma150', 'rsi30'] X = (X - X.mean()) / X.std() X = X.values regressor = LogisticRegression(random_state=0, solver='lbfgs', max_iter=100) signal = np.where(df['close'].shift(-1) > df['close'], 1, -1) X_train, X_test, y_train, y_test = train_test_split(X, signal, test_size=0.2, random_state=1990) regressor.fit(X_train, y_train) return np.sign(regressor.predict(X)[-1]) else: return 0 def OnData(self, data): self.portfolioValue.Add(self.Portfolio.TotalPortfolioValue)