Hoe kan ik derivaten verhandelen met Jupyter Notebook?

Gepubliceerd op 28 sep 2023Geüpdatet op 22 dec 20259 min. leestijd178

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

Typen derivaten

Er zijn drie soorten derivaten beschikbaar voor handel op OKX:

  • Aflopend

  • 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 krijg ik marktgegevens voor derivatenhandel met het Jupyter Notebook via Marktgegevens ophalen?

Je kunt instType ook vervangen door EXPIRY of OPTION voor jouw informatie.

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 krijg ik de beschikbare handelsparen voor derivatenhandel met het Jupyter Notebook met Instrumenten ophalen?

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 kan ik het saldo controleren voor derivatenhandel met het Jupyter Notebook via Saldo ophalen?

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 komen in aanmerking voor derivatenhandel met het Jupyter Notebook?

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 op via de parameter acctLv in Accountconfiguratie ophalen

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 stel ik de hefboomwerking in voor derivatenhandel met het Jupyter Notebook via Accounthefboom instellen?

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.

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 Scenario's voor instellen hefboomwerking voor verschillende gevallen.

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 Hefboomscenario's instellen).

6. Hoe plaats ik orders voor derivatenhandel met de Jupyter Notebook 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 Positiemodus instellen:

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:

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 Order plaatsen, is de aanvraagparameter posSide niet verplicht. 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 Order plaatsen, is de aanvraagparameter posSide verplicht. Geldige waarden zijn long of short. Hieronder wordt weergegeven hoe je de parameter side (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 Plaats een limietorder via Order plaatsen

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 Order plaatsen

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 krijg ik gegevens voor derivatenhandel met het Jupyter Notebook via Ordergegevens ophalen?

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)

7. Hoe kan ik een order annuleren voor derivatenhandel met het Jupyter Notebook via Order annuleren?

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 voor derivatenhandel met Jupyter Notebook wijzigen via Order wijzigen?

Je kunt ook clOrdId gebruiken 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 kan ik de lijst met openstaande orders voor derivatenhandel met het Jupyter Notitieboek ophalen met Orderlijst ophalen?

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

11. Hoe haal ik de ordergeschiedenis voor derivatenhandel op met het Jupyter Notebook via Ordergeschiedenis ophalen (afgelopen 7 dagen) en Ordergeschiedenis ophalen (afgelopen 3 maanden)?

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 transactiedetails voor derivatenhandel op met het Jupyter Notebook via Transactiedetails ophalen (afgelopen 3 dagen) en Transactiedetails ophalen (afgelopen 3 maanden)?

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 kan ik posities ophalen voor derivatenhandel met het Jupyter Notebook via Posities ophalen?

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.