Overall Statistics
Total Trades
2
Average Win
0%
Average Loss
0%
Compounding Annual Return
44.096%
Drawdown
41.700%
Expectancy
0
Net Profit
40.493%
Sharpe Ratio
0.923
Probabilistic Sharpe Ratio
39.440%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.145
Beta
0.661
Annual Standard Deviation
0.461
Annual Variance
0.213
Information Ratio
-1.815
Tracking Error
0.241
Treynor Ratio
0.644
Total Fees
$122.73
Estimated Strategy Capacity
$290000.00
Lowest Capacity Asset
BTCUSD 10B
class KrakenBrokerageExampleAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 1, 1)
        self.SetCash(100000)
        
        self.SetBrokerageModel(BrokerageName.Kraken, AccountType.Cash)
        
        self.symbol = self.AddCrypto("BTCUSD", Resolution.Minute).Symbol
        
        # Set default order properites
        self.DefaultOrderProperties = KrakenOrderProperties()
        self.DefaultOrderProperties.TimeInForce = TimeInForce.GoodTilCanceled
        self.DefaultOrderProperties.PostOnly = False
        self.DefaultOrderProperties.FeeInBase = False
        self.DefaultOrderProperties.FeeInQuote = True
        self.DefaultOrderProperties.NoMarketPriceProtection = True


    def OnData(self, data):
        if self.Portfolio.Invested:
            return
        
        # Place an order with the default order properties
        self.LimitOrder(self.symbol, 1, round(data[self.symbol].Price + 100, 1))
        
        # Place an order and with new order properties
        order_properties = KrakenOrderProperties()
        order_properties.PostOnly = True
        order_properties.FeeInBase = True
        order_properties.FeeInQuote = False
        order_properties.NoMarketPriceProtection = False
        ticket = self.LimitOrder(self.symbol, 1, round(data[self.symbol].Price * .9, 1), orderProperties = order_properties)
        
        # If we try to call `Update`, an exception is raised
        # ticket.Update()
        
        # Update the order
        ticket.Cancel()
        order_properties.ConditionalOrder = MarketOrder(self.symbol, -1)
        self.LimitOrder(self.symbol, 1, round(data[self.symbol].Price * .99, 1), orderProperties = order_properties)
        
        
    def OnOrderEvent(self, order_event):
        if order_event.Status == OrderStatus.Filled:
            self.Debug(f"Order fee: {order_event.OrderFee}") # The fees are paid in different currencies if we flip FeeInBase and FeeInQuote