| Overall Statistics |
|
Total Trades 242 Average Win 0.28% Average Loss -0.10% Compounding Annual Return 6.435% Drawdown 17.500% Expectancy 1.699 Net Profit 86.729% Sharpe Ratio 0.456 Loss Rate 32% Win Rate 68% Profit-Loss Ratio 2.99 Alpha 0.083 Beta -2.478 Annual Standard Deviation 0.107 Annual Variance 0.011 Information Ratio 0.327 Tracking Error 0.107 Treynor Ratio -0.02 Total Fees $0.00 |
# The official interest rate is from Quandl
from QuantConnect.Python import PythonQuandl
from NodaTime import DateTimeZone
class ForexCarryTradeAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2008, 1, 1)
self.SetEndDate(2018, 1, 1)
self.SetCash(25000)
tickers = ["USDEUR", "USDZAR", "USDAUD",
"USDJPY", "USDTRY", "USDINR",
"USDCNY", "USDMXN", "USDCAD"]
rate_symbols = ["BCB/17900", # Euro Area
"BCB/17906", # South Africa
"BCB/17880", # Australia
"BCB/17903", # Japan
"BCB/17907", # Turkey
"BCB/17901", # India
"BCB/17899", # China
"BCB/17904", # Mexico
"BCB/17881"] # Canada
self.symbols = {}
for i in range(len(tickers)):
symbol = self.AddForex(tickers[i], Resolution.Daily, Market.Oanda).Symbol
self.AddData(QuandlRate, rate_symbols[i], Resolution.Daily, DateTimeZone.Utc, True)
self.symbols[str(symbol)] = rate_symbols[i]
self.Schedule.On(self.DateRules.MonthStart("USDEUR"), self.TimeRules.AfterMarketOpen("USDEUR"), Action(self.Rebalance))
def Rebalance(self):
top_symbols = sorted(self.symbols, key = lambda x: self.Securities[self.symbols[x]].Price)
self.SetHoldings(top_symbols[0], -0.5)
self.SetHoldings(top_symbols[-1], 0.5)
def OnData(self, data):
pass
class QuandlRate(PythonQuandl):
def __init__(self):
self.ValueColumnName = 'Value'