Overall Statistics |
Total Trades 214 Average Win 1.32% Average Loss -0.89% Compounding Annual Return 4.223% Drawdown 14.100% Expectancy 0.045 Net Profit 3.495% Sharpe Ratio 0.323 Loss Rate 58% Win Rate 42% Profit-Loss Ratio 1.49 Alpha 0.043 Beta -0.041 Annual Standard Deviation 0.131 Annual Variance 0.017 Information Ratio 0.082 Tracking Error 0.197 Treynor Ratio -1.037 Total Fees $214.00 |
namespace QuantConnect { public class QCUParameterizedAlgorithm : QCAlgorithm { //Parameter attribute can be applied to any variable in the algorithm. //If no parameter is set, it uses the default specified here (2013). [Parameter("StartDate")] public DateTime StartDateParameter = new DateTime(2015, 1, 1); [Parameter("EndDate")] public DateTime EndDateParameter = new DateTime(2015, 3, 31); [Parameter] public string Ticker; private SimpleMovingAverage SMA; private bool bStopTrading = false; //By default we use the name of the property if no name specified. [Parameter] public decimal StartingCash = 25000; [Parameter] public decimal StopLoss = 0; [Parameter] public decimal MinProfit = 0; [Parameter] public int smaPeriod; // Initialize the algorithm using our parameters public override void Initialize() { Resolution res = Resolution.Second; if (LiveMode) res = Resolution.Second; //Using parameters for starting cash SetCash(StartingCash); //Using parameters for start and end date SetStartDate(StartDateParameter); SetEndDate(EndDateParameter); AddSecurity(SecurityType.Equity, Ticker, res); Securities[Ticker].TransactionModel = new ConstantFeeTransactionModel(1); // create a 20 day simple moving average SMA = SMA(Ticker, smaPeriod, Resolution.Daily); // schedule event every day at 3:44pm to submit market on close orders // for any open positions Schedule.Event().EveryDay().At(15, 44).Run(() => { foreach (var holding in Portfolio.Values) { if (holding.HoldStock) { MarketOnCloseOrder(holding.Symbol, -holding.Quantity, tag: "ScheduledEvent EOD Liquidate"); } } bStopTrading = true; }); Schedule.Event().EveryDay().At(23,55).Run(() => { bStopTrading = false; }); } private DateTime previous; private int numShares; public void OnData(TradeBars data) { // wait for our slow ema to fully initialize if (!SMA.IsReady) { Debug("SMA not ready."); return; } // only once per day if (!Portfolio.HoldStock && !(previous.Date == data.Time.Date) && bStopTrading == false) { if (data[Ticker].Price > SMA) { //numShares = (int)(Portfolio.Cash / Securities[Ticker].Price); numShares = (int)(100000 / Securities[Ticker].Price); Order(Ticker, numShares, tag: "SMA Buy Trigger - " + SMA); Log("BUY >> " + numShares + " @ " + Securities[Ticker].Price); // Sell at the close of the day. } Debug("Price: " + data[Ticker].Price); Debug("SMA(20): " + SMA); bStopTrading = true; } else if (Portfolio.TotalUnrealizedProfit <= -1500)//-(Portfolio.TotalHoldingsValue * StopLoss)) /*|| Portfolio.TotalUnrealizedProfit > (Portfolio.TotalHoldingsValue * MinProfit))*/ { Liquidate(Ticker); } } } }