Overall Statistics |
Total Trades 3424 Average Win 0.27% Average Loss -0.25% Compounding Annual Return 57.858% Drawdown 32.600% Expectancy 0.142 Net Profit 163.620% Sharpe Ratio 0.974 Probabilistic Sharpe Ratio 48.273% Loss Rate 45% Win Rate 55% Profit-Loss Ratio 1.07 Alpha 0.543 Beta -0.423 Annual Standard Deviation 0.513 Annual Variance 0.263 Information Ratio 0.731 Tracking Error 0.544 Treynor Ratio -1.18 Total Fees $0.00 |
import numpy as np class spxsSPXLAlgo(QCAlgorithm): def Initialize(self): self.SetStartDate(2018,1,5) # Set Start Date self.SetCash(50000) # Set Strategy Cash self.tickers = ["USDCHF","EURUSD", "EURGBP", "GBPUSD","AUDJPY", "NZDJPY", "AUDNZD"] # Define the security universe for symbol in self.tickers: self.AddForex(symbol, Resolution.Daily) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.Every(timedelta(minutes=15)), self.protect) self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday), self.TimeRules.At(3,00), self.europe) self.lossTrigger = self.Portfolio.TotalPortfolioValue * 0.96 self.profitTrigger = self.Portfolio.TotalPortfolioValue * 1.03 self.megaTrigger = self.Portfolio.TotalPortfolioValue * 1.05 self.stopLoss = self.lossTrigger - self.Portfolio.TotalPortfolioValue self.takeProfit = self.profitTrigger - self.Portfolio.TotalPortfolioValue self.megaProfit = self.megaTrigger - self.Portfolio.TotalPortfolioValue self.Notify.Sms("17574091415", "7 Pair Hedging Algorithm Launched at: " + str(self.Time)) def OnData(self, data): pass def europe(self): #Rebalance portfolio daily for symbol in self.tickers: if self.Portfolio.TotalUnrealizedProfit < self.stopLoss: if symbol=="AUDJPY": self.SetHoldings(symbol,1) self.Notify.Sms("17574091415", "Good Morning Apollos3% Stop loss rebalanced overnight") elif symbol=="NZDJPY": self.SetHoldings(symbol,-1) elif symbol=="AUDNZD": self.SetHoldings(symbol,-1) elif symbol=="GBPUSD": self.SetHoldings(symbol,-1) elif symbol=="EURGBP": self.SetHoldings(symbol,-1) else: self.SetHoldings(symbol, -1) elif self.Portfolio.TotalUnrealizedProfit > self.takeProfit: if symbol=="AUDJPY": self.SetHoldings(symbol,1.5) self.Notify.Sms("17574091415", "2.5% Profit Rebalanced Overnight") elif symbol=="NZDJPY": self.SetHoldings(symbol,-2.75) elif symbol=="AUDNZD": self.SetHoldings(symbol,-3) elif symbol=="GBPUSD": self.SetHoldings(symbol,-4) elif symbol=="EURGBP": self.SetHoldings(symbol,-4) else: self.SetHoldings(symbol, -16/2) elif self.Portfolio.TotalUnrealizedProfit > self.megaProfit: if symbol=="AUDJPY": self.SetHoldings(symbol,1.25) self.Notify.Sms("17574091415", "Good Morning Sir, 5% Profit Rebalanced") elif symbol=="NZDJPY": self.SetHoldings(symbol,-2.5) elif symbol=="AUDNZD": self.SetHoldings(symbol,-2.75) elif symbol=="GBPUSD": self.SetHoldings(symbol,-2) elif symbol=="EURGBP": self.SetHoldings(symbol,-2) else: self.SetHoldings(symbol, -8/2) else: if symbol=="AUDJPY": self.SetHoldings(symbol,1.25) self.Notify.Sms("17574091415", "Regular Rebalance Happend Last Night") elif symbol=="NZDJPY": self.SetHoldings(symbol,-2.5) elif symbol=="AUDNZD": self.SetHoldings(symbol,-2.75) elif symbol=="GBPUSD": self.SetHoldings(symbol,-3) elif symbol=="EURGBP": self.SetHoldings(symbol,-3) else: self.SetHoldings(symbol, -12/2) def protect(self): for symbol in self.tickers: if self.Portfolio.TotalUnrealizedProfit < self.stopLoss: self.Notify.Sms("17574091415", "WARNING:The TotalUnrealizedProfit: " + str(self.Portfolio.TotalUnrealizedProfit) + " Is less than the stoploss: " + str(self.stopLoss)) for symbol in self.tickers: if not self.Portfolio.Invested: if symbol=="AUDJPY": self.SetHoldings(symbol,1.25) #4% margin elif symbol=="NZDJPY": self.SetHoldings(symbol,-2.5) #4%m elif symbol=="AUDNZD": self.SetHoldings(symbol,-2.75) #3%m elif symbol=="GBPUSD": self.SetHoldings(symbol,-3) #5%m elif symbol=="EURGBP": self.SetHoldings(symbol,-3) #5% else: self.SetHoldings(symbol, -12/2) self.Notify.Sms("17574091415", "We aren't invested, so I'm investing us in the 7 currencies") #self.Log("We aren't invested, so I'm investing us in the 7 currencies") def OnOrderEvent(self, orderEvent): #self.Log("{}".format(orderEvent.ToString())) self.Notify.Sms("17574091415", "~ Algo ~ {} {}".format(self.Time, orderEvent.ToString())) self.Log("TotalMarginRemaining, {} TotalMarginUsed {} {}".format(self.Portfolio.MarginRemaining, self.Portfolio.TotalMarginUsed, orderEvent.ToString()))