| Overall Statistics |
|
Total Trades 3 Average Win 0% Average Loss 0% Compounding Annual Return 21.697% Drawdown 42.900% Expectancy 0 Net Profit 21.762% Sharpe Ratio 0.691 Probabilistic Sharpe Ratio 33.815% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.333 Beta -0.299 Annual Standard Deviation 0.395 Annual Variance 0.156 Information Ratio 0.128 Tracking Error 0.55 Treynor Ratio -0.913 Total Fees $5.79 Estimated Strategy Capacity $41000000.00 Lowest Capacity Asset SVXY V0H08FY38ZFP |
from AlgorithmImports import *
class MultiAssetManager(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetEndDate(2021, 1, 1)
self.SetCash(100000)
self.resolution = int(self.GetParameter("Resolution"))
self.equities = self.GetParameter("Equities").split(",")
self.forexPairs = self.GetParameter("ForexPairs").split(",")
self.cryptoPairs = self.GetParameter("CryptoPairs").split(",")
for equity in self.equities:
if len(equity) < 3:
continue
self.AddEquity(equity, self.resolution)
for forex in self.forexPairs:
if len(forex) < 3:
continue
self.AddForex(forex, self.resolution)
for crypto in self.cryptoPairs:
if len(crypto) < 3:
continue
self.AddCrypto(crypto, self.resolution)
allocationRatioVariable = self.GetParameter(
"AllocationRatio").split(",")
self.allocationRatio = {}
allocationSum = 0
for allocation in allocationRatioVariable:
[pair, ratio] = allocation.split(":")
self.allocationRatio[pair] = float(ratio)
allocationSum += float(ratio)
if allocationSum > 1:
raise Exception('Allocation Sum is more than 1')
else:
self.Log("Not allocated%:"+str(1-allocationSum))
self.plotPairPrices()
def OnData(self, data):
self.plotPrices(data)
if not self.Portfolio.Invested:
for pair in self.allocationRatio.keys():
self.SetHoldings(pair, self.allocationRatio[pair])
self.Log("Purchased Stock")
def plotPairPrices(self):
pricesChart = Chart('Prices')
for pair in self.allocationRatio.keys():
pricesChart.AddSeries(
Series(pair, SeriesType.Line, "$"))
self.AddChart(pricesChart)
def plotPrices(self, data):
for pair in self.allocationRatio.keys():
if pair not in data:
continue
price = data[pair].Value
self.Plot("Prices", pair, price)