Overall Statistics
Total Trades
344
Average Win
0.24%
Average Loss
-0.06%
Compounding Annual Return
3.052%
Drawdown
19.000%
Expectancy
2.607
Net Profit
53.997%
Sharpe Ratio
0.371
Probabilistic Sharpe Ratio
0.181%
Loss Rate
31%
Win Rate
69%
Profit-Loss Ratio
4.24
Alpha
0.038
Beta
-0.186
Annual Standard Deviation
0.062
Annual Variance
0.004
Information Ratio
-0.271
Tracking Error
0.207
Treynor Ratio
-0.124
Total Fees
$0.00
Estimated Strategy Capacity
$970000.00
Lowest Capacity Asset
USDJPY 8G
from AlgorithmImports import *

class ForexCarryTradeAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2008, 1, 1) 
        self.SetCash(25000)
        
        # We will use hard-coded interest rates
        self.rates = {
            "USDAUD": 1.5,    # Australia
            "USDCAD": 0.5,    # Canada
            "USDCNY": 4.35,   # China
            "USDEUR": 0.0,    # Euro Area
            "USDINR": 6.5,    # India
            "USDJPY": -0.1,   # Japan
            "USDMXN": 4.25,   # Mexico
            "USDTRY": 7.5,    # Turkey
            "USDZAR": 7.0     # South Africa
        }
        
        for ticker in self.rates:
            self.AddForex(ticker, Resolution.Daily, Market.Oanda)
            
        self.month = -1

    def OnData(self, data):
        if self.month == self.Time.month:
            return
        
        self.month = self.Time.month
        
        sorted_rates = sorted(self.rates.items(), key = lambda x: x[1])
        
        self.SetHoldings(sorted_rates[0][0], -0.5)
        self.SetHoldings(sorted_rates[-1][0], 0.5)