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