Overall Statistics
Total Trades
31
Average Win
0.56%
Average Loss
0%
Compounding Annual Return
40712.128%
Drawdown
5.600%
Expectancy
0
Net Profit
8.584%
Sharpe Ratio
185.166
Probabilistic Sharpe Ratio
99.949%
Loss Rate
0%
Win Rate
100%
Profit-Loss Ratio
0
Alpha
-18.028
Beta
0.034
Annual Standard Deviation
0.217
Annual Variance
0.047
Information Ratio
-2942.866
Tracking Error
0.561
Treynor Ratio
1167.22
Total Fees
$7.70
Estimated Strategy Capacity
$310000.00
class BasicTemplateAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 2, 15)
        self.SetEndDate(2021, 2, 19)
        
        self.SetCash('USD', 100)
        self.SetCash('ETH', 0)
        
        self.Settings.FreePortfolioValuePercentage = 0.05
        
        self.symbol = self.AddCrypto("ETHUSD", Resolution.Minute, Market.GDAX).Symbol
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash) 
        self.sto = self.STO("ETHUSD", 14)
        
        self.sell_price = None

    def OnData(self, data):
        
        if not self.sto.IsReady: 
            return
    
        price = self.Securities[self.symbol].Close
        if self.sto.Current.Value < 10 and self.Portfolio.CashBook["ETH"].Amount == 0:
            self.Debug("STO is low")
            
            # Calculate order quantity
            usd = self.Portfolio.CashBook["USD"].Amount
            quantity = usd * (1 - self.Settings.FreePortfolioValuePercentage) / price
            
            self.MarketOrder(self.symbol, quantity)
            self.Debug(f"Market order was placed for {quantity} ETH")
            self.sell_price = (1 + 0.01) * price
        
        if self.sell_price is not None and price >= self.sell_price:
            self.Debug("Price is at a 1% gain")
            self.MarketOrder(self.symbol, -self.Portfolio.CashBook["ETH"].Amount)
            self.sell_price = None