| Overall Statistics |
|
Total Trades 138 Average Win 11.96% Average Loss -4.97% Compounding Annual Return 342.809% Drawdown 49.700% Expectancy 0.580 Net Profit 314.496% Sharpe Ratio 3.551 Probabilistic Sharpe Ratio 79.370% Loss Rate 54% Win Rate 46% Profit-Loss Ratio 2.41 Alpha 2.431 Beta 0.559 Annual Standard Deviation 0.804 Annual Variance 0.647 Information Ratio 2.724 Tracking Error 0.769 Treynor Ratio 5.113 Total Fees $231.28 Estimated Strategy Capacity $15000000.00 Lowest Capacity Asset ETHUSD XJ |
from QuantConnect.Indicators import *
import decimal as d
class BollingerBreakoutAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 1, 1) #Set Start Date
#self.SetCash("ETH",0.05)
self.SetCash(100)
self.ticker="ETHUSD"
self.symbol=self.AddCrypto(self.ticker, Resolution.Daily)
self.SetBrokerageModel(BrokerageName.GDAX,AccountType.Cash)
x=16
self.trailing_stop = 0.05
self.stopTargetPrice = 0
self.Bolband = self.BB(self.ticker, x, 3, MovingAverageType.Simple, Resolution.Daily)
self.SetWarmUp(x)
self.Schedule.On(self.DateRules.EveryDay(),self.TimeRules.At(12,1),self.EveryDayAfterMarketOpen)
def OnData(self, data):
if self.IsWarmingUp != False:
return
holdings = self.Portfolio[self.ticker].Quantity
price = self.Securities[self.ticker].Close
if holdings <= 0:
if price > self.Bolband.LowerBand.Current.Value:
quantity = self.CalculateOrderQuantity(self.ticker,1)
self.MarketOrder(self.ticker, quantity)
stopPrice = round((1-self.trailing_stop)*self.Securities[self.ticker].Price,2)
self.stopTicket = self.StopMarketOrder(self.ticker, quantity, stopPrice,'Exited using Sell Stop')
self.stopTargetPrice = self.Securities[self.ticker].Price
else:
if self.Securities[self.ticker].Price < self.stopTargetPrice and self.stopTargetPrice!=0:
updateFields = UpdateOrderFields()
updateFields.StopPrice = round(self.Securities[self.ticker].Price*(1+self.trailing_stop),2)
self.stopTicket.Update(updateFields)
self.stopTargetPrice = self.Securities[self.ticker].Price
if holdings > 0 and price < self.Bolband.MiddleBand.Current.Value:
self.Liquidate()
def EveryDayAfterMarketOpen(self):
pass