Overall Statistics |
Total Trades 10 Average Win 40.35% Average Loss -8.91% Compounding Annual Return 39.457% Drawdown 22.100% Expectancy 2.318 Net Profit 114.196% Sharpe Ratio 1.052 Loss Rate 40% Win Rate 60% Profit-Loss Ratio 4.53 Alpha 0.462 Beta -9.323 Annual Standard Deviation 0.296 Annual Variance 0.088 Information Ratio 0.998 Tracking Error 0.296 Treynor Ratio -0.033 Total Fees $0.00 |
using System; using System.Linq; using QuantConnect.Indicators; using QuantConnect.Models; using QuantConnect.Data.Consolidators; namespace QuantConnect.Algorithm.Examples { public class QCUMovingAverageCross : QCAlgorithm { private const string Symbol = "XPDUSD"; private ExponentialMovingAverage fast; private SimpleMovingAverage slow; private SimpleMovingAverage[] ribbon; int Qty = 4; public override void Initialize() { SetStartDate(2016, 01, 01); SetEndDate(2018, 04, 15 ); SetBrokerageModel(BrokerageName.OandaBrokerage); SetCash(1200); AddSecurity(SecurityType.Cfd, Symbol, Resolution.Minute); fast = EMA(Symbol, 25, Resolution.Daily); slow = SMA(Symbol, 99, Resolution.Daily); int ribbonCount = 7; int ribbonInterval = 15*8; ribbon = new SimpleMovingAverage[ribbonCount]; for(int i = 0; i < ribbonCount; i++) { ribbon[i] = SMA(Symbol, (i + 1)*ribbonInterval, Resolution.Hour); } } private DateTime previous; public void OnData(Slice data) { if (!slow.IsReady) return; if (previous.Date == data.Time.Date) return; const decimal tolerance = 0.00015m; var holdings = Portfolio[Symbol].Quantity; if (holdings == 0 ) { if (fast > slow * (1 + tolerance)) { Log("BUY >> " + Securities[Symbol].Price); Order(Symbol, Qty); } } if (holdings > 0 && fast <= slow) { Log("SELL >> " + Securities[Symbol].Price); Liquidate(Symbol); } Plot(Symbol, "Price", data[Symbol].Price); Plot("Ribbon", "Price", data[Symbol].Price); Plot(Symbol, fast, slow); Plot("Ribbon", ribbon); previous = data.Time; } } }