| Overall Statistics |
|
Total Trades 224 Average Win 3.31% Average Loss -1.89% Compounding Annual Return 6.734% Drawdown 30.100% Expectancy 0.201 Net Profit 43.879% Sharpe Ratio 0.512 Probabilistic Sharpe Ratio 11.419% Loss Rate 56% Win Rate 44% Profit-Loss Ratio 1.75 Alpha 0.074 Beta 0.05 Annual Standard Deviation 0.158 Annual Variance 0.025 Information Ratio -0.191 Tracking Error 0.237 Treynor Ratio 1.606 Total Fees $224.00 |
class TransdimensionalNadionAtmosphericScrubbers(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2015, 1, 1) # Set Start Date
self.SetCash(10000)
self.tsla = self.AddEquity("TSLA", Resolution.Minute).Symbol
self.trailing_stop_distance = 10
self.lookback_max = self.MAX(self.tsla, 22, Resolution.Daily)
self.last_close = 0
self.trailing_stop = None
self.highest_tsla_price = 0
def OnData(self, data):
c = data[self.tsla].Close
if self.Portfolio.Invested:
if c > self.highest_tsla_price:
self.highest_tsla_price = c
update_fields = UpdateOrderFields()
update_fields.StopPrice = c - self.trailing_stop_distance
self.trailing_stop.Update(update_fields)
else:
prev_high = self.lookback_max.Current.Value
if self.last_close <= prev_high and c > prev_high:
quantity = self.CalculateOrderQuantity(self.tsla, 1)
if quantity:
entry_price = self.MarketOrder(self.tsla, quantity).AverageFillPrice
self.highest_tsla_price = entry_price
exit_price = entry_price - self.trailing_stop_distance
self.trailing_stop = self.StopMarketOrder(self.tsla, -quantity, exit_price)
self.last_close = c
def OnOrderEvent(self, orderEvent):
if orderEvent.Status != OrderStatus.Filled:
return
if not self.Portfolio.Invested:
self.highets_tsla_price = 0