3 minutes
Premier limit order avec Nautilus trader sur Binance
Dans cet article, j’approfondis l’adapter Binance écrit en Rust de Nautilus trader pour pouvoir me connecter au testnet de Binance pour réaliser un limit order.
Accès au testnet de Binance
Data tester
L’adapter existant ne supporte pas le testnet.
Créer une API key sur https://testnet.binance.vision/key/register:
openssl genrsa -out test-prv-key.pem 2048
openssl rsa -in test-prv-key.pem -pubout -outform PEM -out test-pub-key.pem
Je préconise de créer une autre example dans l’adapter binance: node_data_tester_testnet.rs
export BINANCE_API_KEY="API_KEY_FROM_BINANCE_TESTNET_WEBSITE"
export BINANCE_API_SECRET="$(cat /path/to/test-prv-key.pem)"
cargo run --release --example binance-spot-data-tester-testnet --package nautilus-binance
Résultat:
2026-02-23T22:08:55.464317000Z [INFO] TRADER-001.nautilus_binance::spot::websocket::streams::client: Connecting to Binance SBE WebSocket: url=wss://stream.testnet.binance.vision/ws, auth=false

Exec tester
Comme pour le script précédent, je préconise de créer un nouveau fichier dans l’adapter binance: node_exec_tester_testnet.rs.
export BINANCE_API_KEY="API_KEY_FROM_BINANCE_TESTNET_WEBSITE"
export BINANCE_API_SECRET="$(cat /path/to/test-prv-key.pem)"
cargo run --release --example binance-spot-exec-tester-testnet --package nautilus-binance
Résultat:

Lister les limit orders sur Binance testnet via API call
Créer un fichier ./check_orders.sh avec le contenu suivant:
#!/bin/bash
API_KEY="..."
SECRET_KEY="..."
BASE_URL="https://testnet.binance.vision"
SYMBOL="${1:-BTCUSDT}"
# Verify keys
if [[ "$API_KEY" == "ta_cle_api_ici" ]] || [[ "$SECRET_KEY" == "ton_secret_ici" ]]; then
echo "❌ Erreur : Modifie API_KEY et SECRET_KEY avec tes vraies clés testnet !" >&2
exit 1
fi
# Timestamp in milliseconds
TIMESTAMP=$(date +%s000)
QUERY_PARAMS="symbol=${SYMBOL}×tamp=${TIMESTAMP}&recvWindow=5000"
SIGNATURE=$(echo -n "$QUERY_PARAMS" | openssl dgst -sha256 -hmac "$SECRET_KEY" -binary | xxd -p -c 0)
FULL_URL="${BASE_URL}/api/v3/openOrders?${QUERY_PARAMS}&signature=${SIGNATURE}"
echo "📊 Récupération des open orders pour ${SYMBOL}..."
# Call Binance testnet API
RESPONSE=$(curl -s -H "X-MBX-APIKEY: ${API_KEY}" \
--connect-timeout 10 \
--max-time 30 \
"${FULL_URL}")
# Check if there is an error
if echo "$RESPONSE" | grep -q '"code"'; then
echo "❌ Erreur API : $RESPONSE" >&2
exit 1
fi
# Process and display the orders
echo "$RESPONSE" | jq --arg symb "$SYMBOL" '
# Filtrer seulement les LIMIT orders
[.[]? | select(.type? == "LIMIT")] as $limits |
if ($limits | length) == 0 then
"✅ Aucune LIMIT order ouverte pour \($symb)"
else
"📋 \(($limits | length)) LIMIT order(s) ouverte(s) :",
$limits[] | {
symbol: .symbol,
side: .side,
price: .price,
qty: .origQty,
filled: .executedQty,
status: .status,
time: (.time | tonumber / 1000 | strftime("%Y-%m-%d %H:%M:%S"))
}
end
'
Exécuter: ./check_orders.sh BTCUSDT
Je peux maintenant lister les prix avec de bonnes perf et exécuter des trades sur le mainnet et le testnet de Binance. Je vais maintenant pouvoir créer des screeners et quelques stratégies simples en Rust avec des ordres d’achat et vente par palier. Je vais mettre en place de l’alerting (notif OSX et telegram) et du reporting (TUI).
Je passerai ensuite aux étapes suivantes:
- Connecter le projet à l’API demo de Binance
- Accéder à mon portefeuille sur Binance demo & testnet
- A très court terme, créer une stratégie sur un exchange “sniper de liquidité”
- Créer une stratégie d’arbitrage triangulaire sur un exchange
- Créer une stratégie de funding rate sur perp & spot sur un exchange
- Créer des stratégies simple sur 2 exchanges (par exemple: arbitrage simple sur marché spot ou funding rate).
- Tester la partie Python pour tester des stratégies plus complexes + Backtesting
- Accéder en python à l’API testnet de Binance
- Créer des stratégies sur plus de 2 exchanges
- Et pleins d’autres…