Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 29.720% Drawdown 6.700% Expectancy 0 Net Profit 0% Sharpe Ratio 2.46 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.288 Beta -0.1 Annual Standard Deviation 0.107 Annual Variance 0.011 Information Ratio 0.058 Tracking Error 0.159 Treynor Ratio -2.629 Total Fees $1.00 |
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 { public ExponentialMovingAverage Fast; public ExponentialMovingAverage Slow; //Initialize the data and resolution you require for your strategy: public override void Initialize() { SetStartDate(2013, 01, 01); SetEndDate(2014, 01, 01); //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); Fast = EMA("SPY", 50); Slow = EMA("SPY", 200); // we can 'warm up' our indicators using the history function directly var history = History("SPY", 250); foreach (var tradeBar in history) { Fast.Update(tradeBar.EndTime, tradeBar.Close); Slow.Update(tradeBar.EndTime, tradeBar.Close); } // we can also warm up these indicators using the SetWarmup function // SetWarmup will pump data through the entire algorithm, including OnData // whereas the History function is handled by user code //SetWarmup(250); // ask for 250 bars of warmup at registered resolution //SetWarmup(TimeSpan.FromDays(3)); // ask for 3 calendar days of warmup // these are calendar days, so beware of weekends } //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) { if (IsWarmingUp) return; if (!Portfolio.HoldStock) { if (Fast.IsReady && Slow.IsReady) { Debug("Indicators are ready!"); } 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()); //You can also use log to send longer messages to a file. You are capped to 10kb //Log("This is a longer message send to log."); } } } }