Overall Statistics |
Total Trades 685 Average Win 0.02% Average Loss -0.03% Compounding Annual Return -91.750% Drawdown 4.700% Expectancy -0.582 Net Profit -4.672% Sharpe Ratio -28.649 Loss Rate 75% Win Rate 25% Profit-Loss Ratio 0.66 Alpha -1.482 Beta -32.124 Annual Standard Deviation 0.07 Annual Variance 0.005 Information Ratio -28.74 Tracking Error 0.07 Treynor Ratio 0.062 Total Fees $5072.87 |
import numpy as np from decimal import Decimal ### <summary> ### Basic template algorithm simply initializes the date range and cash. This is a skeleton ### framework you can use for designing an algorithm. ### </summary> class BasicTemplateAlgorithm(QCAlgorithm): '''Basic template algorithm simply initializes the date range and cash''' def Initialize(self): '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.''' self.SetStartDate(2013,1,7) #Set Start Date self.SetEndDate(2013,1,11) #Set End Date self.SetCash(100000) #Set Strategy Cash self.aaa = self.AddSecurity(SecurityType.Equity, "SPY", Resolution.Minute) #self.aaa = self.AddForex("EURUSD", Resolution.Minute) self.syl = self.aaa.Symbol self.trade_flag = 0 self.window = RollingWindow[TradeBar](2) self.Schedule.On(self.DateRules.EveryDay(self.syl), self.TimeRules.At(9, 59), Action(self.Start)) self.Schedule.On(self.DateRules.EveryDay(self.syl), self.TimeRules.At(14, 59), Action(self.End)) self.SetWarmUp(32, Resolution.Minute) self.holding = "none" def Start(self): self.trade_flag = 1 def End(self): self.trade_flag = 0 self.SetHoldings(self.syl, 0) self.holding = "none" def OnData(self, data): if data.ContainsKey(self.syl): self.window.Add(data[self.syl]) if not (self.window.IsReady): return currBar = self.window[0] pastBar = self.window[1] try: past_change = 100* (pastBar.Close - pastBar.Open)/pastBar.Open except: return tol = 0.001 if self.trade_flag == 1: if self.holding == "none": if past_change > tol: self.SetHoldings(self.syl, -1) self.holding = "short" if past_change < -tol: self.SetHoldings(self.syl, 1) self.holding = "long" if self.holding == "short": if past_change > 0: return if 0 > past_change > -tol: self.SetHoldings(self.syl, 0) self.holding = "none" if past_change < -tol: self.SetHoldings(self.syl, 1) self.holding = "long" if self.holding == "long": if past_change < 0: return if tol > past_change > 0: self.SetHoldings(self.syl, 0) self.holding = "none" if past_change > tol: self.SetHoldings(self.syl, -1) self.holding = "short" #End