Supported Models
Kraken
Introduction
This page explains the KrakenBrokerageModel, including the asset classes it supports, its default security-level models, and its default markets.
SetBrokerageModel(BrokerageName.Kraken, AccountType.Cash); SetBrokerageModel(BrokerageName.Kraken, AccountType.Margin);
self.set_brokerage_model(BrokerageName.KRAKEN, AccountType.CASH) self.set_brokerage_model(BrokerageName.KRAKEN, AccountType.MARGIN)
For more information about this model, see the class reference and implementation.
For more information about this model, see the class reference and implementation.
Asset Classes
The KrakenBrokerageModel supports trading Crypto.
Orders
The KrakenBrokerageModel supports several order types and order properties, but it doesn't support order updates.
Order Types
The following table describes the available order types for each asset class that the KrakenBrokerageModel supports:
| Order Type | Crypto |
|---|---|
| Market | ![]() |
| Limit | ![]() |
| Limit if touched | ![]() |
| Stop market | ![]() |
| Stop limit | ![]() |
Order Properties
The KrakenBrokerageModel supports custom order properties. The following table describes the members of the KrakenOrderProperties object that you can set to customize order execution:
| Property | Data Type | Description | Default Value |
|---|---|---|---|
TimeInForcetime_in_force | TimeInForce | A TimeInForce instruction to apply to the order. The following instructions are supported:
| TimeInForce.GoodTilCanceledTimeInForce.GOOD_TIL_CANCELED |
PostOnlypost_only | bool | A flag to signal that the order must only add liquidity to the order book and not take liquidity from the order book. If part of the order results in taking liquidity rather than providing liquidity, the order is rejected without any part of it being filled. | |
FeeInBasefee_in_base | bool | A flag to signal that the order fees should be paid in the base currency, which is the default behavior when selling. This flag must be the opposite of the FeeInQuotefee_in_quote flag. | |
FeeInQuotefee_in_quote | bool | A flag to signal that the order fees should be paid in the quote currency, which is the default behavior when buying. This flag must be the opposite of the FeeInBasefee_in_base flag. | |
NoMarketPriceProtectionno_market_price_protection | bool | A flag to signal that no Market Price Protection should be used. | |
ConditionalOrderconditional_order | Order | An Order that's submitted when the primary order is executed. The ConditionalOrderconditional_order quantity must match the primary order quantity and the ConditionalOrderconditional_order direction must be the opposite of the primary order direction. This order property is only available for live algorithms. |
public override void Initialize()
{
// Set the default order properties
DefaultOrderProperties = new KrakenOrderProperties
{
TimeInForce = TimeInForce.GoodTilCanceled,
PostOnly = false,
FeeInBase = true,
FeeInQuote = false,
NoMarketPriceProtection = true
};
}
public override void OnData(Slice slice)
{
// Use default order order properties
LimitOrder(_symbol, quantity, limitPrice);
// Override the default order properties
LimitOrder(_symbol, quantity, limitPrice,
orderProperties: new KrakenOrderProperties
{
TimeInForce = TimeInForce.Day,
PostOnly = true,
FeeInBase = false,
FeeInQuote = true,
NoMarketPriceProtection = true
});
LimitOrder(_symbol, quantity, limitPrice,
orderProperties: new KrakenOrderProperties
{
TimeInForce = TimeInForce.GoodTilDate(new DateTime(year, month, day)),
PostOnly = false,
FeeInBase = true,
FeeInQuote = false,
NoMarketPriceProtection = false,
ConditionalOrder = StopLimitOrder(_symbol, -quantity, stopLimitPrice, stopPrice)
});
} def initialize(self) -> None:
# Set the default order properties
self.default_order_properties = KrakenOrderProperties()
self.default_order_properties.time_in_force = TimeInForce.GOOD_TIL_CANCELED
self.default_order_properties.post_only = False
self.default_order_properties.fee_in_base = True
self.default_order_properties.fee_in_quote = False
self.default_order_properties.no_market_price_protection = True
def on_data(self, slice: Slice) -> None:
# Use default order order properties
self.limit_order(self._symbol, quantity, limit_price)
# Override the default order properties
order_properties = KrakenOrderProperties()
order_properties.time_in_force = TimeInForce.DAY
order_properties.post_only = True
order_properties.fee_in_base = False
order_properties.fee_in_quote = True
order_properties.no_market_price_protection = True
self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties)
order_properties.time_in_force = TimeInForce.good_til_date(datetime(year, month, day))
order_properties.post_only = False
order_properties.fee_in_base = True
order_properties.fee_in_quote = False
order_properties.no_market_price_protection = False
order_properties.conditional_order = StopLimitOrder(self._symbol, -quantity, stop_limit_price, stop_price)
self.limit_order(self._symbol, quantity, limit_price, order_properties=order_properties)
Updates
The KrakenBrokerageModel doesn't support order updates, but you can cancel an existing order and then create a new order with the desired arguments. For more information about this workaround, see the Workaround for Brokerages That Don’t Support Updates.
Fills
The KrakenBrokerageModel uses the ImmediateFillModel.
Slippage
The KrakenBrokerageModel uses the NullSlippageModel.
Fees
The KrakenBrokerageModel uses the KrakenFeeModel.
Buying Power
The KrakenBrokerageModel uses the CashBuyingPowerModel for cash accounts and the SecurityMarginModel for margin accounts.
If you have a margin account, the KrakenBrokerageModel allows 1x leverage for most Crypto pairs. The following table shows pairs that have additional leverage available:
| Quote Currency | Base Currencies | Leverage |
|---|---|---|
| ADA | BTC, ETH, USD, EUR | 3 |
| BCH | BTC, USD, EUR | 2 |
| BTC | USD, EUR | 5 |
| DASH | BTC, USD, EUR | 3 |
| EOS | BTC, ETH, USD, EUR | 3 |
| ETH | BTC, USD, EUR | 5 |
| LINK | BTC, ETH, USD, EUR | 3 |
| LTC | BTC, USD, EUR | 3 |
| REP | BTC, ETH, USD, EUR | 2 |
| TRX | BTC, ETH, USD, EUR | 3 |
| USDC | USD, EUR | 3 |
| USDT | USD, EUR | 2 |
| XMR | BTC, USD, EUR | 2 |
| XRP | BTC, USD, EUR | 3 |
| XTZ | BTC, ETH, USD, EUR | 2 |
Settlement
The KrakenBrokerageModel uses the ImmediateSettlementModel.
Margin Interest Rate
The KrakenBrokerageModel uses the NullMarginInterestRateModel.
Account Currency
The KrakenBrokerageModel doesn't set a default currency.
To change the algorithm's currency from USD to a different currency, see Set Account Currency.
