| Overall Statistics |
|
Total Trades 1 Average Win 43.34% Average Loss 0% Compounding Annual Return 19.805% Drawdown 9.300% Expectancy 0 Net Profit 43.339% Sharpe Ratio 1.632 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.003 Beta 0.988 Annual Standard Deviation 0.109 Annual Variance 0.012 Information Ratio 0.051 Tracking Error 0.018 Treynor Ratio 0.18 |
namespace QuantConnect
{
/*
* QuantConnect University: Full Basic Template:
*
* The underlying QCAlgorithm class is full of helper methods which enable you to use QuantConnect.
* We have explained some of these here, but the full algorithm can be found at:
* https://github.com/QuantConnect/QCAlgorithm/blob/master/QuantConnect.Algorithm/QCAlgorithm.cs
*/
public class BasicTemplateAlgorithm : QCAlgorithm
{
//Initialize the data and resolution you require for your strategy:
LogReturn returnIndicator;
SequentialIndicator<IndicatorDataPoint> sma;
SimpleMovingAverage _sma;
public override void Initialize()
{
//Start and End Date range for the backtest:
SetStartDate(2013, 1, 1);
SetStartDate(2013, 1, 10);
//SetEndDate(DateTime.Now.Date.AddDays(-1));
//Cash allocation
SetCash(25000);
//Add as many securities as you like. All the data will be passed into the event handler:
AddSecurity(SecurityType.Equity, "SPY", Resolution.Minute);
//Set up Indicators:
returnIndicator = new LogReturn("SPY");
_sma = new SimpleMovingAverage(5);
sma = _sma.Of(returnIndicator);
RegisterIndicator("SPY", sma, Resolution.Minute, x => x.Value);
}
//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)
{
// "TradeBars" object holds many "TradeBar" objects: it is a dictionary indexed by the symbol:
//
// e.g. data["MSFT"] data["GOOG"]
if (!Portfolio.HoldStock)
{
int quantity = (int)Math.Floor(Portfolio.Cash / data["SPY"].Close);
//Order function places trades: enter the string symbol and the quantity you want:
Order("SPY", quantity);
//Debug sends messages to the user console: "Time" is the algorithm time keeper object
Debug("Purchased SPY on " + Time.ToShortDateString());
}
}
public override void OnEndOfDay()
{
Plot("Return","Instantaneous",returnIndicator);
Plot("Return","5 Period Average",sma);
}
}
}using System;
using QuantConnect.Data.Market;
namespace QuantConnect.Indicators
{
/// <summary>
/// This indicator is meant to compute log returns.
/// </summary>
public class LogReturn : Indicator
{
public LogReturn()
: this(string.Format("Return"))
{
}
public int _count;
decimal _last;
public decimal Return;
public LogReturn(String name)
: base(name)
{
_count = 0;
_last = 0m;
Return = 0m;
}
/// <summary>
/// Gets a flag indicating when this indicator is ready and fully initialized
/// </summary>
public override bool IsReady
{
get { return _count > 0; }
}
public decimal total;
protected override decimal ComputeNextValue(IndicatorDataPoint input)
{
if (IsReady)
Return = (decimal)Math.Log((double)(input / _last));
_last = input;
return Return;
}
/// <summary>
/// Resets this indicator to its initial state
/// </summary>
public override void Reset()
{
_count = 0;
_last = 0m;
Return = 0m;
base.Reset();
}
}
}