Overall Statistics |
Total Trades 11 Average Win 0% Average Loss -0.01% Compounding Annual Return 6.816% Drawdown 0.300% Expectancy -1 Net Profit 1.218% Sharpe Ratio 4.593 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0.256 Annual Standard Deviation 0.013 Annual Variance 0 Information Ratio -4.596 Tracking Error 0.039 Treynor Ratio 0.238 Total Fees $11.00 |
namespace QuantConnect.Algorithm.CSharp { public class BasicTemplateAlgorithm : QCAlgorithm { String symbol = "SPY"; decimal price; decimal stopLossPercent = 0.0002m; decimal takeProfitPercent = 0.0002m; private OrderTicket stopLoss; private OrderTicket takeProfit; int size = 100; RelativeStrengthIndex rsi; ExponentialMovingAverage ema100; ExponentialMovingAverage ema200; AverageDirectionalIndex adx; public override void Initialize() { AddSecurity(SecurityType.Equity, "SPY", Resolution.Minute); rsi = RSI(symbol, 14, MovingAverageType.Simple, Resolution.Minute); ema100 = EMA(symbol, 100, Resolution.Minute); ema200 = EMA(symbol, 200, Resolution.Minute); adx = ADX(symbol, 14, Resolution.Hour); SetStartDate(2017, 10, 01); SetEndDate(2017, 12, 01); SetCash(100000); } public override void OnData(Slice data) { price = data[symbol].Close; if (!Portfolio.Invested && rsi > 70 && ema100 > ema200 && adx > 30){ longOrder(price); } if(!Portfolio.Invested && rsi < 30 && ema200 > ema100 && adx > 30){ shortOrder(price); } } public override void OnOrderEvent(OrderEvent orderEvent){ var filledOrderId = orderEvent.OrderId; if (takeProfit != null && stopLoss != null){ if (takeProfit.OrderId == filledOrderId){ Log(Time+": Cancelling stop loss"); stopLoss.Cancel(); } if (stopLoss.OrderId == filledOrderId){ Log(Time+": Cancelling proffit target"); takeProfit.Cancel(); } } } private void longOrder(decimal currentPrice) { var price = Securities[symbol].Price; Order(symbol, size); takeProfit = LimitOrder(symbol, -size, price*(1m + takeProfitPercent)); stopLoss = StopMarketOrder(symbol, -size, price*(1m - stopLossPercent)); } private void shortOrder(decimal currentPrice) { var price = Securities[symbol].Price; Order(symbol, -size); takeProfit = LimitOrder(symbol, size, price*(1m - takeProfitPercent)); stopLoss = StopMarketOrder(symbol, size, price*(1m + stopLossPercent)); } } }