| Overall Statistics |
|
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -15.949% Drawdown 47.900% Expectancy 0 Net Profit 0% Sharpe Ratio -0.022 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.006 Beta -0.079 Annual Standard Deviation 0.464 Annual Variance 0.216 Information Ratio -0.138 Tracking Error 0.476 Treynor Ratio 0.128 Total Fees $1.76 |
using MathNet.Numerics.Statistics;
namespace QuantConnect
{
public class TradingTheOdds : QCAlgorithm
{
RollingWindow<double> _closingPrices;
ExponentialMovingAverage _ema;
string _symbolGSPC = "YAHOO/INDEX_GSPC";
string _symbolVIX = "SPDJ/SPVIXSTR";
public override void Initialize()
{
// Minimum Start Date: 2011-3-1
SetStartDate(2014, 3, 1);
SetEndDate(2015,2,1);
SetCash(10000);
//AddSecurity(SecurityType.Equity, "SPY", Resolution.Daily);
AddSecurity(SecurityType.Equity, "XIV", Resolution.Daily);
AddSecurity(SecurityType.Equity, "VXX", Resolution.Daily);
AddData<Quandl>(_symbolGSPC, Resolution.Daily);
AddData<QuandlVixContract>(_symbolVIX, Resolution.Daily);
//Initialize:
_closingPrices = new RollingWindow<double>(5);
_ema = new ExponentialMovingAverage("AvgVixLessASTD", 5);
}
public override void OnData(Slice data)
{
try
{
//Save off the closing prices
//_closingPrices.Add((double)data.Bars["SPY"].Close);
var gspc = data.Get<Quandl>(_symbolGSPC);
_closingPrices.Add((double)gspc.Value);
//Wait till we've got a week data:
if (!_closingPrices.IsReady) return;
//Save Vix price:
var vix = data.Get<Quandl>(_symbolVIX);
//Calculate the annualized standard deviation of the last 2 days
//standard deviation((LN(todaysclose/yesterdaysclose), LN(yesterdaysclose/twodaysagoclose)) * 100 * sqrt(252))
var samples = new List<double>() {
Math.Log(_closingPrices[0]/_closingPrices[1]),
Math.Log(_closingPrices[1]/_closingPrices[2])
};
var astd = (decimal) (samples.StandardDeviation() * Convert.ToDouble(Math.Pow(252, 0.5)) * 100);
//Calculate the raw unaveraged value:
_ema.Update(new IndicatorDataPoint(Time, vix.Value - astd));
//More than 5 EMA points:
if (_ema.IsReady)
{
Log(string.Format("EMA: {0:0.00}\tVIX: {1:0.00}\tGSPC: {2:0.00}\tASTD: {3:0.00}", _ema, vix.Value, gspc.Value, astd));
if (_ema > 1.0m)
{
if (Portfolio["XIV"].HoldStock == false)
{
SetHoldings("XIV", 1.0, true);
}
}
else
{
if (Portfolio["VXX"].HoldStock == false)
{
SetHoldings("VXX", 1.0, true);
}
}
}
}
catch (Exception e)
{
Log(e.ToString());
}
}
}
}namespace QuantConnect
{
public class QuandlVixContract : Quandl
{
public QuandlVixContract() : base(valueColumnName: "S&P 500 VIX Short-Term Index MCAP")
{
}
}
}