| Overall Statistics |
|
Total Trades 6 Average Win 30.24% Average Loss -11.87% Compounding Annual Return 10.203% Drawdown 25.200% Expectancy 1.839 Net Profit 421.838% Sharpe Ratio 0.672 Loss Rate 20% Win Rate 80% Profit-Loss Ratio 2.55 Alpha 0.11 Beta 0.001 Annual Standard Deviation 0.164 Annual Variance 0.027 Information Ratio 0.11 Tracking Error 0.257 Treynor Ratio 124.509 Total Fees $21.91 |
namespace QuantConnect
{
public class PlotFillsAlgorithm : QCAlgorithm
{
public ExponentialMovingAverage emaFast, emaSlow;
public override void Initialize()
{
SetStartDate(1998, 1, 1);
SetEndDate(2015, 1, 1);
SetCash(25000);
AddSecurity(SecurityType.Equity, "SPY", Resolution.Daily);
// define our indicators
var spyClose = Identity("SPY");
emaFast = EMA("SPY", 100);
emaSlow = EMA("SPY", 300);
// define our chart
var chart = new Chart("SPY");
chart.AddSeries(new Series(spyClose.Name, SeriesType.Line));
chart.AddSeries(new Series(emaFast.Name, SeriesType.Line));
chart.AddSeries(new Series(emaSlow.Name, SeriesType.Line));
// notice we use scatter plots for the buy/sell plots
chart.AddSeries(new Series(OrderDirection.Buy.ToString(), SeriesType.Scatter));
chart.AddSeries(new Series(OrderDirection.Sell.ToString(), SeriesType.Scatter));
AddChart(chart);
// auto plot our indicators on our symbol chart
PlotIndicator("SPY", spyClose, emaFast, emaSlow);
}
//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)
{
const decimal threshold = 0.001m;
if (Securities["SPY"].Holdings.Quantity <= 0 && emaFast > emaSlow*(1+threshold))
{
SetHoldings("SPY", 1);
}
if (Securities["SPY"].Holdings.Quantity >= 0 && emaFast < emaSlow*(1-threshold))
{
SetHoldings("SPY", -1);
}
}
public override void OnOrderEvent(OrderEvent fill)
{
// if this is a fill event (Filled or PartiallyFilled) then plot it
if (fill.Status.IsFill())
{
Plot(fill.Symbol, fill.Direction.ToString(), fill.FillPrice);
}
}
}
}