Smart Maker Order Strategy (0.00% fee)
One of the biggest advantages of trading on the Revolut X exchange is its fee structure:
| Execution type | Fee | Description |
|---|---|---|
| Maker | 0.00 % | The order adds liquidity to the order book (limit order). |
| Taker | 0.09 % | The order removes liquidity (market order, or a limit order matched aggressively). |
At larger volumes or in algorithmic trading, the difference between 0.00 % and 0.09 % amounts to a substantial cost saving.
How post_only Protection Works
When you submit a limit order, the market price may move and the order may match against the other side immediately. In that case the exchange would charge the 0.09% (Taker) fee.
The post_only = true flag:
- Guarantees that the order enters the order book exclusively as a Maker.
- If the order would execute immediately as a Taker, the exchange rejects/cancels it right away at no fee.
Dynamic Maker Price Calculation
The library includes a dedicated MakerOrderStrategy class that computes the optimal limit price from the live market state, with a safety offset:
- For BUY: $$\text{price} = \text{best_bid} - \text{offset}$$
- For SELL: $$\text{price} = \text{best_ask} + \text{offset}$$
The price is then rounded to a valid price increment for the trading pair (tick_size).
Usage Examples
from revolut_x import RevolutXClient, OrderSide
client = RevolutXClient(api_key="...", private_key_path="keys/private.pem")
# Fetches the current bid/ask, applies a 0.10 EUR offset and submits with post_only=True
order = client.place_maker_order(
symbol="BTC-EUR",
side=OrderSide.BUY,
quote_size="50.00",
offset="0.10",
)
use RevolutX\Client;
use RevolutX\Types\OrderSide;
$client = new Client(apiKey: '...', privateKeyPath: 'keys/private.pem');
// Fetches the current bid/ask, applies a 0.10 EUR offset and submits with post_only=True
$order = $client->placeMakerOrder(
symbol: 'BTC-EUR',
side: OrderSide::BUY,
quoteSize: '50.00',
offset: '0.10'
);