Bagaimana Cara Melakukan Trading Derivatif Dengan Jupyter Notebook?

Dipublikasikan Pada 28 Sep 2023Diperbarui Pada 25 Okt 2024Baca 8 mnt78

Cari tahu cara melakukan trading derivatif sederhana dengan alat yang sama. Mari gunakan fitur lengkap yang tersedia di python-okx pada level yang lebih tinggi!

Jenis Derivatif

Terdapat tiga jenis derivatif yang tersedia untuk trading di OKX:

  • Expiry

  • Perpetual

  • Option

Anda dapat merujuk ke Penjelasan Derivatif Bitcoin: Expiry, Perpetual, Dan Option untuk mempelajari karakteristik berbagai jenis derivatif di OKX. Dalam tutorial ini, kita akan menggunakan Perpetual sebagai contoh.

Pertanyaan Yang Sering Diajukan (FAQ)

1. Bagaimana Cara Mendapatkan Data Pasar Dari Dapatkan Data Pasar?

Anda juga dapat mengganti instType dengan EXPIRY atau OPTION untuk mendapatkan informasinya.

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. Bagaimana Cara Mendapatkan Pair Trading Yang Tersedia Dari Dapatkan Instrumen?

Dengan cara yang sama, pilih instType yang ingin Anda dapatkan informasinya.

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 Hitung nilai nosional dari sebuah kontrak derivatif dengan parameter instrumen ctVal dan ctMult

Untuk menghitung nilai nosional kontrak derivatif (yaitu futures, swap perpetual, dan option), Anda memerlukan ctVal (nilai kontrak) dan ctMult (pengali kontrak) dari parameter instrumen.

Nilai nosional dari kontrak derivatif dapat dihitung sebagai ctVal * ctMult (unit: ctValCcy);

Misalnya, dari parameter instrumen yang ditampilkan di bawah ini, kita dapat menghitung nilai nosional kontrak perpetual LTC-USD sebagai berikut: 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. Bagaimana Cara Memeriksa Saldo Dari Dapatkan 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)

4. Apa Itu Mode Akun Dan Mode Margin/Trading Yang Memenuhi Syarat Untuk Trading Derivatif?

Seperti yang disebutkan pada tutorial terakhir kami, dalam akun terpadu, ada empat mode akun yang disebutkan dalam tutorial terakhir:

  • Mode Spot,

  • Mode Spot dan Futures,

  • Mode Margin Multimata Uang,

  • Mode Margin Portofolio.

Harap diperhatikan bahwa hanya tiga mode terakhir, yaitu Spot dan Futures, Margin Multimata Uang dan Margin Portofolio, yang memenuhi syarat untuk trading derivatif. Silakan merujuk ke Cara Mengatur Mode Akun untuk memahami perbedaan di antara keempat mode tersebut dan cara beralih di antaranya melalui UI Web kami.

4.1 Dapatkan konfigurasi akun saat ini dari parameter acctLv di Dapatkan Konfigurasi Akun

Pastikan bahwa Anda berada dalam mode akun yang benar untuk melakukan trading derivatif.

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. Bagaimana Cara Mengatur Leverage Melalui Atur Leverage Akun?

Satu parameter penting yang harus diatur saat trading derivatif adalah leverage.

Leverage memungkinkan trader untuk memasukkan posisi yang nilainya lebih besar dengan menggunakan uang dalam jumlah kecil. Dengan demikian, keuntungan atau kerugian menjadi lebih tinggi.

Trader dapat memiliki leverage hingga 125x ketika melakukan trading derivatif di OKX. Anda dapat membaca Referensi Pengaturan Leverage untuk berbagai level leverage yang diizinkan dalam berbagai tingkatan posisi.

CT-web-spottrading-howtoapi-6

Berikut adalah makna dari glosarium di atas:

  • Leverage Maks.: Kelipatan maksimum modal pinjaman untuk meningkatkan potensi keuntungan investasi.

  • Rasio Margin Awal (IMR): Margin yang diperlukan untuk memiliki posisi saat ini.

  • Rasio Margin Pemeliharaan (MMR): Margin minimum yang diperlukan untuk mempertahankan posisi saat ini. Likuidasi akan terjadi jika ekuitas akun turun di bawah margin pemeliharaan.

Misalnya, saat ingin melakukan trading kontrak perpetual 3000 ETHUSDT, Anda dapat menerapkan leverage maksimal 75 kali lipat dari modal yang Anda miliki. IMR = 1 / 75 = 1,3%, dan Anda harus mempertahankan MMR sebesar 0,8% atau lebih untuk menghindari likuidasi.

Terdapat 9 macam skenario untuk pengaturan leverage melalui API terbuka OKX. Silakan merujuk ke Atur Skenario Leverage untuk kasus yang berbeda.

Untuk swap perpetual, ada 3 macam skenario pengaturan leverage:

  • Atur leverage untuk instrumen SWAP dalam trading Margin Silang pada level kontrak.

  • Atur leverage untuk instrumen SWAP dalam mode trading Margin Terisolasi dan mode posisi Beli/Jual pada level kontrak.

  • Atur leverage untuk instrumen SWAP dalam mode trading Margin Terisolasi dan mode posisi Long/Short pada level kontrak dan sisi posisi.

Contoh berikut ini menunjukkan cara mengatur leverage untuk satu kontrak SWAP dan sisi posisi, dibandingkan dengan seluruh kontrak SWAP untuk dasar tertentu.

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)

Perhatikan bahwa parameter permintaan posSide hanya diperlukan saat mode margin terisolasi dalam mode posisi Long/Short (penempatan order) untuk instrumen EXPIRY/PERPETUAL (lihat skenario 6 dan 9 dalam Atur Skenario Leverage).

6. Bagaimana Cara Menempatkan Order Dalam Berbagai Mode Posisi (Penempatan Order): Long/Short & Beli/Jual?

Ada dua mode posisi (penempatan order) saat trading EXPIRY dan PERPETUAL: Long/Short dan Beli/Jual (bersih).

Anda dapat mengubah mode posisi (penempatan order) antara Long/Short dan Beli/Jual (bersih), melalui API Atur Mode Posisi:

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

Sebagai alternatif, Anda juga dapat melakukannya melalui Pengaturan di web sebagai berikut:

CT-web-derivativestrading-howtoapi-9

Dalam mode Beli/Jual (bersih), posisi kontrak tertentu adalah kuantitas bersih dari trading beli dan jual Anda. Saat Anda menempatkan order melalui Tempatkan Order, parameter permintaan posSide tidak wajib. Jika Anda menjalankannya, nilai yang valid hanyalah bersih.

Dalam mode Long/Short, posisi Long dan Short dari kontrak tertentu akan bersifat saling independen dan harus ditutup secara terpisah. Saat Anda menempatkan order melalui Tempatkan Order, parameter permintaan posSide tidak wajib. Nilai yang valid adalah Long atau Short. Berikut adalah cara mengatur parameter Sisi (sisi trading) dan posSide (sisi posisi) saat menempatkan order dalam berbagai skenario:

  • Menempatkan order beli, lalu membuka/menambah posisi long: Sisi = Beli, posSide = Long

  • Menempatkan order jual, lalu membuka/menambah posisi short: Sisi = Jual, posSide = Short

  • Menempatkan order jual, lalu menutup/mengurangi posisi long: Sisi = Jual, posSide = Long

  • Menempatkan order beli, lalu menutup/mengurangi posisi short: Sisi = Beli, posSide = Short Anda sudah siap untuk menempatkan order derivatif!

6.1 Menempatkan order batas melalui Tempatkan Order

Membeli kontrak Swap 100 BTC-USDT seharga 19000 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 Menempatkan order pasar melalui Tempatkan Order

Membeli kontrak Swap 100 BTC-USDT dengan harga pasar.

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. Bagaimana Cara Mendapatkan Detail/Status Order Tertentu (Baca Dapatkan Detail Order)?

Selain dari ordId, Anda juga dapat menentukan clOrdId untuk mendapatkan detail order.

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

8. Bagaimana Cara Membatalkan Order Melalui Batalkan Order?

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

9. Bagaimana Cara Mengubah Order Melalui Ubah Order?

Anda juga menggunakanclOrdId sebagai pengganti ordId. Contoh ini menunjukkan revisi ukuran baru.

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

10. Bagaimana Cara Mendapatkan Daftar Order Terbuka Melalui Dapatkan Daftar Order?

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

11. Bagaimana Cara Mendapatkan Riwayat Order Melalui Dapatkan Riwayat Order (7 Hari Terakhir) Dan Dapatkan Riwayat Order (3 Bulan Terakhir)?

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. Bagaimana Cara Mendapatkan Detail Transaksi Melalui Dapatkan Detail Transaksi (3 Hari Terakhir) Dan Dapatkan Detail Transaksi (3 Bulan Terakhir)?

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. Bagaimana Cara Mendapatkan Posisi Melalui Dapatkan Posisi?

Saat akun Anda berada dalam mode Bersih, posisi Bersih dari setiap kontrak akan ditampilkan. Ketika akun Anda berada dalam mode Long/Short

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

Misalnya, Anda dapat melacak Keuntungan Dan Kerugian Yang Belum Diperoleh melalui Parameter Respons upl.

Contoh Lainnya

Untuk contoh lainnya, unduh Jupyter Notebook lengkap di sini.

Jika ada pertanyaan tentang API kami, Anda dapat bergabung ke Komunitas API kami dan menanyakannya di komunitas.