| Overall Statistics |
|
Total Orders 1429 Average Win 0.12% Average Loss -0.27% Compounding Annual Return 8.655% Drawdown 21.400% Expectancy 0.162 Start Equity 100000 End Equity 151466.34 Net Profit 51.466% Sharpe Ratio 0.269 Sortino Ratio 0.3 Probabilistic Sharpe Ratio 13.253% Loss Rate 20% Win Rate 80% Profit-Loss Ratio 0.45 Alpha -0.019 Beta 0.627 Annual Standard Deviation 0.109 Annual Variance 0.012 Information Ratio -0.579 Tracking Error 0.082 Treynor Ratio 0.047 Total Fees $2202.33 Estimated Strategy Capacity $2000000.00 Lowest Capacity Asset GSG TKH7EPK7SRC5 Portfolio Turnover 4.37% Drawdown Recovery 804 |
#region imports
from AlgorithmImports import *
import pandas as pd
from datetime import datetime
#endregion
# https://quantpedia.com/Screener/Details/2
# Use 5 ETFs (SPY - US stocks, EFA - foreign stocks, BND - bonds, VNQ - REITs, GSG - commodities).
# Pick 3 ETFs with strongest 12 month (252 days) momentum into your portfolio and weight them equally.
# Hold for 1 month and then rebalance.
class AssetClassMomentumAlgorithm(QCAlgorithm):
def initialize(self):
self.set_start_date(self.end_date - timedelta(5*365))
self.set_cash(100000)
self.settings.automatic_indicator_warm_up = True
for ticker in ["SPY", "EFA", "BND", "VNQ", "GSG"]:
equity = self.add_equity(ticker, Resolution.DAILY)
equity.momp = self.momp(equity.symbol, 252, Resolution.DAILY)
def on_data(self, slice):
# Pick 3 ETFs with strongest momentum and weight them equally.
to_long = [x.symbol for x in sorted(self.securities.values(), key=lambda s: s.momp)[-3:]]
targets = [PortfolioTarget(symbol, 1/3) for symbol in to_long]
self.set_holdings(targets, liquidate_existing_holdings=True)