Overall Statistics |
Total Trades 5 Average Win 32.53% Average Loss -7.21% Compounding Annual Return 8.133% Drawdown 24.800% Expectancy 3.408 Net Profit 143.42% Sharpe Ratio 0.712 Loss Rate 20% Win Rate 80% Profit-Loss Ratio 4.51 Alpha 0.048 Beta 0.391 Annual Standard Deviation 0.12 Annual Variance 0.014 Information Ratio -0.067 Tracking Error 0.151 Treynor Ratio 0.219 Total Fees $15.09 |
namespace QuantConnect { /* * QuantConnect University: Futures Example * * QuantConnect allows importing generic data sources! This example demonstrates importing a futures * data from the popular open data source Quandl. * * QuantConnect has a special deal with Quandl giving you access to Stevens Continuous Futurs (SCF) for free. * If you'd like to download SCF for local backtesting, you can download it through Quandl.com. */ public class QCUQuandlFutures : QCAlgorithm { string SPY = "SPY"; string ACWI = "ACWI"; string Tbill = "BIL"; string Bonds = "AGG"; Momentum _momSPY; Momentum _momACWI; Momentum _momTbill; DateTime sampledToday = DateTime.Now; public override void Initialize() { SetStartDate(2004, 1, 1); SetEndDate(DateTime.Now.Date.AddDays(-1)); SetCash(25000); AddSecurity(SecurityType.Equity, SPY, Resolution.Minute); Securities[SPY].SetDataNormalizationMode(DataNormalizationMode.TotalReturn); AddSecurity(SecurityType.Equity, ACWI, Resolution.Minute); Securities[ACWI].SetDataNormalizationMode(DataNormalizationMode.TotalReturn); AddSecurity(SecurityType.Equity, Tbill, Resolution.Minute); Securities[Tbill].SetDataNormalizationMode(DataNormalizationMode.TotalReturn); AddSecurity(SecurityType.Equity, Bonds, Resolution.Minute); Securities[Bonds].SetDataNormalizationMode(DataNormalizationMode.TotalReturn); _momSPY = MOM(SPY, 252, Resolution.Daily); _momACWI = MOM(ACWI, 252, Resolution.Daily); _momTbill = MOM(Tbill, 252, Resolution.Daily); } //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol. public void OnData(TradeBars data) { if (!_momSPY.IsReady) return; //One data point per m: if (sampledToday.Month == data.Time.Month) return; //Only take one data point per day (opening price) sampledToday = data.Time; decimal holdingPercent = .5m; string etf; decimal _momStrong; if (_momSPY >= _momACWI) { etf = SPY; _momStrong = _momSPY; } else { etf = ACWI; _momStrong = _momACWI; } if (_momStrong > _momTbill) { if(Portfolio[etf].Quantity > 0) return; Liquidate(); SetHoldings(etf, holdingPercent); Log("Set Holdings to " + Portfolio[etf].Quantity + "of " + etf); } else { if(Portfolio[Bonds].Quantity > 0) return; Liquidate(); SetHoldings(Bonds, holdingPercent); Log("Set Holdings to " + Portfolio[Bonds].Quantity + "of " + Bonds); } } } }