Hoe kan ik derivaten verhandelen met Jupyter Notebook?

Gepubliceerd op 28 sep 2023Geüpdatet op 25 okt 20249 min. leestijd76

Ontdek hoe je eenvoudig in derivaten kunt handelen met dezelfde tools. Laten we de uitgebreide mogelijkheden van python-okx gebruiken op een hoger niveau.

Type derivaten

Er zijn drie soorten derivaten beschikbaar voor handel op OKX:

  • Vervaldatum

  • Perpetual

  • Opties

Ga naar Bitcoinderivaten: aflopend, perpetual en opties om meer te weten te komen over de verschillende soorten derivaten op OKX. In deze tutorial gebruiken we Perpetual als voorbeeld.

Veelgestelde vragen

1. Hoe kan ik marktgegevens ophalen van Get market data?

Je kunt instType ook vervangen door EXPIRY of OPTION om informatie te krijgen.

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. Hoe kan ik beschikbare handelsparen ophalen van Get instruments?

Kies op dezelfde manier het instType waar je informatie voor wilt krijgen.

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 Bereken de notionele waarde van een derivatencontract met de instrumentparameter ctVal en ctMult

Om de notionele waarde van een derivatencontract te berekenen (d.w.z. future, perpetual swaps en opties), heb je ctVal (contractwaarde) en ctMult (contractvermenigvuldiger) nodig uit de instrumentparameters.

De notionele waarde van een derivatencontract kan worden berekend als ctVal * ctMult (eenheid: ctValCcy);

Bijvoorbeeld: aan de hand van de onderstaande instrumentparameters kunnen we de notionele waarde van een LTC-USD perpetual contract berekenen als: ctVal * ctMult (eenheid: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. Hoe kun je saldo controleren met Get balance?

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. Welke accountmodus en marge/handelsmodus komt in aanmerking voor derivatenhandel?

Zoals eerder besproken, heeft een geïntegreerd account vier verschillende accountmodi:

  • Spotmodus,

  • Spot- en futuresmodus,

  • Margemodus in meerdere valuta,

  • Portfoliomargemodus.

Alleen de laatste drie margemodi (spot en futures, marge in meerdere valuta en portfoliomarge) komen in aanmerking voor derivatenhandel. Raadpleeg Accountmodus instellen om de verschillen tussen de vier modi te begrijpen en hoe je dit kunt wijzigen via onze webinterface.

4.1 Haal de huidige accountconfiguratie van de parameter acctLv op in Get account configuration

Zorg ervoor dat je de juiste accountmodus hebt geactiveerd om derivaten te verhandelen.

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. Hoe kan ik hefboomwerking instellen via Set account leverage?

Eén belangrijke parameter bij het handelen in derivaten is hefboom.

Met hefboom kunnen traders een veel grotere positie innemen met slechts een klein bedrag aan eigen geld. De winsten en verliezen zijn daarom aanzienlijk groter.

Traders kunnen een hefboomwerking van maximaal 125 keer toepassen bij het handelen in derivaten op OKX. Er zijn referenties beschikbaar waarin staat hoe je de hefboom kunt instellen voor verschillende hefboomlimieten die gelden voor verschillende positieniveaus.

CT-web-derivativestrading-howtoapi-6

Dit zijn de termen die hierboven worden getoond:

  • Maximale hefboom: Het maximale aantal keer dat geleend geld wordt gebruikt om het potentiële rendement van een investering te verhogen.

  • Initiële margeverhouding (IMR): Marge dat vereist is voor de huidige posities.

  • Onderhoudsmargeverhouding (MMR): Minimale vereiste marge om de huidige posities te behouden. Liquidatie vindt plaats als het accountvermogen onder de onderhoudsmarge komt te liggen.

Als je bijvoorbeeld 3000 perpetual ETHUSDT-contracten wilt verhandelen, kun je maximaal 75 keer je eigen vermogen gebruiken als hefboom. IMR = 1 / 75 = 1,3% en je moet een MMR van 0,8 of hoger aanhouden om liquidatie te voorkomen.

Er zijn 9 verschillende scenario's voor het instellen van de hefboom via de open API's van OKX. Raadpleeg Set leverage scenarios voor de verschillende scenario's.

Voor perpetual swaps zijn er drie verschillende scenario's voor het instellen van de hefboom:

  • Stel hefboom in voor SWAP-instrumenten onder cross-margin-handel op contractniveau.

  • Stel hefboom in voor SWAP-instrumenten onder de handelsmodus geïsoleerde marge en positiemodus kopen/verkopen op contractniveau.

  • Stel hefboom in voor SWAP-instrumenten onder de handelsmodus geïsoleerde marge en positiemodus long/short op contract- en positierichtingniveau.

Het volgende voorbeeld laat zien hoe je een hefboom instelt voor één SWAP-contract en positierichting, vergeleken met alle SWAP-contracten voor een bepaalde onderliggende waarde.

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)

Let op dat de aanvraagparameter posSide alleen vereist is wanneer de margemodus geïsoleerd is in de positiemodus long/short (orderplaatsing) voor EXPIRY/PERPETUAL instrumenten (zie scenario 6 en 9 in Set leverage scenarios).

6. Hoe plaats ik orders onder verschillende positiemodi (orderplaatsing): long/short en kopen/verkopen?

Er zijn twee positiemodi (orderplaatsing) bij het handelen in AFLOPEND en PERPETUAL: long/short en kopen/verkopen (net).

Je kunt de positiemodus wijzigen tussen long/short en kopen/verkopen (net), via de API Set position mode:

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

Je kunt dit ook doen via de Instellingen op de website zoals hieronder:

CT-web-derivativestrading-howtoapi-9

In de modus kopen/verkopen (net) is de positie van een bepaald contract het netto-aantal van de koop- en verkooptransacties. Wanneer je orders plaatst via Place order, is de verzoekparameter posSide niet vereist. Als je het doorgeeft, is de enige geldige waarde net.

In de modus long/short zijn long- en shortposities van een bepaald contract onafhankelijk van elkaar en moeten deze apart worden gesloten. Wanneer je orders plaatst via Place order, is de verzoekparameter posSide vereist. Geldige waarden zijn long of short. Hieronder wordt weergegeven hoe je de parameterside (richting van de transactie) en posSid (richting van de positie) instelt wanneer je een order plaatst onder verschillende scenario's:

  • Plaats een kooporder en open/vergroot een long-positie: side = buy, posSide = long

  • Plaats een verkooporder en open/vergroot een short-positie:side = sell, posSide = short

  • Plaats een verkooporder en sluit/verklein een long-positie: side = sell, posSide = long

  • Plaats een kooporder en sluit/verklein een short-positie: side = buy, posSide = short Dan ben je helemaal klaar om derivatenorders te plaatsen.

6.1 Een limietorder plaatsen via Place order

Kopen van 100 BTC-USDT swapcontracten voor 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 Plaats een marktorder via Place order

Swapcontract voor 100 BTC-USDT tegen marktprijs.

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. Hoe haal ik de gegevens/status van een bepaalde order op (raadpleeg Get order details)?

Naast ordId kun je ook clOrdId opgeven om ordergegevens op te halen.

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

8. Hoe kan ik een order annuleren via Cancel order?

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

9. Hoe kan ik een order wijzigen via Amend order?

Je gebruikt ook clOrdId in plaats van ordId>. Dit voorbeeld toont de revisie van een nieuwe grootte.

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

10. Hoe haal ik de lijst met openstaande orders op via Get order List?

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

11. Hoe haal ik de ordergeschiedenis op via Get order history (last 7 days) en Get order history (last 3 months)?

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. Hoe haal ik de transactiegegevens op via Get transaction details (last 3 days) en Get transaction details (last 3 months)?

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. Hoe haal ik posities op via Get positions?

Als je account zich in de modus net bevindt, wordt de net-positie van elk contract weergegeven. Als je account zich in de modus long/short bevindt, wordt de long- of shortpositie van elk contract apart weergegeven.

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

Je kunt bijvoorbeeld je niet-gerealiseerde winst en verlies bijhouden via de responsparameter upl.

Meer voorbeelden

Download voor meer voorbeelden hier het volledige Jupyter Notebook.

Als je vragen hebt over onze API's, kun je lid worden van onze API-community en deze in de community stellen.