Overall Statistics |
Total Trades 466 Average Win 0.90% Average Loss -0.91% Compounding Annual Return -100.000% Drawdown 55.900% Expectancy -0.330 Net Profit -50.851% Sharpe Ratio -12.24 Loss Rate 66% Win Rate 34% Profit-Loss Ratio 0.99 Alpha -8.452 Beta 9.071 Annual Standard Deviation 0.772 Annual Variance 0.596 Information Ratio -12.556 Tracking Error 0.744 Treynor Ratio -1.042 Total Fees $0.00 |
namespace QuantConnect.MAAlgorithm { public class MAAlgorithm : QCAlgorithm { RollingWindow<TradeBar> _window1 = new RollingWindow<TradeBar>(2); public string[] Symbols = {"EURUSD","NZDUSD","AUDUSD","USDCAD"}; private ExponentialMovingAverage fast; private ExponentialMovingAverage slow; public override void Initialize() { SetStartDate(2017, 04, 01); SetEndDate(2017, 04, 20); SetCash(1000); foreach (var symbol in Symbols) { SetBrokerageModel(BrokerageName.OandaBrokerage); AddSecurity(SecurityType.Forex, symbol, Resolution.Hour); Securities[symbol].FeeModel = new ConstantFeeModel(0); fast = EMA(symbol, 13, Resolution.Hour); slow = EMA(symbol, 48, Resolution.Hour); } } public void OnData(TradeBars data) { foreach (var symbol in Symbols) { var holdingsL = Portfolio[symbol].IsLong; var holdingsS = Portfolio[symbol].IsShort; var currentHigh = data[symbol].High; var currentLow = data[symbol].Low; var quantity = (10000); _window1.Add(data[symbol]); if (!_window1.IsReady) return; var previousLow = _window1[1].Low; var previousHigh = _window1[1].High; if (!holdingsL && fast>slow) { Log("Long " + Securities[symbol] + " at " + Securities[symbol].Price); MarketOrder(symbol, quantity); } if (holdingsL && ((currentLow<previousLow)||(fast<slow))) { Log("Sold " + Securities[symbol] + " at " + Securities[symbol].Price); Liquidate(symbol); } if (!holdingsS && fast<slow) { Log("Short " + Securities[symbol] + " at " + Securities[symbol].Price); MarketOrder(symbol, -quantity); } if (holdingsS && ((currentHigh>previousHigh)||(fast>slow))) { Log("Covered " + Securities[symbol] + " at " + Securities[symbol].Price); Liquidate(symbol); } } } } }