Overall Statistics |
Total Trades 288 Average Win 4.61% Average Loss -4.95% Compounding Annual Return -67.551% Drawdown 79.900% Expectancy -0.169 Net Profit -79.805% Sharpe Ratio -1.329 Loss Rate 57% Win Rate 43% Profit-Loss Ratio 0.93 Alpha -0.666 Beta 0.131 Annual Standard Deviation 0.492 Annual Variance 0.242 Information Ratio -1.492 Tracking Error 0.499 Treynor Ratio -4.985 Total Fees $0.00 |
namespace QuantConnect.MeanReversion { public class MeanReversion : QCAlgorithm { string symbol = "USDJPY"; decimal open; decimal close; QuoteBar Weekly; double Return; string symbol1 = "USDCAD"; decimal open1; decimal close1; QuoteBar Weekly1; double Return1; public override void Initialize() { SetStartDate(2016, 1, 1); SetEndDate(2017, 6, 1); SetCash(1000); SetBrokerageModel(BrokerageName.OandaBrokerage); AddSecurity(SecurityType.Forex, symbol, Resolution.Daily); AddSecurity(SecurityType.Forex, symbol1, Resolution.Daily); var weeklyConsolidator = new QuoteBarConsolidator(TimeSpan.FromDays(7)); weeklyConsolidator.DataConsolidated += WeeklyData; SubscriptionManager.AddConsolidator(symbol, weeklyConsolidator); var weeklyConsolidator1 = new QuoteBarConsolidator(TimeSpan.FromDays(7)); weeklyConsolidator1.DataConsolidated += WeeklyData1; SubscriptionManager.AddConsolidator(symbol1, weeklyConsolidator1); } private void WeeklyData(object sender, QuoteBar consolidated) { Weekly = consolidated; close = Weekly.Close; open = Weekly.Open; Return = Math.Log(Convert.ToDouble(open)/Convert.ToDouble(close)); } private void WeeklyData1(object sender, QuoteBar consolidated) { Weekly1 = consolidated; close1 = Weekly1.Close; open1 = Weekly1.Open; Return1 = Math.Log(Convert.ToDouble(open1)/Convert.ToDouble(close1)); } public void OnData(QuoteBars data) { var AverageReturn = (Return+Return1)/2; var DemeanedReturn = Return-AverageReturn; var DemeanedReturn1 = Return1-AverageReturn; Schedule.On(DateRules.Every(DayOfWeek.Monday), TimeRules.At(01, 00), () => { if (DemeanedReturn>0) { SetHoldings(symbol, -5, false, "Short " + symbol); SetHoldings(symbol1, 5, false, "Long " + symbol1); } if (DemeanedReturn<0) { SetHoldings(symbol1, -5, false, "Short " + symbol1); SetHoldings(symbol, 5, false, "Long " + symbol); } }); Schedule.On(DateRules.Every(DayOfWeek.Friday), TimeRules.At(16, 00), () => { if (DemeanedReturn>0) { SetHoldings(symbol, 0, false, "Close " + symbol); SetHoldings(symbol1, 0, false, "Close " + symbol1); } if (DemeanedReturn<0) { SetHoldings(symbol1, 0, false, "Close " + symbol1); SetHoldings(symbol, 0, false, "Close " + symbol); } }); } } }