Overall Statistics |
Total Trades 2 Average Win 0.16% Average Loss -0.03% Compounding Annual Return 0.11% Drawdown 2.100% Expectancy 1.985 Net Profit 0.127% Sharpe Ratio 0.051 Loss Rate 50% Win Rate 50% Profit-Loss Ratio 4.97 Alpha 0.035 Beta -0.234 Annual Standard Deviation 0.031 Annual Variance 0.001 Information Ratio -0.97 Tracking Error 0.144 Treynor Ratio -0.007 |
-no value-
using System; using System.CodeDom; using QuantConnect.Algorithm; using QuantConnect.Data; using QuantConnect.Data.Consolidators; using QuantConnect.Data.Custom; using QuantConnect.Indicators; namespace Sandbox.DualConsolidation { public class DualConsolidation : QCAlgorithm { private const string VIX = "YAHOO/INDEX_VIX"; private const string VXV = "CBOEFE/INDEX_VXV"; private SimpleMovingAverage smaVIX; private SimpleMovingAverage smaVXV; private IndicatorBase<IndicatorDataPoint> ratio_VXV_VIX; public override void Initialize() { SetStartDate(2014, 01, 01); // request data AddData<Quandl>(VIX); AddData<Quandl>(VXV); // define data sources for our functional indicator, these are really just 'identities' of the closing price smaVIX = SMA(VIX, 1); smaVXV = SMA(VXV, 1); // the functional indicator takes as arguments two functions, // the first is a ComputeNextValue function // the second is an IsReady function ratio_VXV_VIX = new FunctionalIndicator<IndicatorDataPoint>("ratio", point => RatioIndicator_ComputeNextValue(point, smaVXV, smaVIX), ratioIndicator => RatioIndicator_IsReady(ratioIndicator, smaVXV, smaVIX) ); // we register to the VXV and VIX symbols, so when either of these gets data updates our indicator will recompute var identityConsolidator = new IdentityDataConsolidator<Quandl>(); RegisterIndicator(VXV, ratio_VXV_VIX, identityConsolidator, x => x.Value); RegisterIndicator(VIX, ratio_VXV_VIX, identityConsolidator, x => x.Value); } private DateTime previous; public void OnData(Quandl data) { if (Portfolio[data.Symbol].Quantity == 0) { MarketOrder(data.Symbol, 100); } if (previous.Date != data.Time.Date && smaVIX.IsReady && smaVXV.IsReady && ratio_VXV_VIX.IsReady) { previous = data.Time; Plot("Data", smaVIX, smaVXV); Plot("Ratio", ratio_VXV_VIX); } } /// <summary> /// This code is run as part of the ratio_VXV_VIX functional indicator /// </summary> /// <remarks> /// This is the ComputeNextValue function implementation for IndicatorBase /// </remarks> private decimal RatioIndicator_ComputeNextValue(IndicatorDataPoint data, IndicatorBase<IndicatorDataPoint> vxv, IndicatorBase<IndicatorDataPoint> vix) { return vxv / vix; } /// <summary> /// This code is run as part of the ratio_VXV_VIX functional indicator /// </summary> /// <remarks> /// This is the IsReady function implementation for IndicatorBase /// </remarks> private bool RatioIndicator_IsReady(IndicatorBase<IndicatorDataPoint> functionalIndicator, IndicatorBase<IndicatorDataPoint> vxv, IndicatorBase<IndicatorDataPoint> vix) { return vxv.IsReady && vix.IsReady; } } }