Overall Statistics |
Total Trades 88 Average Win 11.07% Average Loss -2.47% Compounding Annual Return 769.654% Drawdown 21.100% Expectancy 2.237 Net Profit 769.654% Sharpe Ratio 2.975 Loss Rate 41% Win Rate 59% Profit-Loss Ratio 4.48 Alpha -0.004 Beta 119.349 Annual Standard Deviation 0.551 Annual Variance 0.303 Information Ratio 2.95 Tracking Error 0.551 Treynor Ratio 0.014 Total Fees $6257.43 |
using System.Drawing; namespace QuantConnect.Algorithm.CSharp { public class RSI_MA : QCAlgorithm { private ExponentialMovingAverage _fastEMA; private ExponentialMovingAverage _slowEMA; private RelativeStrengthIndex _RSI; string security = "BTCEUR"; /// <summary> /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. /// </summary> public override void Initialize() { SetStartDate(2017, 01, 01); //Set Start Date SetEndDate(2017, 12, 31); //Set End Date SetCash(10000); //Set Strategy Cash SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash); /// NOTE set benchmark AddCrypto(security, Resolution.Hour); /// Create consolidator var consolidator = new TradeBarConsolidator(6); consolidator.DataConsolidated += ConsolidatedHandler; SubscriptionManager.AddConsolidator(security, consolidator); /// Register Indicators _RSI = RSI(security, 14); _fastEMA = EMA(security, 50); _slowEMA = EMA(security, 200); /// Register indicators to receive consolidated data RegisterIndicator(security, _RSI, consolidator); RegisterIndicator(security, _fastEMA, consolidator); RegisterIndicator(security, _slowEMA, consolidator); /// Add chart Chart stockPlot = new Chart("Trade Plot"); stockPlot.AddSeries(new Series("Buy", SeriesType.Scatter, "", Color.Green, ScatterMarkerSymbol.Triangle)); stockPlot.AddSeries(new Series("Sell", SeriesType.Scatter, "", Color.Red, ScatterMarkerSymbol.Triangle)); stockPlot.AddSeries(new Series("Price", SeriesType.Line, "", Color.Blue)); stockPlot.AddSeries(new Series("RSI", SeriesType.Line, 1)); stockPlot.AddSeries(new Series("Slow EMA", SeriesType.Line, 2)); stockPlot.AddSeries(new Series("Fast EMA", SeriesType.Line, 2)); AddChart(stockPlot); } /// Event handler private void ConsolidatedHandler(object sender, TradeBar bar) { /// check if all indicators are ready if (!_RSI.IsReady || !_fastEMA.IsReady || !_slowEMA.IsReady) return; var holdings = Portfolio[security].Quantity; /// Plot price and indicators Plot("Trade Plot", "Price", bar.Close); Plot("Trade Plot", "RSI", _RSI); Plot("Trade Plot", "Fast EMA", _fastEMA); Plot("Trade Plot", "Slow EMA", _slowEMA); /// we only want to go long if we're currently short or flat if (holdings <= 0) { /// check if uptrend: fast over slow EMA & RSI buy signal if (_RSI > 70 && _fastEMA > _slowEMA) { SetHoldings(security, 1); Log("--->BUY<--- AT: " + bar.Close); Plot("Trade Plot", "Buy", bar.Close); } } /// if invested: sell if fast < slow EMA if (holdings > 0) { if (_RSI < 30) { Liquidate(security); Log("--->SELL<--- AT: " + bar.Close); Plot("Trade Plot", "Sell", bar.Close); } } } } }