Overall Statistics |
Total Trades 19 Average Win 9.92% Average Loss -0.66% Compounding Annual Return 10.044% Drawdown 18.500% Expectancy 6.559 Net Profit 95.3% Sharpe Ratio 0.797 Loss Rate 53% Win Rate 47% Profit-Loss Ratio 14.96 Alpha 0.107 Beta -0.026 Annual Standard Deviation 0.131 Annual Variance 0.017 Information Ratio -0.012 Tracking Error 0.266 Treynor Ratio -3.974 Total Fees $55.50 |
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(2008, 6, 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); // define our daily trade bar consolidator. we can access the daily bar // from the DataConsolidated events var dailyConsolidator = new TradeBarConsolidator(TimeSpan.FromDays(1)); // attach our event handler. the event handler is a function that will be called each time we produce // a new consolidated piece of data. dailyConsolidator.DataConsolidated += OnDataDaily; // this call adds our daily consolidator to the manager to receive updates from the engine SubscriptionManager.AddConsolidator(SPY, dailyConsolidator); SubscriptionManager.AddConsolidator(ACWI, dailyConsolidator); SubscriptionManager.AddConsolidator(Tbill, dailyConsolidator); SubscriptionManager.AddConsolidator(Bonds, dailyConsolidator); _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. private void OnDataDaily(object sender, TradeBar consolidated) { if (!_momSPY.IsReady) return; //One data point per m: //Only take one data point per day (opening price) 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); } } } }