Overall Statistics |
Total Orders 1428 Average Win 1.01% Average Loss -1.16% Compounding Annual Return 8.913% Drawdown 24.500% Expectancy 0.273 Start Equity 100000 End Equity 862582.82 Net Profit 762.583% Sharpe Ratio 0.418 Sortino Ratio 0.34 Probabilistic Sharpe Ratio 0.829% Loss Rate 32% Win Rate 68% Profit-Loss Ratio 0.87 Alpha 0.026 Beta 0.432 Annual Standard Deviation 0.105 Annual Variance 0.011 Information Ratio 0.024 Tracking Error 0.12 Treynor Ratio 0.102 Total Fees $9516.91 Estimated Strategy Capacity $2000000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX Portfolio Turnover 7.62% |
# region imports from AlgorithmImports import * import datetime import pandas as pd # endregion class SimpleIBS(QCAlgorithm): def initialize(self): # initialize self.set_start_date(2000, 1, 1) self.set_cash(100000) self.ibs_length = 3 tickers = ['SPY', 'QQQ'] # add equity to variable self.my_securities = [] for ticker in tickers: self.my_securities.append(self.add_equity(ticker, Resolution.DAILY)) # set transaction cost self.set_brokerage_model(BrokerageName.INTERACTIVE_BROKERS_BROKERAGE, AccountType.MARGIN) # set benchmark self.set_benchmark('SPY') #add IBS indictaor for daily resolution self.ibs_dict = {} self.avg_ibs_dict = {} for sercurity in self.my_securities: self.ibs_dict[sercurity.symbol] = self.ibs(sercurity.symbol, Resolution.DAILY) self.avg_ibs_dict[sercurity.symbol] = IndicatorExtensions.sma(self.ibs_dict[sercurity.symbol], self.ibs_length) def on_data(self, slice: Slice): for security in self.my_securities: avg_ibs = self.avg_ibs_dict[security.symbol] if not avg_ibs.is_ready: continue if avg_ibs.current.value < 0.4 and not self.portfolio.invested: self.set_holdings(security.symbol, 0.5) self.debug(f'{security.symbol} Open Position') if avg_ibs.current.value > 0.6: self.liquidate(security.symbol) self.debug(f'{security.symbol} Close Position')