Overall Statistics |
Total Trades 9 Average Win 2.21% Average Loss -0.92% Compounding Annual Return 27.109% Drawdown 7.400% Expectancy 1.276 Net Profit 16.314% Sharpe Ratio 1.83 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 2.41 Alpha 0.216 Beta -0.138 Annual Standard Deviation 0.11 Annual Variance 0.012 Information Ratio 0.701 Tracking Error 0.133 Treynor Ratio -1.459 Total Fees $9.00 |
import decimal as d import numpy as np class MovingAverageCrossAlgorithm(QCAlgorithm): def Initialize(self): self.SetCash(100000) self.SetStartDate(2017,1,1) self.SetEndDate(2017,8,20) self.fast = dict() self.slow = dict() for ticker in ["AAPL", "TSLA", "BA", "FB"]: symbol = self.AddEquity(ticker).Symbol self.fast[symbol] = self.SMA(symbol, 20, Resolution.Daily) self.slow[symbol] = self.SMA(symbol, 50, Resolution.Daily) def OnData(self, data): tolerance = 0.00015 for symbol in data.Keys: # Check whether the indicator that need more datapoint is ready if not self.slow[symbol].IsReady: continue fast = self.fast[symbol].Current.Value slow = self.slow[symbol].Current.Value quantity = self.Portfolio[symbol].Quantity # Go Long If MA20 > MA50 if quantity <= 0 and fast > slow * d.Decimal(1 + tolerance): self.Log("BUY {0} for {1}".format(symbol, self.Securities[symbol].Price)) self.SetHoldings(symbol, 0.24) # Go Short if MA20 < MA50 if quantity > 0 and fast < slow: self.Log("SELL {0} for {1}".format(symbol, self.Securities[symbol].Price)) self.Liquidate(symbol)