Menggunakan lingkungan penelitian untuk menganalisis rincian lindung nilai segitiga dan dampak biaya penanganan pada perbedaan harga lindung nilai

Penulis:Lydia, Dibuat: 2022-12-29 09:46:17, Diperbarui: 2023-09-20 09:55:09

img

Menggunakan lingkungan penelitian untuk menganalisis rincian lindung nilai segitiga dan dampak biaya penanganan pada perbedaan harga lindung nilai

Versi penelitian tanpa penyesuaian biaya penanganan

Hedging segitiga.ipynb

Dalam [1]:

var fmz = require("fmz")                           // Import the talib, TA, and plot libraries automatically after import.
var task = fmz.VCtx({
start: '2019-04-09 17:49:00',
end: '2019-04-09 18:00:00',
period: '1m',
exchanges: [{"eid":"Huobi","currency":"ETH_BTC", "balance":1, "stocks":10},{"eid":"OKEX","currency":"ETH_USDT","balance":10000,"stocks":1}, {"eid":"OKEX","currency":"BTC_USDT","balance":10000,"stocks":1}]
})

Tampilan informasi akun pertukaran awal dan ticker:

  • Pasangan perdagangan di Exchange A adalah: ETH_BTC
  • Pasangan perdagangan di Exchange B adalah: ETH_USDT
  • Pasangan perdagangan di Exchange C adalah: BTC_USDT

Dalam [2]:

var accA = exchanges[0].GetAccount()
accA

Keluar[2]: { Saldo: 1, FrozenBalance: 0, Stok: 10, FrozenStocks: 0 }

Dalam [3]:

var accB = exchanges[1].GetAccount()
accB

Keluar[3]: { Saldo: 10 000, FrozenSaldo: 0, Saham: 1, FrozenStocks: 0 }

Dalam [4]:

var accC = exchanges[2].GetAccount()
accC

Keluar[4]: { Saldo: 10 000, FrozenSaldo: 0, Saham: 1, FrozenStocks: 0 }

Dalam [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Keluar[5]: 2 (dua)

Dalam [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Keluar[6]: 11 orang

Dalam [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Keluar[7]: 20000

Kita dapat melihat bahwa jumlah total BTC adalah 2, jumlah total ETH adalah 11, dan jumlah total USDT adalah 20000. Sekarang mari kita dapatkan informasi ticker dari setiap pasangan perdagangan saat ini.

Dalam [8]:

var tickerA = exchanges[0].GetTicker()
tickerA

Keluar[8]: { Waktu: 1554831960000, Tinggi: 0.03396501, Sedikit: 0.03396499, Jual: 0.03396501, Beli: 0.03396499, Terakhir: 0.033965, Volume: 4696.555, OpenInterest: 0

Dalam [9]:

var tickerB = exchanges[1].GetTicker()
tickerB

Keluar[9]: { Waktu: 1554831960000, Tinggi: 175.08000001, Sedikit: 175.07999999, Jual: 175.08000001, Beli: 175.07999999, Terakhir: 175.08, Volume: 20730.37, OpenInterest: 0

Dalam [10]:

var tickerC = exchanges[2].GetTicker()
tickerC

Keluar[10]: { Waktu: 1554831960000, Tinggi: 5161.90000001, Sedikit: 5161.89999999, Jual: 5161.90000001, Beli: 5161.89999999, Terakhir: 5161.9, Volume: 2109.9292, OpenInterest: 0

Hal ini dapat dilihat bahwa subjek Exchange A, Exchange B dan transaksi adalah ETH, yaitu, exchange A/B dapat melakukan operasi lindung nilai tidak langsung, tetapi mereka tidak dapat lindung nilai secara langsung karena mata uang penetapan harga berbeda. Mata uang penetapan harga Exchange A adalah BTC, sedangkan Exchange B adalah USDT. Asumsikan bahwa pertukaran A melakukan transaksi pembelianexchanges[0].Buy(price, amount), dan harga yang dijual oleh counterparty digunakan sebagai harga order saat membeli, yaitu,tickerA.SellBursa B melakukan operasi jual untuk lindung nilai, yaitu,exchanges[1].Sell(price, amount), dan harga yang ingin dibeli oleh counterparty digunakan sebagai harga order saat menjual, yaitu,tickerB.BuyKarena pertukaran A dikonsumsiBTCsaat membeli, dan pertukaran B memperoleh USDT saat menjual, pertukaran A perlu menggantiUSDTdengan BTC untuk menebus BTC yang dikonsumsi oleh pertukaran A, yaitu pertukaran C mengeksekusiexchanges[2].Buy(price, amount), dan pertukaranUSDTdenganBTCUntuk membeli, bursa C perlu melihat harga jual dari counterparty, yaitu,tickerC.Sell. Harga pembelian bursa A harus lebih rendah dari harga jual bursa B, maka Exchange C dapat membeli kembali BTC yang dikonsumsi oleh Exchange A dengan jumlah USDT yang lebih sedikit. Anda akan mendapatkan perbedaan jumlah USDT. Jadi ini adalah sebagai berikut:

Dalam [11]:

var diffB2A = tickerA.Sell - tickerB.Buy / tickerC.Sell    // diffB2A means that Exchange B sells ETH coins and Exchange A buys ETH coins, which is logically equivalent to the transfer of ETH from Exchange B to Exchange A.
diffB2A

Keluar[11]: 0.000047266535449966285

Jelas, harga pembelian Exchange A lebih tinggi dari Exchange B dan Exchange C, dan lindung nilai jelas kehilangan uang. Pertukaran A mengeksekusi operasi jual ETH, Exchange B mengeksekusi operasi beli ETH, dan Exchange C menjual BTC untuk USDT. Mencapai mata uang selalu seimbang, dan hanya USDT yang meningkat atau menurun (yaitu perbedaan yang diperoleh).

Dalam [12]:

var diffA2B = tickerA.Buy - tickerB.Sell / tickerC.Buy
diffA2B

Keluar[12]: 0,000047246531444007644

Mari kita lakukantickerA.Buy - tickerB.Sell / tickerC.Buyoperasi lindung nilai untuk mengetahui bagaimana setiap nilai berubah.

Di [13]:

var idA = exchanges[0].Sell(tickerA.Buy, 1)
var nowAccA = exchanges[0].GetAccount()
nowAccA       // We can see that the fee is deducted from the BTC.

Keluar[13]: { Saldo: 1.03389706, FrozenBalance: 0, Stok: 9, FrozenStocks: 0 }

Dalam [14]:

var orderA = exchanges[0].GetOrder(idA)
orderA

Keluar[14]: {Id: 1, Harga: 0.03396499, Jumlah: 1, DealAmount: 1, Rata-rata Harga: 0.03396499, Jenis: 1, Offset: 0, Status: 1, ContractType: ETH_BTC_Huobi }

Di [15]:

var feeRatioA = 0.002      // The default fee for backtesting is 0.2%, i.e. 0.002.
var feeA = orderA.DealAmount * orderA.AvgPrice * feeRatioA   // Exchange A trading fees, BTC denominated.
feeA

Keluar[15]: 0,00006792998000000001

Di [16]:

var idB = exchanges[1].Buy(tickerB.Sell, 1)
var nowAccB = exchanges[1].GetAccount()
nowAccB

Keluar[16]: { Saldo: 9824.56983998, FrozenBalance: 0, Stok: 2, FrozenStocks: 0 }

Di [17]:

var orderB = exchanges[1].GetOrder(idB)
orderB      // We can see that the fee is deducted from the USDT.

Keluar[17]: {Id: 1, Harga: 175.08000001, Jumlah: 1, DealAmount: 1, Rata-rata Harga: 175.08000001, Jenis: 0, Offset: 0, Status: 1, ContractType: ETH_USDT_OKEX }

Dalam [18]:

var feeRatioB = 0.002
var feeB = orderB.DealAmount * orderB.AvgPrice * feeRatioB / tickerC.Last    // B exchange fees, converted to BTC denomination.
feeB

Keluar[18]: 0.00006783548693698057

Dalam [19]:

var idC = exchanges[2].Sell(tickerC.Buy, nowAccA.Balance - accA.Balance)
var nowAccC = exchanges[2].GetAccount()
nowAccC

Keluar[19]: { saldo: 10174.12327555, FrozenBalance: 0, Saham: 0.9662, FrozenStocks: 0 }

Dalam [20]:

var orderC = exchanges[2].GetOrder(idC)
orderC     // We can see that the fee is deducted from the USDT.

Keluar[20]: {Id: 1, Harga: 5161.89999999, Jumlah: 0,0338, DealAmount: 0,0338, Rata-rata Harga: 5161.89999999, Jenis: 1, Offset: 0, Status: 1, ContractType: BTC_USDT_OKEX }

Di [21]:

var feeRatioC = 0.002
var feeC = orderC.DealAmount * orderC.AvgPrice * feeRatioC / tickerC.Last      // Fees for C exchange transactions, BTC denominated.
feeC

Keluar[21]: 0.00006759999999986903

Menghitung informasi total aset setelah lindung nilai:

Dalam [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Keluar[22]: 2.00009706

Dalam [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Keluar[23]: 11 orang

Dalam [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Keluar[24]: 19998.69311553

Di [25]:

nowSumBTC - initSumBTC

Keluar[25]: 0.00009705999999987114

Di [26]:

tickerC.Buy * (nowSumBTC - initSumBTC)    // Excess BTC converted to USDT

Keluar[26]: 0,5010140139983642

Dalam [27]:

nowSumUSDT + tickerC.Buy * (nowSumBTC - initSumBTC) - initSumUSDT    // Profit and loss are calculated based on the movement of the account assets and both are denominated in USDT.

Keluar[27]: -0.8058704560025944

Dalam [28]:

(diffA2B - (feeA + feeB + feeC)) * tickerC.Buy     // Profit and loss based on price difference, denominated in USDT.

Keluar[28]: -0.8058703331189396

Seperti yang dapat kita lihat, perbedaan harga ketika lindung nilai adalah diffA2B: 0,000047246531444007644. Biaya untuk tiga lindung nilai, dikonversi ke BTC adalah: feeA + feeB + feeC.

Dalam [29]:

feeA + feeB + feeC

Keluar[29]: 0.0002033654669368496

Hal ini dapat dilihat bahwa untuk lindung nilai segitiga seperti itu, perbedaan harga harus lebih besar darifeeA+feeB+feeCsetidaknya, yang berarti tidak ada kerugian, tidak ada keuntungan, dan untuk membuat keuntungan harus lebih besar dari perbedaan harga. Saat ini, melalui perbandingan perhitungan akun dan perhitungan perbedaan harga, itu adalah kerugian. Saya memodifikasi versi, sehingga biaya penanganan yang dihitung oleh parameter biaya penanganan sama persis dengan keuntungan perbedaan harga dari pasar yang diuji dengan model ini untuk observasi komparatif.

Dapat dilihat bahwa di bawah kondisi default biaya penanganan (2 ‰ secara default), ketika perbedaan lindung nilai adalah 0,000047246531444007644 BTC, lindung nilai adalah kerugian, dan kerugian adalah sekitar -0,8058704560025944.

Versi penelitian dari penyesuaian biaya penanganan

Hedging segitiga (penyesuaian biaya penanganan).ipynb

Dalam [1]:

var fmz = require("fmz")                           // Import talib, TA, plot libraries automatically after introduction.
var task = fmz.VCtx({
start: '2019-04-09 17:49:00',
end: '2019-04-09 18:00:00',
period: '1m',
exchanges: [{"eid":"Huobi","currency":"ETH_BTC", "balance":1, "stocks":10,"fee":[0.04,0.04]},{"eid":"OKEX","currency":"ETH_USDT","balance":10000,"stocks":1,"fee":[0.04,0.04]}, {"eid":"OKEX","currency":"BTC_USDT","balance":10000,"stocks":1,"fee":[0.04,0.04]}]
})

Tampilan informasi akun pertukaran awal dan ticker:

  • Pasangan perdagangan di Exchange A adalah: ETH_BTC
  • Pasangan perdagangan di Exchange B adalah: ETH_USDT
  • Pasangan perdagangan di Exchange C adalah: BTC_USDT

Dalam [2]:

var accA = exchanges[0].GetAccount()
accA

Keluar[2]: { Saldo: 1, FrozenBalance: 0, Stok: 10, FrozenStocks: 0 }

Dalam [3]:

var accB = exchanges[1].GetAccount()
accB

Keluar[3]: { Saldo: 10 000, FrozenSaldo: 0, Saham: 1, FrozenStocks: 0 }

Dalam [4]:

var accC = exchanges[2].GetAccount()
accC

Keluar[4]: { Saldo: 10 000, FrozenSaldo: 0, Saham: 1, FrozenStocks: 0 }

Dalam [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Keluar[5]: 2 (dua)

Dalam [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Keluar[6]: 11 orang

Dalam [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Keluar[7]: 20000

Kita dapat melihat bahwa jumlah total BTC adalah 2, jumlah total ETH adalah 11, dan jumlah total USDT adalah 20000. Sekarang mari kita dapatkan informasi ticker dari setiap pasangan perdagangan saat ini.

Dalam [8]:

var tickerA = exchanges[0].GetTicker()
tickerA

Keluar[8]: { Waktu: 1554831960000, Tinggi: 0.03396501, Sedikit: 0.03396499, Jual: 0.03396501, Beli: 0.03396499, Terakhir: 0.033965, Volume: 4696.555, OpenInterest: 0

Dalam [9]:

var tickerB = exchanges[1].GetTicker()
tickerB

Keluar[9]: { Waktu: 1554831960000, Tinggi: 175.08000001, Sedikit: 175.07999999, Jual: 175.08000001, Beli: 175.07999999, Terakhir: 175.08, Volume: 20730.37, OpenInterest: 0

Dalam [10]:

var tickerC = exchanges[2].GetTicker()
tickerC

Keluar[10]: { Waktu: 1554831960000, Tinggi: 5161.90000001, Sedikit: 5161.89999999, Jual: 5161.90000001, Beli: 5161.89999999, Terakhir: 5161.9, Volume: 2109.9292, OpenInterest: 0

Hal ini dapat dilihat bahwa subjek Exchange A, Exchange B dan transaksi adalah ETH, yaitu, exchange A/B dapat melakukan operasi lindung nilai tidak langsung, tetapi mereka tidak dapat lindung nilai secara langsung karena mata uang penetapan harga berbeda. Mata uang penetapan harga Exchange A adalah BTC, sedangkan Exchange B adalah USDT. Asumsikan bahwa pertukaran A melakukan transaksi pembelianexchanges[0].Buy(price, amount), dan harga yang dijual oleh counterparty digunakan sebagai harga order saat membeli, yaitu,tickerA.SellBursa B melakukan operasi jual untuk lindung nilai, yaitu,exchanges[1].Sell(price, amount), dan harga yang ingin dibeli oleh counterparty digunakan sebagai harga order saat menjual, yaitu,tickerB.BuyKarena pertukaran A dikonsumsiBTCsaat membeli, dan pertukaran B memperoleh USDT saat menjual, pertukaran A perlu menggantiUSDTdengan BTC untuk menebus BTC yang dikonsumsi oleh pertukaran A, yaitu pertukaran C mengeksekusiexchanges[2].Buy(price, amount), dan pertukaranUSDTdenganBTCUntuk membeli, bursa C perlu melihat harga jual dari counterparty, yaitu,tickerC.Sell. Harga pembelian bursa A harus lebih rendah dari harga jual bursa B, maka Exchange C dapat membeli kembali BTC yang dikonsumsi oleh Exchange A dengan jumlah USDT yang lebih sedikit. Anda akan mendapatkan perbedaan jumlah USDT. Jadi ini adalah sebagai berikut:

Dalam [11]:

var diffB2A = tickerA.Sell - tickerB.Buy / tickerC.Sell    // DiffB2A means that Exchange B sells ETH coins and Exchange A buys ETH coins, which is logically equivalent to the transfer of ETH from Exchange B to Exchange A.
diffB2A

Keluar[11]: 0.000047266535449966285

Jelas, harga pembelian Exchange A lebih tinggi dari Exchange B dan Exchange C, dan lindung nilai jelas kehilangan uang. Pertukaran A mengeksekusi operasi jual ETH, Exchange B mengeksekusi operasi beli ETH, dan Exchange C menjual BTC untuk USDT. Mencapai mata uang selalu seimbang, dan hanya USDT yang meningkat atau menurun (yaitu perbedaan yang diperoleh).

Dalam [12]:

var diffA2B = tickerA.Buy - tickerB.Sell / tickerC.Buy
diffA2B

Keluar[12]: 0,000047246531444007644

Mari kita lakukantickerA.Buy - tickerB.Sell / tickerC.Buyoperasi lindung nilai untuk mengetahui bagaimana setiap nilai berubah.

Di [13]:

var idA = exchanges[0].Sell(tickerA.Buy, 1)
var nowAccA = exchanges[0].GetAccount()
nowAccA       // We can see that the handling fee is deducted from the BTC.

Keluar[13]: { Saldo: 1.0339514, FrozenBalance: 0, Stok: 9, FrozenStocks: 0 }

Dalam [14]:

var orderA = exchanges[0].GetOrder(idA)
orderA

Keluar[14]: {Id: 1, Harga: 0.03396499, Jumlah: 1, DealAmount: 1, Rata-rata Harga: 0.03396499, Jenis: 1, Offset: 0, Status: 1, ContractType: ETH_BTC_Huobi }

Di [15]:

var feeRatioA = 0.0004      // The default handling fee for backtesting is 0.2%, i.e. 0.002.
var feeA = orderA.DealAmount * orderA.AvgPrice * feeRatioA   // Exchange A trading handling fees, BTC denominated.
feeA

Keluar[15]: 0,000013585996

Di [16]:

var idB = exchanges[1].Buy(tickerB.Sell, 1)
var nowAccB = exchanges[1].GetAccount()
nowAccB

Keluar[16]: { Saldo: 9824.84996798, FrozenBalance: 0, Stok: 2, FrozenStocks: 0 }

Di [17]:

var orderB = exchanges[1].GetOrder(idB)
orderB      // We can see that the handling fee is deducted from the USDT.

Keluar[17]: {Id: 1, Harga: 175.08000001, Jumlah: 1, DealAmount: 1, Rata-rata Harga: 175.08000001, Jenis: 0, Offset: 0, Status: 1, ContractType: ETH_USDT_OKEX }

Dalam [18]:

var feeRatioB = 0.0004
var feeB = orderB.DealAmount * orderB.AvgPrice * feeRatioB / tickerC.Last    // Exchange B handling fees, converted to BTC denomination.
feeB

Keluar[18]: 0.000013567097387396117

Dalam [19]:

var idC = exchanges[2].Sell(tickerC.Buy, nowAccA.Balance - accA.Balance)
var nowAccC = exchanges[2].GetAccount()
nowAccC

Keluar[19]: { saldo: 10174.91841463, FrozenBalance: 0, Saham: 0.9661, FrozenStocks: 0 }

Dalam [20]:

var orderC = exchanges[2].GetOrder(idC)
orderC     // We can see that the handling fee is deducted from the USDT.

Keluar[20]: {Id: 1, Harga: 5161.89999999, Jumlah: 0,0339, DealAmount: 0,0339, Rata-rata Harga: 5161.89999999, Jenis: 1, Offset: 0, Status: 1, ContractType: BTC_USDT_OKEX }

Di [21]:

var feeRatioC = 0.0004
var feeC = orderC.DealAmount * orderC.AvgPrice * feeRatioC / tickerC.Last      // Exchange C trading handling fees, BTC denominated.
feeC

Keluar[21]: 0.000013559999999973732

Menghitung total informasi aset setelah lindung nilai.

Dalam [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Keluar[22]: 2.0000514000000003

Dalam [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Keluar[23]: 11 orang

Dalam [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Keluar[24]: 19999.76838261

Di [25]:

nowSumBTC - initSumBTC

Keluar[25]: 0.000051400000000256796 (tidak termasuk bank)

Di [26]:

tickerC.Buy * (nowSumBTC - initSumBTC)    // The extra BTC is converted to USDT.

Keluar[26]: 0.26532166000081153

Dalam [27]:

nowSumUSDT + tickerC.Buy * (nowSumBTC - initSumBTC) - initSumUSDT    // Profit and loss is calculated based on the changes of the account assets and is denominated in USDT.

Keluar[27]: 0.0337042700011807

Dalam [28]:

(diffA2B - (feeA + feeB + feeC)) * tickerC.Buy     // Profit and loss based on price difference, denominated in USDT.

Keluar[28]: 0.03372495390449328

Dapat dilihat bahwa perbedaan harga selama lindung nilai adalahdiffA2B: 0,000047246531444007644. Biaya penanganan untuk tiga lindung nilai dikonversi ke BTC sebagai:feeA+feeB+feeC.

Dalam [29]:

feeA + feeB + feeC

Keluar[29]: 0,00004071309338736985

Hal ini dapat dilihat bahwa dalam konfigurasi backtest, biaya penanganan diubah menjadi"fee":[0.04,0.04], yaitu 0,04%.feeA+feeB+feeCadalah sama dengan 0,00004071309338736985, yang pada dasarnya dekat dengan perbedaan harga diffA2B pada saat lindung nilai. Akhirnya, keuntungan dan kerugian yang dihitung sangat kecil, hanya 0,03372495390449328, dan keuntungan dan kerugian yang dihitung melalui perubahan akun pada dasarnya sama dengan yang dihitung melalui perbedaan harga.


Berkaitan

Lebih banyak