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'