| Overall Statistics |
|
Total Trades 67 Average Win 6.61% Average Loss -4.39% Compounding Annual Return -18.528% Drawdown 49.500% Expectancy -0.127 Net Profit -33.722% Sharpe Ratio -0.22 Loss Rate 65% Win Rate 35% Profit-Loss Ratio 1.51 Alpha -1.381 Beta 64.278 Annual Standard Deviation 0.454 Annual Variance 0.206 Information Ratio -0.264 Tracking Error 0.454 Treynor Ratio -0.002 Total Fees $258.41 |
import numpy as np
class BasicTemplateAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2013,10, 7)
self.SetEndDate(2015,10,11)
self.SetCash(100000)
self.AddEquity("TSLA", Resolution.Hour)
self.ema_slow_period = 50
self.ema_slow = None
self.ema_fast_period = 20
self.ema_fast = None
self.slices_since_last_order = 0
self.last_direction = 0
avgCross = Chart("Average Cross")
avgCross.AddSeries(Series("FastMA", SeriesType.Line, 1))
avgCross.AddSeries(Series("SlowMA", SeriesType.Line, 1))
self.AddChart(avgCross)
def OnData(self, data):
last = float(data.Bars['TSLA'].Close)
if not self.ema_fast or not self.ema_slow:
self.ema_fast = last
self.ema_slow = last
else:
w_slow = 2 / (self.ema_slow_period + 1)
self.ema_slow = last * w_slow + self.ema_slow * (1 - w_slow)
w_fast = 2 / (self.ema_fast_period + 1)
self.ema_fast = last * w_fast + self.ema_fast * (1 - w_fast)
self.Plot("Average Cross", "SlowMA", self.ema_slow)
self.Plot("Average Cross", "FastMA", self.ema_fast)
if self.ema_slow < self.ema_fast and self.last_direction != 1:
self.last_direction = 1
self.SetHoldings("TSLA", 1)
elif self.ema_slow > self.ema_fast and self.last_direction != -1:
self.last_direction = -1
self.SetHoldings("TSLA", -1)