Come posso fare trading di derivati con il Notebook Jupyter?

Data di pubblicazione: 28 set 2023Data di aggiornamento: 25 ott 202410 minuti di lettura78

Scopri come fare facilmente trading di derivati con gli stessi strumenti. Usiamo le funzionalità complete disponibili in python-okx a un livello superiore!

Tipi di derivati

Esistono tre tipi di derivati disponibili per il trading su OKX:

  • Scadenza

  • Swap perpetui

  • Opzioni

Puoi visitare la sezione I derivati del Bitcoin, spiegati: scadenza, perpetuo e opzioni per conoscere le caratteristiche dei diversi tipi di derivati su OKX. In questo tutorial, useremo Perpetuo come esempio.

DOMANDE FREQUENTI

1. Come posso ottenere i dati di mercato da Get market data?

Puoi anche sostituire instType con EXPESTRY o OPTION per le tue informazioni.

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. Come posso ottenere coppie di trading disponibili da Ricevi strumenti?

Allo stesso modo, scegli instType per il quale desideri ottenere informazioni.

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 Calcolare il valore nozionale di un contratto derivato con il parametro dello strumento ctVal e ctMult

Per calcolare il valore nominale di un contratto derivato (ovvero futures, swap perpetui e opzioni), devi ctVal (valore del contratto) e ctMult (moltiplicatore del contratto) dai parametri dello strumento.

Il valore nominale di un contratto derivato può essere calcolato come ctVal * ctMult (unità: ctValCcy);

Ad esempio, dai parametri dello strumento mostrati di seguito, possiamo calcolare il valore nozionale di un contratto perpetuo LTC-USD come: 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. Come posso controllare il tuo saldo da Ottenere il 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. Che cos'è la modalità di conto e la modalità margine/trading che è idonea per fare trading di derivati?

Come abbiamo detto nell'ultimo tutorial, nell'account unificato ci sono quattro modalità di conto:

  • Modalità spot,

  • Modalità spot e futures,

  • Modalità di margine multivaluta

  • Modalità margine di portafoglio

Tieni presente che solo le ultime tre modalità di margine, ovvero spot e futures, margine multivaluta e margine di portafoglio, sono idonee per il trading di derivati. Per capire le differenze tra le quattro modalità e come passare da una all'altra attraverso l'interfaccia web, consulta la sezione Come impostare la modalità di conto.

4.1 Ottieni la configurazione del conto attuale dal parametro acctLv in Ottenere la configurazione del conto

Assicurati di essere nella modalità di conto corretta per fare trading di derivati.

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. Come posso impostare la leva finanziaria tramite Configurare la leva finanziaria del conto?

Un parametro importante da impostare quando si fa trading sui derivati è la leva finanziaria.

La leva finanziaria consente ai trader di entrare in una posizione che vale molto di più impegnando solo una piccola quantità di denaro. Pertanto, i guadagni o le perdite sono notevolmente moltiplicati.

I trader possono avere una leva finanziaria fino a 125 volte maggiore quando fanno trading di derivati su OKX. Puoi leggere i riferimenti relativi all'impostazione della leva finanziaria per i diversi livelli di leva finanziaria consentiti per i diversi livelli di posizioni.

CT-web-spottrading-howtoapi-6

Ecco il significato dei glossari riportati sopra:

  • Leva finanziaria massima: il multiplo massimo del capitale preso in prestito per aumentare il rendimento potenziale di un investimento.

  • Margine di profitto iniziale (IMR): il margine richiesto per la detenzione delle posizioni attuali.

  • Margine di mantenimento (MMR): Margine minimo richiesto per mantenere le posizioni correnti. Se il patrimonio netto scende al di sotto del margine di mantenimento, si verifica una liquidazione.

Ad esempio, se vuoi negoziare 3000 contratti perpetui ETHUSDT, puoi sfruttare un massimo di 75 volte il capitale che possiedi. IMR = 1 / 75 = 1,3%, e devi mantenere almeno lo 0,8% di MMR per evitare la liquidazione.

Esistono 9 diversi scenari per le impostazioni di leva tramite le API aperte di OKX. Consulta Configurazione degli scenari di leva finanziaria per diversi casi.

Per gli swap perpetui, ci sono 3 diversi scenari per l'impostazione della leva finanziaria:

  • Imposta la leva finanziaria per gli strumenti SWAP in trading di margine incrociato a livello di contratto.

  • Imposta la leva per gli strumenti SWAP in modalità di trading a margine isolato e in modalità di acquisto/vendita della posizione a livello di contratto.

  • Imposta la leva finanziaria per gli strumenti SWAP in modalità di trading a margine isolato e in modalità posizione long/short a livello di contratto e di posizione.

L'esempio seguente mostra come impostare la leva per un singolo contratto SWAP e lato posizione, rispetto a tutti i contratti SWAP per un determinato sottostante.

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)

Tieni presente che il parametro della richiesta posSide è richiesto solo quando la modalità margine è isolata in posizione long/short (invio dell'ordine) per EXPESION/PERPETUAL strumenti (vedi scenario 6 e 9 in Configurazione degli scenari di leva finanziaria).

Come posso inserire ordini con diverse modalità di invio dell'ordine: long/short e acquisto/vendita?

Esistono due modalità di invio dell'ordine quando si fa trading su EXPIRY e PERPETUAL: long/short e acquisto/vendita (netto).

Puoi modificare la modalità di invio dell'ordine tra long/short e acquisto/vendita (netto), tramite l'API Configurazione della modalità della posizione:

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

In alternativa, puoi farlo tramite le Impostazioni sul Web come di seguito:

CT-web-derivativestrading-howtoapi-9

In modalità acquisto/vendita (net), la posizione di un determinato contratto è la quantità netta delle tue operazioni di trading di acquisto e vendita. Quando effettui ordini tramite Per inviare un ordine, il parametro della richiesta posSide non è obbligatorio. Se lo superi, l'unico valore valido è net.

In modalità posizione in long/short, le posizioni in long e in short di un determinato contratto saranno indipendenti l'una dall'altra e dovranno essere chiuse separatamente. Quando effettui ordini tramite Per inviare un ordine, il parametro della richiesta posSide è obbligatorio. I valori validi sono long o short. Di seguito viene mostrato come impostare i parametri side (lato dell'operazione) e posSide (lato della posizione) quando si effettua un ordine in diversi scenari:

  • Effettua un ordine di acquisto e apri/aumenta una posizione in long: side = acquista, posSide = posizione in long

  • Effettua un ordine di vendita e apri/aumenta una posizione in short: side = acquista, posSide = posizione in short

  • Effettua un ordine di vendita e chiudi/riduci una posizione in long: side = vendi, posSide = posizione in long

  • Effettua un ordine di acquisto e chiudi/riduci una posizione in short: side = acquista, posSide = posizione in short. Adesso sei pronto per ordinare i derivati!

6.1 Effettuare un ordine limite tramite Effettuare un ordine

Acquisto di un contratto di swap BTC-USDT da 100 al prezzo di 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 Effettuare un ordine di mercato tramite Effettuare un ordine

Acquisto di un contratto di swap da 100 BTC a USDT al prezzo di mercato.

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. Come posso ottenere i dettagli/lo stato di un determinato ordine (fare riferimento a Ottenere i dettagli dell'ordine)?

Oltre a ordId, puoi anche specificare clOrdId per ottenere i dettagli dell'ordine.

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

8. Come posso annullare un ordine tramite Annullamento ordine?

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

9. Come posso modificare un ordine tramite Modifica ordine?

Usa anche clOrdId al posto di ordId. Questo esempio mostra la revisione di una nuova dimensione.

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

10. Come posso ottenere l'elenco degli ordini aperti tramite Ricezione elenco ordini?

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

11. Come posso ottenere la cronologia degli ordini tramite Ottenere cronologia ordini (ultimi 7 giorni) e >Ottenere cronologia ordini (ultimi 3 mesi)?

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. Come posso ottenere i dettagli della transazione tramite Ottenere dettagli sulla transazione (ultimi 3 giorni) e Ottenere dettagli sulla transazione (ultimi 3 mesi)?

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. Come posso ottenere posizioni tramite Ottenere posizioni?

Quando il tuo conto è in modalità net, viene visualizzata la posizione net di ciascun contratto; quando il tuo conto è in modalità long/short, la posizione in long o short di ciascun contratto viene visualizzata separatamente.

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

Ad esempio, puoi tenere traccia dei tuoi profitti e perdite non realizzati tramite il parametro di risposta upl.

Altri esempi

Per ulteriori esempi, scarica l'intero Jupyter Notebook da qui.

In caso di domande sulle nostre API, puoi iscriverti alla nostra community API e aumentarla nella community.