Nie wszystkie wymienione produkty są dostępne we wszystkich jurysdykcjach.

Jak handlować instrumentami pochodnymi za pomocą Jupyter Notebook?

Opublikowano 28 wrz 2023Zaktualizowano 25 paź 20249 min czytania77

Dowiedz się, jak możesz przeprowadzić prosty handel instrumentami pochodnymi za pomocą tych samych narzędzi. Wykorzystajmy wszechstronne funkcje dostępne w python-okx na wyższym poziomie!

Typy derywatów

Na OKX dostępne są trzy rodzaje instrumentów pochodnych:

  • Kontrakty expiry

  • Wieczyste

  • Opcje

Możesz przejść do Objaśnienia instrumentów pochodnych BTC: Expiry, Perpetual i opcje, aby poznać charakterystykę różnych rodzajów instrumentów pochodnych na OKX. W tym poradniku użyjemy kontraktu Pepertual jako przykładu.

Często zadawane pytania

1. Jak mogę uzyskać dane rynkowe z Uzyskaj dane rynkowe?

Możesz również zastąpić instType EXPIRY lub OPTION.

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. Jak mogę uzyskać dostępne pary handlowe z Pobierz instrumenty?

Podobnie jak w przypadku innych metod, wybierz typ instType, dla którego chcesz uzyskać informacje.

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 Oblicz wartość nominalną kontraktu pochodnego z parametrem instrumentu ctVal i ctMult

Aby obliczyć wartość referencyjną kontraktu pochodnego (tj. future, perpetual swap i opcji), potrzebujesz ctVal (wartość kontraktu) i ctMult (mnożnik kontraktu) z parametrów instrumentu.

Wartość referencyjną kontraktu pochodnego można obliczyć jako ctVal * ctMult (jednostka: ctValCcy);

Na przykład, na podstawie parametrów instrumentu przedstawionych poniżej, możemy obliczyć wartość referencyjną kontraktu wieczystego LTC-USD jako: ctVal * ctMult (jednostka: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. Jak mogę sprawdzić saldo z Uzyskaj saldo?

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)

Czum jest tryb konta i tryb depozytu zabezpieczającego/transakcji w handlu instrumentami pochodnymi?

Jak wspomnieliśmy w naszym ostatnim poradniku, w ramach ujednoliconego konta dostępne są cztery tryby konta:

  • Tryb spot,

  • Tryb spot i kontraktów futures,

  • Tryb wielowalutowego depozytu zabezpieczającego

  • Tryb depozytu zabezpieczającego portfolio

Pamiętaj, że tylko trzy ostatnie tryby depozytu zabezpieczającego, a mianowicie jednowalutowy depozyt zabezpieczający, wielowalutowy depozyt zabezpieczający i depozyt zabezpieczający portfolio, kwalifikują się do obrotu instrumentami pochodnymi. Zapoznaj się z dokumentem Jak skonfigurować tryb konta, aby zrozumieć różnice między czterema trybami i jak przełączać się między nimi za pośrednictwem naszego interfejsu użytkownika.

4.1 Pobierz bieżącą konfigurację konta z parametru acctLv w polu Pobierz konfigurację konta

Upewnij się, że jesteś w odpowiednim trybie konta do handlu instrumentami pochodnymi.

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. Jak ustawić dźwignię za pomocą Ustaw dźwignię konta?

Jednym z ważnych parametrów, które musimy ustawić podczas handlu instrumentami pochodnymi, jest dźwignia.

Dźwignia finansowa umożliwia traderom wejście w pozycję, która jest warta znacznie więcej przy zaangażowaniu jedynie niewielkiej kwoty pieniędzy. Zyski lub straty są zatem znacznie większe.

Traderzy mogą mieć nawet 125-krotną dźwignię finansową podczas handlu instrumentami pochodnymi na OKX. Możesz przeczytać odnośniki do ustawiania dźwigni dla różnych poziomów dźwigni dozwolonych na różnych poziomach pozycji.

CT-web-spottrading-howtoapi-6

Oto, co oznaczają powyższe objaśnienia:

  • Maks. dźwignia: Maksymalna wielokrotność pożyczonego kapitału w celu zwiększenia potencjalnego zwrotu z inwestycji.

  • Początkowy wskaźnik depozytu zabezpieczającego (IMR): Depozyt zabezpieczający wymagany do utrzymywania bieżących pozycji.

  • Współczynnik wymaganego depozytu zabezpieczającego (MMR): Minimalny depozyt zabezpieczający wymagany do utrzymania bieżących pozycji. Likwidacja nastąpi, jeśli kapitał konta spadnie poniżej depozytu zabezpieczającego.

Na przykład, jeśli chcesz dokonać transakcji na 3000 kontraktów wieczystych ETHU/SDT, możesz wykorzystać maksymalnie 75-krotność posiadanego kapitału. IMR = 1 / 75 = 1,3%, a aby uniknąć likwidacji, należy utrzymywać MMR na poziomie 0,8% lub wyższym.

Istnieje 9 różnych scenariuszy dźwigni ustawień za pośrednictwem otwartych interfejsów API OKX. Zapoznaj się z Scenariusze dźwigni dla różnych przypadków użycia.

W przypadku kontraktów wieczystych typu swap istnieją 3 różne scenariusze ustawiania dźwigni finansowej:

  • Ustaw dźwignię dla instrumentów SWAP w ramach transakcji cross-margin na poziomie kontraktu.

  • Ustaw dźwignię dla instrumentów SWAP w trybie izolowanego depozytu zabezpieczającego i trybie kupna/sprzedaży pozycji na poziomie kontraktu.

  • Ustaw dźwignię dla instrumentów SWAP w trybieizolowanego depozytu zabezpieczającego i wybierz pozycjędługą/krótką na poziomie kontraktu i pozycji.

Poniższy przykład pokazuje, jak ustawić dźwignię dla pojedynczego kontraktu SWAP i strony pozycji, w porównaniu do wszystkich kontraktów SWAP dla określonego instrumentu bazowego.

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)

Pamiętaj, że parametr żądania posSide jest wymagany tylko wtedy, gdy tryb depozytu zabezpieczającego jest izolowany w trybie pozycji długa/krótka (złożenie zlecenia) dla EXPIRY/PERPETUAL (patrz scenariusz 6 i 9 w Scenariusze dźwigni).

6. Jak mogę składać zlecenia w różnych trybach pozycji (składania zleceń): długa/krótka i kupno/sprzedaż?

Istnieją dwa tryby pozycji (składania zleceń) podczas handlu FUTURES i PERPETUAL: długa/krótka i kupno/sprzedaż (netto)?

Możesz zmienić tryb pozycji (składania zleceń) pomiędzy long/short i kup/sprzedaj (netto), poprzez API

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

Alternatywnie można to zrobić poprzez Ustawienia w przeglądarce:

CT-web-derivativestrading-howtoapi-9

W trybie kup/sprzedaż (net) pozycja określonego kontraktu jest ilością netto Twoich transakcji zakupu i sprzedaży. Kiedy składasz zlecenia przez Złóż zlecenie, parametr żądania posSide nie jest obowiązkowy. Jeśli go przekażesz, jedyną prawidłową wartością będzie net.

W trybie długa/krótka, długie i krótkie pozycje danego kontraktu będą niezależne od siebie i muszą być zamykane oddzielnie. Kiedy składasz zlecenia przez Złóż zlecenie, parametr żądania posSide jest obowiązkowy. Prawidłowe wartości to long lub short. Poniżej pokazano, jak ustawić parametr side (strona transakcji) i posSide (strona pozycji) podczas składania zlecenia w różnych scenariuszach:

  • Złożenie zlecenia kupna i otwarcie/zwiększenie pozycji długiej: side = buy, posSide = long

  • Złożenie zlecenia kupna i otwarcie/zwiększenie pozycji krótkiej: side = sell, posSide = short

  • Złożenie zlecenia sprzedaży i zamknięcie/redukcja długiej pozycji: side = sell,posSide = long

  • Złożenie zlecenia sprzedaży i zamknięcie/redukcja krótkiej pozycji: side = buy, posSide = short Teraz możesz składać zlecenia na instrumenty pochodne!

6.1 Składanie zleceń z limitem za pomocą Złóż zlecenie

Zakup 100 kontraktów swap BTC-USDT po cenie 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 Składanie zleceń rynkowego za pomocą Złóż zlecenie

Zakup 100 kontraktów swap BTC-USDT po cenie rynkowej.

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. Jak uzyskać szczegóły/stan danego zlecenia (patrz Pobierz szczegóły zlecenia)?

Oprócz ordId, można również określić clOrdId, aby uzyskać szczegóły zlecenia.

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

8. Jak anulować zlecenie za pomocą Anuluj zlecenie?

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

9. Jak zmienić zmodyfikować za pomocą Zmodyfikuj zlecenie?

Możesz także użyć clOrdId zamiast ordId Ten przykład pokazuje zmianę nowego rozmiaru.

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

10. Jak uzyskać listę otwartych zleceń za pomocą Pobierz listę zleceń?

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

11. Jak uzyskać historię zleceń za pomocą Pobierz historię zleceń (ostatnie 7 dni) i Pobierz historię zleceń (ostatnie 3 miesiące)?

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. Jak uzyskać szczegóły transakcji za pośrednictwem Pobierz szczegóły transakcji (z ostatnich 3 dni) i Pobierz szczegóły transakcji (z ostatnich 3 miesięcy)?

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. Jak uzyskać pozycje za pomocą Pobierz pozycje?

Gdy konto jest w trybie netto, wyświetlona zostanie pozycja netto każdego kontraktu; gdy konto jest w trybie long/short, długa lub krótka pozycja każdego kontraktu zostanie wyświetlona osobno.

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

Możesz śledzić swój niezrealizowany zysk i stratę poprzez parametr odpowiedzi upl.

Więcej przykładów

Aby uzyskać więcej przykładów, pobierz pełny Jupyter Notebook tutaj.

Jeśli masz jakiekolwiek pytania dotyczące naszych interfejsów API, możesz zadać je w nasze społeczności API.