| Overall Statistics |
|
Total Orders 8 Average Win 0% Average Loss 0% Compounding Annual Return 3.124% Drawdown 5.700% Expectancy 0 Start Equity 25000 End Equity 34992.78 Net Profit 39.971% Sharpe Ratio -0.001 Sortino Ratio -0.001 Probabilistic Sharpe Ratio 19.971% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.006 Beta -0.078 Annual Standard Deviation 0.027 Annual Variance 0.001 Information Ratio -0.472 Tracking Error 0.156 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $2500000.00 Lowest Capacity Asset USDINR 8G Portfolio Turnover 0.03% |
# region imports
from AlgorithmImports import *
# endregion
class ForexCarryTradeAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2014, 5, 1)
self.SetEndDate(2025, 4, 1)
self.SetCash(25000)
rate_symbol_by_ticker = {
"USDEUR": "BCB/17900", # Euro Area
"USDZAR": "BCB/17906", # South Africa
"USDAUD": "BCB/17880", # Australia
"USDJPY": "BCB/17903", # Japan
"USDTRY": "BCB/17907", # Turkey
"USDINR": "BCB/17901", # India
"USDCNY": "BCB/17899", # China
"USDMXN": "BCB/17904", # Mexico
"USDCAD": "BCB/17881" # Canada
}
self._top = -1
self.symbols = {}
for ticker, rate_symbol in rate_symbol_by_ticker.items():
forex_symbol = self.AddForex(ticker, Resolution.Daily, Market.Oanda).Symbol
data_symbol = self.AddData(NasdaqDataLink, rate_symbol, Resolution.Daily, TimeZones.Utc, True).Symbol
self.symbols[str(forex_symbol)] = data_symbol
self.Schedule.On(self.DateRules.MonthStart("USDEUR"), self.TimeRules.BeforeMarketClose("USDEUR"), self.Rebalance)
def Rebalance(self):
top_symbols = sorted(self.symbols, key = lambda x: self.Securities[self.symbols[x]].Price)
self.SetHoldings(top_symbols[0],self._top)
self.SetHoldings(top_symbols[4],-self._top/5)
self.SetHoldings(top_symbols[5],-self._top/5)
self.SetHoldings(top_symbols[6],-self._top/5)
self.SetHoldings(top_symbols[7],-self._top/5)
self.SetHoldings(top_symbols[8],-self._top/5)
def OnData(self, data):
pass
#class QuandlRate(PythonQuandl):
# def __init__(self):
# self.ValueColumnName = 'Value'