| Overall Statistics |
|
Total Trades 1831 Average Win 0.76% Average Loss -0.65% Compounding Annual Return -29.606% Drawdown 88.800% Expectancy -0.263 Net Profit -82.764% Sharpe Ratio -0.782 Probabilistic Sharpe Ratio 0.000% Loss Rate 66% Win Rate 34% Profit-Loss Ratio 1.17 Alpha -0.197 Beta -0.137 Annual Standard Deviation 0.278 Annual Variance 0.077 Information Ratio -1.094 Tracking Error 0.337 Treynor Ratio 1.582 Total Fees $0.00 Estimated Strategy Capacity $1300000.00 Lowest Capacity Asset AUDJPY 5O |
class BootCampTask(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2016, 6, 1)
self.SetEndDate(2021, 6, 1)
self.SetCash(100000)
self.period = 125
self.totalPairsToHold = 6
self.indicators = {}
self.leverage = 5.0
self.tickers = ["USDCAD","EURJPY","EURUSD","EURCHF","USDCHF","EURGBP",
"GBPUSD","AUDCAD","NZDUSD","GBPCHF","AUDUSD","GBPJPY",
"USDJPY","CHFJPY","EURCAD","AUDJPY","EURAUD","AUDNZD"]
#self.SetBrokerageModel(BrokerageName.FxcmBrokerage)
for ticker in self.tickers:
self.AddForex(ticker, Resolution.Daily, Market.FXCM);
self.indicators[ticker] = self.MOMP(ticker, self.period, Resolution.Daily);
self.Securities[ticker].FeeModel = ConstantFeeModel(0)
self.SetWarmup(self.period)
def OnData(self, data):
if self.IsWarmingUp:
return
gainers = pd.Series(self.indicators).sort_values(ascending = False)[:int(self.totalPairsToHold / 2)].keys()
losers = pd.Series(self.indicators).sort_values(ascending = True)[:int(self.totalPairsToHold / 2)].keys()
for ticker in self.indicators.keys():
if (ticker in gainers) == False and (ticker in losers) == False:
if self.Portfolio[ticker].Invested:
self.Liquidate(ticker)
for ticker in gainers:
if self.Portfolio[ticker].Invested == False:
self.SetHoldings(ticker, self.leverage / self.totalPairsToHold)
for ticker in losers:
if self.Portfolio[ticker].Invested == False:
self.SetHoldings(ticker, -self.leverage / self.totalPairsToHold)