Analisis Arbitraj Futures & Spot Spread Return dalam Kontrak Margin Crypto

Penulis:Ninabadass, Dicipta: 2022-04-12 10:06:51, Dikemas kini: 2022-04-13 09:20:56

Futures & Spot Spread Return Arbitrage

Kali terakhir, kami memperkenalkan perpetual kontrak pembiayaan kadar arbitrase (https://www.fmz.com/digest-topic/6381), iaitu, untuk membuat tempat yang panjang dari jumlah yang sama dengan membuat pendek kontrak niaga hadapan kekal, dan kita boleh terus mendapatkan keuntungan kadar pembiayaan. Dalam kes premium negatif yang besar, ia juga boleh membuat wang dan premium, untuk mengembalikan keuntungan.

Dalam arbitraj mata wang kripto berisiko rendah, terdapat satu lagi jenis strategi yang belum diperkenalkan - arbitraj pulangan asas.

1.Ada perpecahan harga antara kontrak niaga hadapan dan spot. Ciri kontrak penghantaran adalah bahawa ia tidak diselesaikan pada harga spot sehingga tarikh penghantaran. Oleh itu, apabila tarikh penghantaran jauh, penghantaran kontrak mudah dipengaruhi oleh sentimen pasaran. Jika pasaran berprestasi baik, lebih ramai orang akan optimis mengenai harga masa depan, jadi akan ada premium positif. Apabila terdapat penurunan tajam, sering ada premium negatif. Tetapi secara umum, penghantaran kontrak tidak akan menyimpang terlalu banyak dari tempat, dan akan selalu kembali pada hari penghantaran.

2.Terdapat kontrak penghantaran berasaskan mata wang. Sebagai contoh, Binance mempunyai kontrak penghantaran suku tahunan dan suku berikutnya. Terdapat perbezaan besar antara kontrak penghantaran dengan margin crypto dan kontrak kekal dengan margin USDT. Penyelesaian dengan margin crypto menggunakan mata wang, dan harga mata wang sentiasa berubah, yang akan diperkenalkan secara terperinci seterusnya.

Kod dalam artikel ini boleh dijalankan secara langsung, tetapi kerana alasan rangkaian, bahagian merayap data memerlukan akses Internet saintifik, yang terbaik adalah menggunakan komputer anda sendiri untuk dijalankan, atau menggunakan Google colab.

Pengiraan Keuntungan & Kerugian Kontrak Margin Crypto

Menurut dokumentasi Binance, pendapatan = arah dagangan × jumlah pelaksanaan × kelipatan kontrak × (1 / harga terbuka - 1 / harga penutupan) = nilai kedudukan × (1 / harga terbuka - 1 / harga penutupan); apabila anda membuat pendek, nilai kedudukan adalah negatif. Jika anda memegang 100 kontrak penghantaran BTCUSD, masing-masing bernilai 100USD, dan harga terbuka adalah 10,000USD, maka keuntungan dan kerugian dengan perubahan harga adalah seperti berikut:

Melalui pengiraan dan analisis, keuntungan dari kedudukan pendek atau panjang yang digariskan oleh crypto tidak linear dan diukur dengan keuntungan mata wang; jika terdapat kerugian dalam membuat kedudukan pendek, hanya kehilangan jumlah mata wang satu kedudukan, tetapi tidak ada had atas jumlah mata wang yang diperoleh; jika terdapat keuntungan dalam membuat kedudukan panjang, hanya mendapat keuntungan, paling banyak, jumlah mata wang satu kedudukan, dan tidak ada had atas kerugian. Nampaknya lebih kos efektif untuk membuat pendek, tetapi keuntungan daripada membuat pendek akan berkurangan apabila harga turun, yang tidak terlalu tinggi dikira dalam USD. Jika anda mengira keuntungan USD, keadaannya adalah sebaliknya.

Pada masa yang sama, apabila berdagang kontrak margin kripto, anda perlu memegang mata wang pada asalnya. Jika anda menganggap USD sebagai mata wang sebut harga, maka jumlah nilai akaun = (jumlah mata wang akaun + nilai kedudukan × (1 / harga terbuka - 1 / harga tutup)) × harga spot. Jika nilai kedudukan = - jumlah mata wang dalam akaun × harga terbuka, iaitu menggunakan leverage satu kali untuk membuat pendek, dan jumlah nilai akaun = jumlah mata wang dalam akaun × harga terbuka × harga spot kedudukan dekat / harga dekat. Memandangkan harga kontrak penghantaran akhirnya akan kembali ke harga spot, pada akhirnya, jumlah nilai akaun = jumlah mata wang dalam akaun × harga terbuka. Maksudnya, nilai akaun akan terkunci pada harga terbuka, dan tidak akan berubah dengan harga semasa. Menurut analisis, jika harga naik tanpa batas, kedudukan tidak akan menjadi cair. Ini adalah prinsip lindung nilai jangka pendek dengan menjual mata wang hadapan anda pada harga spot terlebih dahulu.

Jika mata wang akaun niaga hadapan dibeli dari pasaran spot, makaJumlah nilai akaun = jumlah mata wang dalam akaun × (harga bukaan - harga beli segera), selagi kedudukan dibuka, keuntungan kita telah ditetapkan, dan harga semasa tidak penting.

Sudah tentu, dalam kebanyakan kes, kita tidak perlu menunggu sehingga tarikh penghantaran. jika harga penyebaran berkurangan, kita boleh menutup kedudukan terlebih dahulu. pada masa ini,jumlah nilai akaun = nilai spot × (perbandingan niaga hadapan kepada spot tempoh pembukaan / perbandingan niaga hadapan kepada spot tempoh penutupan - 1)Selagi nisbah harga niaga hadapan dan spot pada tempoh pembukaan lebih besar daripada pada tempoh penutupan, dan boleh menampung yuran, maka akan ada keuntungan.

Dalam [15]: Permintaan import Dari tarikhwaktu tarikhimport,tarikhwaktu Masa import import panda sebagai pd import numpy sebagai np Import matplotlib.pyplot sebagai plt % matplotlib dalam barisan Dalam [96]: nilai = 100100 #nilai kedudukan open_price = 10000 #harga kedudukan terbuka 10000USD long_profit_list = [] short_profit_list = [] long_usdt_profit_list = [] short_usdt_profit_list = [] close_range = range ((1000,30000,10) untuk p dalam jarak dekat: keuntungan = nilai(1/open_price-1/p) long_profit_list.append(profit) long_usdt_profit_list.append(profitp) short_profit_list.append ((-profit) short_usdt_profit_list.append(-profitp) Dalam [97]: #crypto-margin keuntungan plt.figure ((figsize=(12, 7), dpi=80) plt.plot ((close_range,long_profit_list,label=long); plt.plot ((close_range,short_profit_list); plt.plot ((close_range,[1]*len ((close_range),r); plt.plot ((close_range,[-1]*len ((close_range),g); plt.ylabel ((profit); plt.xlabel ((harga dekat); plt.grid(Benar) plt.annotate ((Keuntungan pendek, xy=(4500, 1.5), xytext=(7000, 2.5),arrowprops=dict(facecolor=black)); plt.annotate (( Long profit, xy=(4500, -1.5), xytext=(7000, -2.5), arrowprops=dict ((facecolor=black));
plt.annotate ((Open price, xy=(10000, 0), xytext=(13000, 2.5),arrowprops=dict ((facecolor=black)); Keluar[97]:imgDalam [101]: # keuntungan dikira dalam USD plt.figure ((figsize=(12, 7), dpi=80) plt.plot ((close_range,long_usdt_profit_list,label=long); plt.plot ((close_range,short_usdt_profit_list);

plt.ylabel ((profit); plt.xlabel ((harga dekat); plt.annotate ((Short profit, xy=(5000, 5000), xytext=(7000, 10000),arrowprops=dict ((facecolor=black)); plt.annotate (( Long profit, xy=(5000, -5000), xytext=(7000, -10000),arrowprops=dict ((facecolor=black));
plt.grid(Benar) Keluar[101]:img

Prosedur Futures & Spot Arbitrage

1.Pengendalian masa nyata perubahan dalam harga niaga hadapan & premium spot. Selepas mencapai nilai yang ditetapkan, simbol mata wang spot dibeli dan segera dipindahkan ke niaga hadapan untuk menjadi pendek. Nilai membuat pendek adalah jumlah spot × harga terbuka. 2.Tunggu pulangan premium, dan selepas mencapai nilai yang ditetapkan, tutup kedudukan niaga hadapan, memindahkannya ke tempat untuk menjual, dan memperoleh keuntungan.

Perincian

1.Premia pada tarikh penghantaran yang berbeza mempunyai makna yang berbeza. Sebagai contoh, jika terdapat premium suku tahunan sebanyak 5% dan premium suku berikutnya sebanyak 5%, yang suku tahunan pasti akan lebih disukai untuk arbitrase. Kadar tahunan yang sepadan perlu dikira berdasarkan tarikh penghantaran. 2.Harga perkhidmatan perlu dipertimbangkan, yang melibatkan pembelian dan penjualan segera serta kedudukan berjangka terbuka dan ditutup, yang jumlahnya mempunyai 4 perdagangan. 3.Perdagangan niaga hadapan dan spot mesti dilakukan pada masa yang sama untuk mengunci premium.Untuk mengelakkan kejutan pasaran, kedudukan boleh dikurangkan dalam pelbagai perdagangan. 4.Apabila terdapat mata wang dalam akaun niaga hadapan, anda boleh secara langsung sama-sama membuka posisi arbitrage tanpa menunggu pemindahan.5.Tomemantau semua pasangan dagangan, mana yang mempunyai peluang, dan mana yang mempunyai premium yang lebih tinggi. 6.Pilihan kedudukan penutupan adalah sangat penting.Anda boleh menutup kedudukan mengikut tahap; anda boleh menggunakan 0 premium atau premium negatif untuk menutup semua.

Sejarah Premium Perubahan

Mengambil data penghantaran Binance sebagai contoh; terdapat 9 pasangan dagangan, iaitu BTCUSDT, ETHUSDT, ADAUSDT, LINKUSDT, BCHUSDT, DOTUSDT, XRPUSDT, LTCUSDT dan BNBUSDT, yang boleh digunakan untuk perdagangan arbitrase.

Sejak awal tahun ini (2021), ETH bermula dari 600U, dan meningkat kepada maksimum 4000U pada bulan Mei, kemudian jatuh ke 2000U pada bulan Jun dan Julai, dan baru-baru ini kembali ke 3500U, yang bermaksud pasaran sedang booming. Pertimbangkan tiga kontrak penghantaran dengan tarikh tamat tempoh 210625, 210924, dan 211231. Premium 210625 kekal pada 8% untuk masa yang lama; jika memulakan arbitraj pada 10% dan menutup kedudukan pada 6%, terdapat sekitar 4 peluang dalam 4 bulan, dan kadar tahunan akan melebihi 50%. 210924 mempunyai premium, maksimum, lebih dari 15%, yang kini telah kembali. 211231, yang masih mempunyai masa yang lama sebelum tarikh tamat tempoh, mempunyai premium maksimum 5%.

Pembaca boleh menukar pasangan dagangan sendiri; keadaan pada dasarnya serupa; secara umum, ia adalah zon masa yang cukup baik dari Januari hingga April tahun ini. Dalam [103]: ##pasangan dagangan semasa Info = permintaan.get(https://dapi.binance.com/dapi/v1/exchangeInfo’) simbol = [s[symbol] untuk s dalam Info.json()[symbols]] Dalam [106]: simbol_nq = senarai(filter(lambda x:x.split() [-1]==211231, simbol)) # kontrak suku berikutnya simbol_q = senarai(filter(lambda x:x.split()[-1]==210924, simbol)) # kontrak suku tahunan symbols_s = [s.split(_) [0]+T untuk s dalam symbols_nq] #pasangan dagangan spot Dalam [108]: ,.join ((simbol_s) Keluar [108]: Dalam [109]: def GetKlines ((simbol=BTCUSDT,start=2020-8-10,end=2021-8-10,period=1h,base=fapi,v = v1): Klines = [] start_time = int(time.mktime(datetime.strptime(start, %Y-%m-%d).timetuple()))1000 + 860601000 end_time = int(time.mktime(datetime.strptime(end, %Y-%m-%d).timetuple()))1000 + 860601000 intervel_map = {m:601000,h:60601000,d:2460601000} sementara start_time < end_time: waktu pertengahan = min(masa permulaan+1000int ((periode[:-1])intervel_map[periode[-1], akhir_waktu] url = https://+base+.binance.com/+base+/+v+/klines?simbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000%(simbol,periode,start_time,mid_time) res = permintaan.get (url) res_list = res.json() jika jenis ((res_list) == senarai dan len ((res_list) > 0: start_time = res_list[-1][0] Klines += res_list elif jenis ((res_list) == senarai: start_time = start_time+1000int ((periode[:-1])intervel_map[periode[-1]] lain: print(url) df = pd.DataFrame ((Klines,columns=[time,open,high,low,close,amount,end_time,volume,count,buy_amount,buy_volume,null]).astype ((float) df.index = pd.to_datetime ((df.time,unit=ms) pulangan df Dalam [110]: simbol = ETH df_s = GetKlines ((simbol=simbol+USDT,start=2020-12-26,end=2021-9-15,period=1h,base=api,v=v3) df_nq = GetKlines ((symbol=symbol+USD_211231,start=2021-6-26,end=2021-9-15,period=1h,base=dapi) df_q = GetKlines ((symbol=symbol+USD_210924,start=2021-3-26,end=2021-9-15,period=1h,base=dapi) df_lq = GetKlines ((symbol=symbol+USD_210625,start=2020-12-26,end=2021-6-24,period=1h,base=dapi) Dalam [128]: #harga spot df_s.close.dropna().plot(figsize=(16,6),grid=True); Keluar[128]:imgDalam [139]: #premi kontrak suku terakhir (100(df_lq.close-df_s.close) /df_s.close).dropna().plot(figsize=(16,6), grid=True); #premi kontrak suku tahunan (100(df_q.close-df_s.close) /df_s.close).dropna().plot(figsize=(16,6), grid=True); #premi kontrak suku berikutnya (100*(df_nq.close-df_s.close)/df_s.close).dropna().plot(figsize=(16,6),grid=True); Keluar [1]:img

##peluang perdagangan semasa Untuk kontrak 210924 akan tamat tempoh, di sini kita terutamanya memerhatikan kontrak 211231, yang masih mempunyai tiga bulan untuk tamat tempoh. Untuk masa ini, premium asas adalah sekitar 3%, dan premium tertinggi adalah 5%. Kita boleh mengatakan peluang itu tidak begitu menjanjikan. Walau bagaimanapun, selepas kontrak 210924 tamat tempoh, kontrak baru suku berikutnya akan dihasilkan, dan akan ada 6 bulan untuk menyampaikan, yang bermaksud masih ada banyak peluang.

Dalam [143]: df_all = pd.DataFrame ((index=pd.date_range ((start=2021-6-26, end=2021-9-16, freq=1H),kolom=simbol_s) untuk i dalam julat ((len ((simbol_nq)): simbol_nq = simbol_nq[i] simbol_s = simbol_s[i] df_s = GetKlines ((symbol=symbol_s,start=2021-6-26,end=2021-9-16,period=1h,base=api,v=v3) df_nq = GetKlines ((symbol=symbol_nq,start=2021-6-26,end=2021-9-16,period=1h,base=dapi) df_all[symbol_s] = (100*(df_nq.close-df_s.close) /df_s.close).drop_duplicates() Dalam [144]: df_all.dropna (().plot ((figsize=(16,10),grid=True); Keluar[144]:img

Kesimpulan

Artikel ini terutamanya memperkenalkan perdagangan arbitrase dengan menggunakan pulangan spread antara kontrak penghantaran dan tempat.

1.Risiko rendah. Oleh kerana membuat kedudukan pendek dengan leverage 1x tidak akan dibubarkan, tidak ada risiko walaupun premium berkembang, dan ia hampir merupakan arbitrage bebas risiko. 2.Kepastian yang tinggi. Harga kontrak penghantaran akan sentiasa kembali ke tempatnya. Selepas arbitrase selesai, ia tidak akan dipengaruhi oleh turun naik harga semasa. 3.Prinsip operasi adalah mudah, dan ia boleh berdagang dengan pelbagai simbol mata wang, yang sesuai untuk dana yang agak besar untuk mengejar keuntungan yang stabil. 4.Keuntungan tidak rendah, dan kadangkala akan ada premium negatif yang mendalam.Jika anda bernasib baik dan menguasai irama, keuntungan sangat besar.

Risiko utama: 1.Jika premium meningkat untuk masa yang lama, akan ada kerugian terapung untuk masa yang lama.Pada masa ini, penutupan kedudukan dan keluar dari pasaran akan mengakibatkan kerugian sebenar. 2.Kegagalan API platform; perdagangan kaki tunggal. 3.Likuiditi kontrak perdagangan adalah rendah, dan terdapat terlalu banyak strategi jenis yang sama, yang mengakibatkan titik tergelincir yang berlebihan dan merosakkan keuntungan.


Lebih lanjut