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()))