Overall Statistics |
Total Orders 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Start Equity 100000 End Equity 100000 Net Profit 0% Sharpe Ratio 0 Sortino 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 9.739 Tracking Error 0.064 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports from AlgorithmImports import * from datetime import timedelta # endregion class IVTSAlpha(AlphaModel): securities = [] def update(self, algorithm: QCAlgorithm, data: Slice) -> List[Insight]: insights = [] for security in self.securities: insight = Insight(security.symbol, timedelta(minutes=60), InsightType.PRICE, InsightDirection.UP) insights.append(insight) return Insight.group(insights) def on_securities_changed(self, algorithm: QCAlgorithm, changes: SecurityChanges) -> None: for security in changes.added_securities: self.securities.append(security) for security in changes.removed_securities: if security in self.securities: self.securities.remove(security)
#region imports from AlgorithmImports import * from universe import * from alpha import * from portfolio import * #endregion class ConservativeApgorithm(QCAlgorithm): def initialize(self): self.set_start_date(2024, 1, 1) self.set_end_date(2024, 1, 7) self.set_cash(100_000) self.set_brokerage_model(BrokerageName.INTERACTIVE_BROKERS_BROKERAGE, AccountType.MARGIN) # SPY 500 companies spy = self.add_equity("SPY", resolution = Resolution.MINUTE, data_normalization_mode = DataNormalizationMode.RAW).symbol self.set_benchmark(spy) self.set_universe_selection(etf_constituents_universe(spy, self.universe_settings)) self.set_alpha(IVTSAlpha()) self.Settings.RebalancePortfolioOnInsightChanges = False self.Settings.RebalancePortfolioOnSecurityChanges = False self.set_portfolio_construction(StraddlePortfolio()) self.set_risk_management(NullRiskManagementModel()) self.set_execution(NullExecutionModel())
# region imports from AlgorithmImports import * # endregion # Portfolio construction scaffolding class; basic method args. class StraddlePortfolio(PortfolioConstructionModel): # Create list of PortfolioTarget objects from Insights def create_targets(self, algorithm: QCAlgorithm, insights: List[Insight]) -> List[PortfolioTarget]: return super().create_targets(algorithm, insights) # Determines the target percent for each insight def determine_target_percent(self, insights: List[Insight]) -> Dict[Insight, float]: targets = {} for insight in insights: # For simplicity, let's just evenly divide the portfolio among all insights targets[insight] = 1.0 / len(insights) return targets
# region imports from AlgorithmImports import * # endregion class etf_constituents_universe(ETFConstituentsUniverseSelectionModel): def __init__(self, benchmark, universe_settings: UniverseSettings = None) -> None: super().__init__(benchmark, universe_settings, self.etf_constituents_filter) def etf_constituents_filter(self, constituents): return [c.symbol for c in constituents]