Comment puis-je trader des produits dérivés avec le Jupyter Notebook ?

Date de publication : 28 sept. 2023Date de mise à jour : 25 oct. 2024Lecture de 11 min80

Découvrez comment vous pouvez utiliser les mêmes outils pour trader simplement des produits dérivés. Utilisons les fonctionnalités complètes disponibles dans python-okx à un niveau supérieur !

Types de produits dérivés

Il existe trois types de produits dérivés disponibles pour le trading sur OKX :

  • Contrats à expiration

  • Contrats perpétuels

  • Contrats d’options

Vous pouvez accéder aux explications sur les produits dérivés Bitcoin : contrats à expiration, perpétuels et d’options pour en savoir plus sur les caractéristiques de différents types de produits dérivés sur OKX. Dans ce tutoriel, nous utiliserons les perpétuels comme exemple.

FAQ

1. Comment puis-je obtenir les données de marché via Obtenir des données de marché ?

Vous pouvez également remplacer instType par EXPIRY ou OPTION pour information.

Python
     import okx.MarketData as MarketData

   flag = "1"  # live trading: 0, demo trading: 1

   marketDataAPI = MarketData.MarketAPI(flag = flag)

   result = marketDataAPI.get_tickers(instType = "SWAP")
   print(result)

2. Comment puis-je accéder aux paires de trading disponibles via Obtenir les instruments ?

De la même manière, choisissez le instType pour lequel vous souhaitez obtenir des informations.

Python
import okx.PublicData as PublicData

if __name__ == '__main__':

    flag = "1"  # live trading: 0, demo trading: 1

    publicDataAPI = PublicData.PublicAPI(flag = flag)

    result = publicDataAPI.get_instruments(instType = "SWAP")
    print(result)

2.1 Calculer la valeur notionnelle d'un contrat dérivé avec le paramètre de l'instrument ctVal et ctMult

Pour calculer la valeur notionnelle d'un contrat dérivé (contrat à terme, swaps perpétuels et options), vous avez besoin de ctVal (valeur du contrat) et ctMult (multiplicateur du contrat) à partir des paramètres de l'instrument.

La valeur notionnelle d'un contrat dérivé peut être calculée comme suit : ctVal * ctMult (unité : ctValCcy) ;

Par exemple, à partir des paramètres de l'instrument indiqués ci-dessous, nous pouvons calculer la valeur notionnelle d'un contrat perpétuel LTC-USD comme suit : ctVal * ctMult (unité:ctValccy) = 10 * 1 USD = 10 USD

JSON
        "instType":"SWAP",
        "instId":"LTC-USD-SWAP",
        "instFamily":"LTC-USD",
        "uly":"LTC-USD",
        "settleCcy":"LTC",
        "ctVal":"10",
        "ctMult":"1",
        "ctValCcy":"USD"

3. Comment puis-je consulter le solde via Consulter le solde ?

Python
import okx.Account as Account
flag = "1"  # live trading:0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)

result = accountAPI.get_account_balance()
print(result)

4. Quels sont les modes de compte et de marge/trading éligibles au trading de produits dérivés ?

Comme indiqué dans notre dernier tutoriel, dans le compte unifié, il existe quatre modes de compte :

  • Mode Au comptant,

  • Mode Au comptant et de contrats à terme,

  • Mode de marge multidevise

  • Mode de marge du portefeuille

À noter que seuls les trois derniers modes de marge, à savoir au comptant et de contrats à terme, de marge multidevise et de marge de portefeuille, sont éligibles au trading de produits dérivés. Consultez comment définir le mode du compte afin de comprendre les différences entre les quatre modes et comment passer de l’un à l’autre via notre interface Web.

4.1 Obtenez la configuration actuelle du compte à partir du paramètre acctLv dans Configuration du compte

Assurez-vous que vous êtes dans le bon mode de compte pour trader des produits dérivés.

Python
import okx.Account as Account

flag = "1"  # live trading: 0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
result = accountAPI.get_account_config()
print(result)

if result['code'] == "0":
    acctLv = result["data"][0]["acctLv"]
    if acctLv == "1":
        print("Simple mode")
    elif acctLv == "2":
        print("Single-currency margin mode")
    elif acctLv == "3":
        print("Multi-currency margin mode")
    elif acctLv == "4":
        print("Portfolio margin mode")

5. Comment puis-je définir l'effet de levier via Définir l’effet de levier du compte ?

Un paramètre important que nous devons définir lorsque nous tradons des produits dérivés est l’effet de levier.

L'effet de levier permet aux traders d'entrer dans une position qui vaut bien plus en ne commitant qu'une faible quantité d'argent. Les gains ou les pertes sont donc fortement augmentés.

Les traders peuvent avoir un effet de levier allant jusqu'à 125x lors du trading de produits dérivés sur OKX. Vous pouvez lire les références de la définition de l'effet de levier pour les différents niveaux d'effet de levier autorisés sous différents niveaux de positions.

CT-web-spottrading-howtoapi-6

Voici ce que signifient les glossaires ci-dessus :

  • Effet de levier max. : Nombre maximum de fois où le capital emprunté peut être multiplié pour accroître le rendement potentiel d'un investissement.

  • Taux de marge initiale (IMR) : Marge requise pour détenir les positions actuelles.

  • Taux de marge de maintenance (MMR):La marge de maintenance correspond à la marge minimale nécessaire pour maintenir les positions actuelles. Une liquidation aura lieu si les fonds propres du compte sont inférieurs à la marge de maintenance.

Par exemple, lorsque vous souhaitez trader 3 000 contrats perpétuels ETHUSDT, vous pouvez utiliser un effet de levier au maximum 75 fois plus élevé que le capital que vous détenez. IMR = 1 / 75 = 1,3 %, et vous devez maintenir un MMR de 0,8 % ou plus pour éviter la liquidation.

Vous pouvez consulter les Règles de trading sur marge d'OKX section 6.2 Effet de levier et 6.3 Taux de marge et liquidation forcée pour en savoir plus sur l'effet de levier, les exigences relatives aux marges et les règles de liquidation.

Il existe 9 scénarios différents pour les paramètres d'effet de levier via les API ouvertes OKX. Veuillez vous référer à Définir les scénarios d'effet de levier pour différents cas.

Pour les swaps perpétuels, il existe 3 scénarios différents définir l'effet de levier :

  • Définir l'effet de levier pour les instruments SWAP en mode de trading marge croisée au niveau du contrat.

  • Définir l'effet de levier pour les instruments SWAP en mode de trading marge isolée et en mode de position achat/vente au niveau du contrat.

  • Définir l'effet de levier pour les instruments SWAP en mode de trading marge isolée et en mode de position Long/court au niveau du contrat et d’un côté de la position.

L'exemple suivant montre comment définir l'effet de levier d'un contrat SWAP unique et d’un côté de la position, par rapport à l'ensemble des contrats SWAP pour un certain sous-jacent.

Bash
# Set leverage to be 5x for all cross-margin BTC-USDT SWAP positions,
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "cross"
)
print(result)

# In buy/sell position mode, set leverage to be 5x 
# for all isolated-margin BTC-USDT SWAP positions
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "isolated"
)
print(result)

# In long/short position mode, set leverage to be 5x
# for an isolated-margin BTC-USDT-SWAP long position;
# This does NOT affect the leverage of the BTC-USDT-SWAP
# short positions
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    posSide = "long",
    mgnMode = "isolated"
)
print(result)

Notez que le paramètre de requête posSide n'est requis que pour le mode de marge isolée en mode de position long/court (placement d'ordres) pour les instruments de CONTRATS À TERME/PERPÉTUELS (cf. scénario 6 et 9 dans Sélectionnez les scénarios d'effet de levier).

6. Comment passer des ordres en différents modes de position (placement d'ordres) : long/court et achat/vente?

Il existe deux modes de position (placement d'ordres) pour le trading de CONTRATS PERPÉTUELS et À TERME : long/court et achat/vente (net).

Vous pouvez passer du mode de position (placement d'ordres) long/court à achat/vente (net) et inversement via l'API Définir le mode de position:

SQL
result = accountAPI.set_position_mode(
    posMode = "long_short_mode"
)
print(result)

Ou bien, vous pouvez le faire par le biais des Paramètres sur l’interface Web comme ci-dessous :

CT-web-derivativestrading-howtoapi-9

En mode achat/vente (net), la position d'un certain contrat correspond à la quantité nette de vos opérations de vente et d'achat. Lorsque vous passez des ordres via Passer un ordre, le paramètre de requête posSide n'est pas obligatoire. Si vous le renseignez, la seule valeur valide est net.

En mode long/court, les positions longues et courtes d'un certain contrat seront indépendantes l'une de l'autre et doivent être fermées séparément. Lorsque vous passez des ordres via Passer un ordre, le paramètre de requête posSide est obligatoire. Les valeurs valides sont long ou short. Voici comment définir le paramètre side (côté de la transaction) et posSide (côté de la position) lorsque vous passez un ordre dans différents scénarios :

  • Passer un ordre d'achat et ouvrir/augmenter une position longue : side = buy, posSide = long

  • Passer un ordre de vente et ouvrir/augmenter une position courte : side = sell, posSide = short

  • Passer un ordre de vente et fermer/réduire une position longue : side = sell, posSide = long

  • Passer un ordre d'achat et fermez/remboursez une position courte : side = achat, posSide = court Vous êtes maintenant prêt à passer des ordres de produits dérivés !

6.1 Passer un ordre à cours limité via Passer un ordre

Achat d’un contrat Swap de 100 BTC-USDT au prix de 19 000 USDT.

SQL
# limit order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "limit",
    px = "19000",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

6.2 Passer un ordre au prix du marché via Passer un ordre

Achat d’un contrat Swap de 100 BTC/USDT au prix du marché.

SQL
# market order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "market",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

7. Comment puis-je obtenir les détails/le statut d'un ordre donné (se référer à Obtenir les détails de l'ordre)?

Alternativement à ordId, vous pouvez également indiquer clOrdId pour obtenir les détails de l'ordre.

SQL
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

8. Comment annuler un ordre via Annuler l'ordre?

Perl
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

9. Comment modifier un ordre via Modifier l'ordre?

Vous utilisez également clOrdId au lieu de ordId. Cet exemple montre la révision d'une nouvelle taille.

SQL
result = tradeAPI.amend_order(
    instId = "BTC-USDT-SWAP", 
    ordId = "505073046126960640",
    newSz = "80"
)
print(result)

10. Comment puis-je obtenir la liste des ordres ouverts via Obtenir la liste des ordres?

SQL
result = tradeAPI.get_order_list()
print(result)

11. Comment puis-je obtenir l'historique des ordres via Accéder à l'historique des ordres (7 derniers jours) et Accéder à l'historique des ordres (3 derniers mois)?

SQL
# Get order history (last 7 days)
result = tradeAPI.get_orders_history(
    instType = "SWAP"
)
print(result)

# Get order history (last 3 months)
result = tradeAPI.get_orders_history_archive(
    instType = "SWAP"
)
print(result)

12. Comment puis-je obtenir les détails de la transaction via Obtenir les détails de la transaction (3 derniers jours) et Obtenir les détails de la transaction (3 derniers mois)?

SQL
# Get transaction details (last 3 days)
result = tradeAPI.get_fills()
print(result)

# Get transaction details (last 3 months)
result = tradeAPI.get_fills_history(
    instType = "SWAP"
)
print(result)

13. Comment puis-je accéder aux positions via Accéder aux positions?

Lorsque votre compte est en mode net, la position nette de chaque contrat s'affiche ; lorsque votre compte est en mode long/court, la position longue ou courte de chaque contrat s'affiche séparément.

SQL
result = accountAPI.get_positions()
print(result)

Par exemple, vous pouvez suivre vos profits et pertes non réalisés via le paramètre de réponse upl.

Plus d’exemples

Pour plus d'exemples, veuillez télécharger le Jupyter Notebook complet ici.

Si vous avez des questions concernant nos API, vous pouvez rejoindre notre communauté API et les poser.