Overall Statistics |
Total Trades 87 Average Win 0.39% Average Loss -0.18% Compounding Annual Return 5.130% Drawdown 2.600% Expectancy 0.007 Net Profit 0.770% Sharpe Ratio 0.544 Loss Rate 69% Win Rate 31% Profit-Loss Ratio 2.21 Alpha 0.04 Beta -0.009 Annual Standard Deviation 0.072 Annual Variance 0.005 Information Ratio -1.138 Tracking Error 0.085 Treynor Ratio -4.272 Total Fees $174.00 |
using System; using System.Collections.Generic; using QuantConnect.Data.Consolidators; using QuantConnect.Indicators; using QuantConnect.Data.Market; namespace QuantConnect { public class BasicTemplateAlgorithm : QCAlgorithm { TradeBar _eurusdHourly; int warmupCount = 0; string symbol = "EURUSD"; int state; private RollingWindow<TEMAState> _win; private TripleExponentialMovingAverage _tema; //Initialize the data and resolution you require for your strategy: public override void Initialize() { //0 = default, -1 = short, 1 = long int state = 0; //Start and End Date range for the backtest: SetStartDate(2016, 12, 17); SetEndDate(2017, 2, 10); //add security AddSecurity(SecurityType.Forex, symbol, Resolution.Hour); _win = new RollingWindow<TEMAState>(4); _tema = TEMA(symbol, 20); //Cash allocation SetCash(25000); //set brokerage model SetBrokerageModel(BrokerageName.OandaBrokerage); } //hourly data handler public void OnData(TradeBars data) { Debug("test"); if (_tema.IsReady) _win.Add(new TEMAState(_tema)); if (!_win.IsReady) return; //warm up some more hours of good data if(warmupCount != 10){ warmupCount++; Debug("still warming up"); return; } decimal current = _win[0].Value; decimal previous = _win[3].Value; if(current > previous){ goLong(data); return; }else if(current < previous){ goShort(data); return; }else{ return; } } public void goLong(TradeBars data){ //check if it's already going long if(state == 1){ return; } state = 1; Debug("Going long!"); decimal current = _win[0].Value; decimal previous = _win[3].Value; Debug("Current: " + current + "Previous: " + previous); SetHoldings(symbol, 1.0); } public void goShort(TradeBars data){ //check if it's already going short if(state == -1){ return; } state = -1; Debug("Going short!"); decimal current = _win[0].Value; decimal previous = _win[3].Value; Debug("Current: " + current + "Previous: " + previous); SetHoldings(symbol, -1.0); } public class TEMAState { public readonly decimal Value; public TEMAState(TripleExponentialMovingAverage tema) { Value = tema.Current; } } } }