| 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')