Overall Statistics |
Total Trades 1303 Average Win 0.12% Average Loss -0.12% Compounding Annual Return 1.836% Drawdown 10.400% Expectancy 0.033 Net Profit 7.508% Sharpe Ratio 0.351 Loss Rate 47% Win Rate 53% Profit-Loss Ratio 0.94 Alpha 0.013 Beta 0.028 Annual Standard Deviation 0.045 Annual Variance 0.002 Information Ratio -0.587 Tracking Error 0.118 Treynor Ratio 0.557 Total Fees $1668.83 |
# # QuantConnect Basic Template: # Fundamentals to using a QuantConnect algorithm. # # You can view the QCAlgorithm base class on Github: # https://github.com/QuantConnect/Lean/tree/master/Algorithm # import numpy as np import pandas as pd class BasicTemplateAlgorithm(QCAlgorithm): def Initialize(self): # Set the cash we'd like to use for our backtest # This is ignored in live trading self.SetCash(100000) # Start and end dates for the backtest. # These are ignored in live trading. self.SetStartDate(2013,9,11) self.SetEndDate(2017,9,1) #2007-3-26 to 2013-9-9 used for in-sample testing # Add assets you'd like to see # some pairs have been excluded (commented out) in favour of longer optimisation and test periods self.AddSecurity(SecurityType.Equity, "UUP", Resolution.Minute) #from 2007-02-20 USD self.AddSecurity(SecurityType.Equity, "FXA", Resolution.Minute) #from 2006-06-26 AUD self.AddSecurity(SecurityType.Equity, "FXB", Resolution.Minute) #from 2006-06-26 GBP self.AddSecurity(SecurityType.Equity, "FXC", Resolution.Minute) #from 2006-06-26 CAD ########self.AddSecurity(SecurityType.Equity, "FXCH", Resolution.Minute) #from 2011-10-04 CNH self.AddSecurity(SecurityType.Equity, "FXE", Resolution.Minute) #from 2005-12-12 EUR self.AddSecurity(SecurityType.Equity, "FXY", Resolution.Minute) #from 2007-02-13 JPY ########self.AddSecurity(SecurityType.Equity, "FXSG", Resolution.Minute) #from 2013-02-13 SGD self.AddSecurity(SecurityType.Equity, "FXS", Resolution.Minute) #from 2006-06-26 SEK self.AddSecurity(SecurityType.Equity, "FXF", Resolution.Minute) #from 2006-06-26 CHF self.symbols_list = ["UUP", "FXA", "FXB", "FXC", "FXE", "FXY", "FXS", "FXF"] self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday, DayOfWeek.Thursday), self.TimeRules.AfterMarketOpen('UUP', 5), Action(self.rebalance_fn)) def rebalance_fn(self): d = {} for i in self.symbols_list: history = self.History(i, 100, Resolution.Daily) close_list = [] for h in history: close_list.append(h.Close) _return = (self.Securities[i].Price - close_list[0]) / close_list[0] self.Log(str(_return)) d[i] = _return df = pd.DataFrame.from_dict(d, orient='index') df.sort_values(0, inplace=True, ascending=False) to_buy = df.iloc[0:2, :].index.values to_sell = df.iloc[6:8, :].index.values current_longs = [] current_shorts = [] for symbol in self.symbols_list: holdings = self.Portfolio[symbol].Quantity if holdings > 0: current_longs.append(symbol) elif holdings < 0: current_shorts.append(symbol) longs_to_liq = set(current_longs) - set(to_buy) shorts_to_liq = set(current_shorts) - set(to_sell) for l in longs_to_liq: self.Liquidate(l) for s in shorts_to_liq: self.Liquidate(s) self.SetHoldings(to_buy[0], 0.25) self.SetHoldings(to_buy[1], 0.25) self.SetHoldings(to_sell[0], -0.25) self.SetHoldings(to_sell[1], -0.25)