Overall Statistics |
Total Trades 286 Average Win 1.95% Average Loss -2.15% Compounding Annual Return -23.968% Drawdown 35.300% Expectancy -0.092 Net Profit -28.237% Sharpe Ratio -0.671 Loss Rate 52% Win Rate 48% Profit-Loss Ratio 0.91 Alpha -0.158 Beta -0.036 Annual Standard Deviation 0.24 Annual Variance 0.057 Information Ratio -0.963 Tracking Error 0.262 Treynor Ratio 4.525 Total Fees $0.00 |
namespace QuantConnect { /* * Basic Template Algorithm * * The underlying QCAlgorithm class has many methods which enable you to use QuantConnect. * We have explained some of these here, but the full base class can be found at: * https://github.com/QuantConnect/Lean/tree/master/Algorithm */ public class BasicTemplateAlgorithm : QCAlgorithm { private Security _oil; private SimpleMovingAverage _sma14; private RelativeStrengthIndex _rsi14; public override void Initialize() { SetBrokerageModel(BrokerageName.OandaBrokerage); // backtest parameters SetStartDate(2016, 1, 1); SetEndDate(DateTime.Now); // cash allocation SetCash(10000); // request specific equities // including forex. Options and futures in beta. _oil = AddCfd("BCOUSD", Resolution.Minute, Market.Oanda); //AddForex("EURUSD", Resolution.Minute); _sma14 = SMA(_oil.Symbol, 14); _rsi14 = RSI(_oil.Symbol, 14); } /* * New data arrives here. * The "Slice" data represents a slice of time, it has all the data you need for a moment. */ public override void OnData(Slice data) { // slice has lots of useful information TradeBars bars = data.Bars; Splits splits = data.Splits; Dividends dividends = data.Dividends; if (_oil.Holdings.HoldStock) { ExitLogic(); } else { EntryLogic(); } } private int GetHour() { //TODO: needs to be fixed to handle timelight savings return Time.ToUniversalTime().Hour + 2; } private void ExitLogic() { if (GetHour() >= 15) { Liquidate(_oil.Symbol); } } private void EntryLogic() { if (GetHour() >= 13) return; if (_oil.Price > _sma14) { if (_rsi14 > 50) { SetHoldings(_oil.Symbol, 1); } } else { if (_rsi14 < 40) { SetHoldings(_oil.Symbol, -1); } } } } }