Jak handlować instrumentami pochodnymi za pomocą Jupyter Notebook?

Opublikowano 28 wrz 2023Zaktualizowano 1 kwi 20259 min czytania116

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.