Overall Statistics |
Total Trades 1 Average Win 0% Average Loss -3.54% Compounding Annual Return -72.188% Drawdown 17.900% Expectancy -1 Net Profit -3.537% Sharpe Ratio -0.365 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -1.477 Beta 3.179 Annual Standard Deviation 1.041 Annual Variance 1.084 Information Ratio -0.702 Tracking Error 1.032 Treynor Ratio -0.119 Total Fees $104.02 |
using System; using System.Linq; using QuantConnect.Data.Consolidators; using QuantConnect.Indicators; using QuantConnect.Data.Market; using QuantConnect.Algorithm; using QuantConnect.Data.Custom; namespace QuantConnect { public class KYJIndicators : QCAlgorithm { //string crude = "CME/CLN2015"; string symbol = "UWTI"; MovingAverageConvergenceDivergence macd; MovingAverageConvergenceDivergence fifteenMinute_MACD; RelativeStrengthIndex rsi; RelativeStrengthIndex fifteenMinute_RSI; MoneyFlowIndex mfi; MoneyFlowIndex fifteenMinute_MFI; decimal price; TradeBar symbolDaily; //Initialize the data and resolution you require for your strategy: public override void Initialize () { SetStartDate (2015, 5, 11); SetEndDate (2015, 5, 22); SetCash (25000); //Add as many securities as you like. All the data will be passed into the event handler: AddSecurity (SecurityType.Equity, symbol, Resolution.Minute, fillDataForward: false); //AddData<QuandlFuture> (crude, Resolution.Daily); //Set up Indicators macd = MACD (symbol, 12, 26, 9, MovingAverageType.Simple, Resolution.Minute); rsi = RSI (symbol, 14, MovingAverageType.Wilders, Resolution.Minute); mfi = MFI (symbol, 14, Resolution.Minute); //Setup Consolidators // define our daily trade bar consolidator. we can access the daily bar // from the DataConsolidated events var dailyConsolidator = new TradeBarConsolidator (TimeSpan.FromDays (1)); var fifteenMinuteConsolidator = new TradeBarConsolidator (TimeSpan.FromMinutes (15)); fifteenMinute_MACD = new MovingAverageConvergenceDivergence (12, 26, 9, MovingAverageType.Simple); fifteenMinute_RSI = new RelativeStrengthIndex (14, MovingAverageType.Wilders); fifteenMinute_MFI = new MoneyFlowIndex (14); RegisterIndicator (symbol, fifteenMinute_MACD, fifteenMinuteConsolidator, x => x.Value); // x => ((TradeBar) x).Close RegisterIndicator (symbol, fifteenMinute_RSI, fifteenMinuteConsolidator, x => x.Value); //RegisterIndicator (symbol, fifteenMinute_MFI, fifteenMinuteConsolidator, x => x.Value); // attach our event handler. the event handler is a function that will be called // each time we produce a new consolidated piece of data dailyConsolidator.DataConsolidated += OnDataDaily; // this call adds our daily consolidator to the manager to receive updates // from the engine SubscriptionManager.AddConsolidator (symbol, dailyConsolidator); // setup Charts var chart = new Chart ("rsi"); var buy = new Series ("buy", SeriesType.Scatter); var sell = new Series ("sell", SeriesType.Scatter); var rsis = new Series ("rsi"); chart.AddSeries (buy); chart.AddSeries (sell); chart.AddSeries (rsis); AddChart (chart); } public void OnDataDaily (object sender, TradeBar consolidated) { symbolDaily = consolidated; Log (Time.ToString ("u") + " Close price: " + consolidated.Close); } //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol. //public void OnData (Quandl data) public void OnData (TradeBars data) { // removed MFI since broken... if (!macd.IsReady || !rsi.IsReady || !fifteenMinute_MACD.IsReady || !fifteenMinute_RSI.IsReady) { return; } decimal macdLine = macd.Fast - macd.Slow; decimal macdHistogram = Math.Round (macdLine - macd.Signal, 3); price = Math.Round (data [symbol].Close, 3); // Plot RSI Plot ("rsi", "rsi", fifteenMinute_RSI); // MFI not working (always 100) & can't RegisterIndicator if (!Portfolio.Invested && fifteenMinute_RSI < 30) { Plot ("rsi", "buy", fifteenMinute_RSI); SetHoldings (symbol, 0.75); Log (Time.ToString ("u") + " Purchased: " + symbol + " price = " + price + " MACDHis = " + macdHistogram + " 15m RSI = " + fifteenMinute_RSI + " MFI = " + mfi); } else if (Portfolio.Invested && fifteenMinute_RSI > 70) { Plot ("rsi", "sell", fifteenMinute_RSI); Liquidate (symbol); Log (Time.ToString ("u") + " Sold: " + symbol + " price = " + price + " MACDHis = " + macdHistogram + " 15m RSI = " + fifteenMinute_RSI + " MFI = " + mfi); } } // Fire plotting events once per day: public override void OnEndOfDay (string symbol) { /* if (!macd.IsReady || !rsi.IsReady || !mfi.IsReady) { return; } */ //Plot("MACD", "Price", price); //Plot("MACD", macd.Fast, macd.Slow); //Plot ("RSI", "rsi", rsi); //Plot ("RSI", "price", price); //Plot ("MFI", mfi); } } // Custom quandl data type for setting customized value column name. // Value column is used for the primary trading calculations and charting. public class QuandlFuture : Quandl { public QuandlFuture () : base (valueColumnName: "Settle") { } } }