Overall Statistics
Total Trades
6
Average Win
0%
Average Loss
-0.01%
Compounding Annual Return
-6.604%
Drawdown
3.300%
Expectancy
-1
Net Profit
-2.856%
Sharpe Ratio
-1.8
Probabilistic Sharpe Ratio
2.072%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.061
Beta
0.032
Annual Standard Deviation
0.029
Annual Variance
0.001
Information Ratio
-2.545
Tracking Error
0.125
Treynor Ratio
-1.68
Total Fees
$0.00
Estimated Strategy Capacity
$880000.00
Lowest Capacity Asset
USDCAD 8G
# The official interest rate is from Quandl
from QuantConnect.Python import PythonQuandl
from NodaTime import DateTimeZone


class ForexCarryTradeAlgorithm(QCAlgorithm):

    def Initialize(self):

        # self.SetStartDate(2016, 1, 1) 
        # self.SetEndDate(2020, 12, 31)  
        # self.SetCash(100000)
        
        self.SetStartDate(2021, 1, 1) 
        self.SetEndDate(2021, 6, 4)  
        self.SetCash(21000)
        
        
        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'