| Overall Statistics |
|
Total Orders 1498 Average Win 0.17% Average Loss -0.41% Compounding Annual Return 6.003% Drawdown 29.700% Expectancy 0.094 Start Equity 100000 End Equity 133853.46 Net Profit 33.853% Sharpe Ratio 0.106 Sortino Ratio 0.099 Probabilistic Sharpe Ratio 5.205% Loss Rate 23% Win Rate 77% Profit-Loss Ratio 0.42 Alpha -0.016 Beta 0.376 Annual Standard Deviation 0.126 Annual Variance 0.016 Information Ratio -0.44 Tracking Error 0.144 Treynor Ratio 0.036 Total Fees $2538.27 Estimated Strategy Capacity $3600000.00 Lowest Capacity Asset GSG TKH7EPK7SRC5 Portfolio Turnover 6.48% Drawdown Recovery 106 |
#region imports
from AlgorithmImports import *
import numpy as np
from datetime import datetime
#endregion
# https://quantpedia.com/Screener/Details/1
# Use 5 ETFs (SPY - US stocks, EFA - foreign stocks, BND - bonds, VNQ - REITs,
# GSG - commodities), equal weight the portfolio. Hold asset class ETF only when
# it is over its 10 month (220 days) Simple Moving Average, otherwise stay in cash.
class AssetClassTrendFollowingAlgorithm(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.sma = self.sma(equity.symbol, 220, Resolution.DAILY)
def on_data(self, data):
symbols = [
symbol for symbol, equity in self.securities.items()
if equity.price > equity.sma.current.value
]
targets = [PortfolioTarget(s, 1/len(symbols)) for s in symbols]
self.set_holdings(targets, True)