Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 2.109% Drawdown 0.900% Expectancy 0 Net Profit 0.689% Sharpe Ratio 1.145 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.085 Beta -3.226 Annual Standard Deviation 0.018 Annual Variance 0 Information Ratio 0.057 Tracking Error 0.018 Treynor Ratio -0.007 Total Fees $1.00 |
import numpy as np from decimal import * class trailingStopLossHack(QCAlgorithm): def Initialize(self): self.SetStartDate(2013,10, 7) #Set Start Date self.SetEndDate(2014,2,3) #Set End Date self.SetCash(10000) #Set Strategy Cash self.AddEquity("SPY", Resolution.Daily) self.stopLossLevel = [] # Set trailing stop percentage self.stopLossPct = 0.05 ### Add plot IndicatorPlot = Chart("Trade Plot") IndicatorPlot.AddSeries(Series("Price", SeriesType.Line, 0)) IndicatorPlot.AddSeries(Series("Trailing Stop-Loss", SeriesType.Line, 0)) self.AddChart(IndicatorPlot) def OnData(self, data): if not data.ContainsKey("SPY"): return price = data["SPY"].Close # Buy SPY if not invested if not self.Portfolio.Invested: self.Buy("SPY", 10) if self.Portfolio.Invested: # Calculate current stop loss level currentStopLoss=price*Decimal(1-self.stopLossPct) # Check if current stop loss level exceeds all values in stopLossLevel list SL = [i for i in self.stopLossLevel if i >= currentStopLoss] # If current stop loss level exceeds all values in stopLossLevel list, then add value to list if len(SL)==0: self.stopLossLevel.append(currentStopLoss) # If current price is less than current stop loss level value, then liquidate if price<self.stopLossLevel[-1]: self.Sell("SPY", -10) ## Add values to Trade-Plot if len(self.stopLossLevel)>0: self.Plot("Trade Plot", "Price", price) self.Plot("Trade Plot", "Trailing Stop-Loss", self.stopLossLevel[-1]) # Reset stopLossLevel list on order fill def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) if order.Status == OrderStatus.Filled: self.stopLossLevel = []