Sử dụng môi trường nghiên cứu để phân tích các chi tiết của việc bảo hiểm hình tam giác và tác động của phí xử lý đối với chênh lệch giá có thể bảo hiểm

Tác giả:Lydia., Tạo: 2022-12-29 09:46:17, Cập nhật: 2023-09-20 09:55:09

img

Sử dụng môi trường nghiên cứu để phân tích các chi tiết của việc bảo hiểm hình tam giác và tác động của phí xử lý đối với chênh lệch giá có thể bảo hiểm

Phiên bản nghiên cứu mà không điều chỉnh phí xử lý

Bảo hiểm hình tam giác.ipynb

Trong [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}]
})

Hiển thị thông tin tài khoản trao đổi ban đầu và dấu hiệu:

  • Cặp giao dịch trong Exchange A là: ETH_BTC
  • Cặp giao dịch trong Exchange B là: ETH_USDT
  • Cặp giao dịch trong Exchange C là: BTC_USDT

Trong [2]:

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

Ra khỏi [2]: { Số dư: 1, FrozenBalance: 0, Cổ phiếu: 10, FrozenStocks: 0 }

Trong [3]:

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

Ra khỏi [1]: { Số dư: 10000, FrozenBalance: 0, Cổ phiếu: 1, FrozenStocks: 0 }

Trong [4]:

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

Ra khỏi [1]: { Số dư: 10 000, FrozenBalance: 0, Cổ phiếu: 1, FrozenStocks: 0 }

Trong [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Ra khỏi [5]: 2

Trong [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Ra ngoài[6]: 11

Trong [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Ra ngoài[7]: 20000

Có thể thấy rằng tổng số BTC ban đầu là 2, tổng số ETH là 11, và tổng số USDT là 20000.

Trong [8]:

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

Ra ngoài[8]: { Thời gian: 1554831960000, Cao: 0.03396501, Mức thấp: 0.03396499, Bán: 0.03396501, Mua: 0.03396499, Cuối cùng: 0.033965, Số lượng: 4696,555. OpenInterest: 0

Trong [9]:

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

Ra khỏi[9]: { Thời gian: 1554831960000, Tốc độ cao: 175.08000001, Tối thiểu: 175.07999999, Bán: 175.08000001, Mua: 175.07999999, Cuối cùng: 175.08, Tập: 20730.37, OpenInterest: 0

Trong [10]:

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

Ra khỏi[10]: { Thời gian: 1554831960000, Tối cao: 5161.90000001, Tối thiểu: 5161.89999999, Bán: 5161.90000001, Mua: 5161.89999999, Cuối cùng: 5161.9, Số lượng: 2109.9292, OpenInterest: 0

Có thể thấy rằng đối tượng của trao đổi A, trao đổi B và giao dịch là ETH, nghĩa là trao đổi A / B có thể thực hiện các hoạt động phòng hộ gián tiếp, nhưng họ không thể phòng hộ trực tiếp vì các loại tiền tệ định giá khác nhau. Giả sử rằng sàn giao dịch A thực hiện một giao dịch muaexchanges[0].Buy(price, amount), và giá bán của đối tác được sử dụng làm giá đặt hàng khi mua, nghĩa là,tickerA.SellSàn giao dịch B thực hiện một giao dịch bán để phòng ngừa rủi ro, tức là,exchanges[1].Sell(price, amount), và giá mà đối tác muốn mua được sử dụng làm giá lệnh khi bán, tức là,tickerB.BuyBởi vì trao đổi A tiêu thụBTCkhi mua, và trao đổi B nhận được USDT khi bán, trao đổi A cần thay thếUSDTvới BTC để bù đắp cho BTC tiêu thụ bởi trao đổi A, tức là trao đổi C thực hiệnexchanges[2].Buy(price, amount), và trao đổiUSDTvớiBTCĐể mua, sàn giao dịch C cần xem giá bán của đối tác, nghĩa là,tickerC.SellGiá mua của sàn giao dịch A phải thấp hơn giá bán của sàn giao dịch B, sau đó sàn giao dịch C có thể mua lại BTC được sàn giao dịch A tiêu thụ với ít USDT hơn. Vì vậy nó là như sau:

Trong [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

Ra khỏi [1]: 0.000047266535449966285

Rõ ràng, giá mua của Sàn giao dịch A cao hơn so với Sàn giao dịch B và Sàn giao dịch C, và phòng ngừa rủi ro rõ ràng là mất tiền. Hướng phòng hộ khác là tương tự. Sàn giao dịch A thực hiện hoạt động bán ETH, Sàn giao dịch B thực hiện hoạt động mua ETH và Sàn giao dịch C bán BTC cho USDT. Việc đạt được tiền tệ luôn cân bằng và chỉ có USDT tăng hoặc giảm (tức là sự khác biệt kiếm được).

Trong [12]:

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

Ra khỏi [1]: 0.000047246531444007644

Hãy thực hiện mộttickerA.Buy - tickerB.Sell / tickerC.BuyHoạt động phòng ngừa rủi ro để tìm ra cách mỗi giá trị thay đổi.

Trong [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.

Ra khỏi [1]: { Số dư: 1,03389706, FrozenBalance: 0, Hồ tồn kho: 9, FrozenStocks:

Trong [14]:

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

Ra khỏi [1]: { ID: 1, Giá: 0.03396499, Số tiền: 1, Số tiền giao dịch: 1, Giá trung bình: 0.03396499, Loại: 1, Tiến độ: 0, Tình trạng: 1, ContractType: ETH_BTC_Huobi }

Trong [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

Ra khỏi [1]: 0.00006792998000000001

Trong [16]:

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

Ra khỏi [1]: { Số dư: 9824.56983998, FrozenBalance: 0, Hồ tồn kho: 2, FrozenStocks: 0

Trong [17]:

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

Ra khỏi [1]: { ID: 1, Giá: 175.08000001, Số tiền: 1, Số tiền giao dịch: 1, Giá trung bình: 175.08000001, Loại: 0, Tiến độ: 0, Tình trạng: 1, ContractType: ETH_USDT_OKEX }

Trong [18]:

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

Ra khỏi [1]: 0.00006783548693698057

Trong [19]:

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

Ra khỏi [1]: { Số dư: 10174.12327555, FrozenBalance: 0, Cổ phiếu: 0.9662, FrozenStocks: 0

Trong [20]:

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

Ra khỏi [1]: { ID: 1, Giá: 5161.89999999, Số tiền: 0,0338. Số tiền giao dịch: 0,0338, Giá trung bình: 5161.89999999, Loại: 1, Tiến độ: 0, Tình trạng: 1, ContractType: BTC_USDT_OKEX }

Trong [21]:

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

Ra khỏi [1]: 0.00006759999999986903

Số lượng tài sản được tính toán sau khi bảo hiểm:

Trong [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Ra khỏi [1]: 2.00009706

Trong [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Ra khỏi [23]: 11

Trong [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Ra khỏi [1]: 19998.69311553

Trong [25]:

nowSumBTC - initSumBTC

Ra ngoài[25]: 0.00009705999999987114

Trong [26]:

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

Ra khỏi [1]: 0.5010140139983642

Trong [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.

Ra khỏi [1]: -0.8058704560025944

Trong [28]:

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

Ra ngoài[28]: -0.8058703331189396

Như chúng ta có thể thấy, sự khác biệt giá khi phòng ngừa rủi ro là diffA2B: 0,000047246531444007644. Phí cho ba phòng hộ, chuyển đổi thành BTC là: feeA + feeB + feeC.

Trong [29]:

feeA + feeB + feeC

Ra khỏi [1]: 0.0002033654669368496

Có thể thấy rằng đối với việc bảo hiểm tam giác như vậy, sự khác biệt giá phải lớn hơnfeeA+feeB+feeCÍt nhất, có nghĩa là không có lỗ, không có lợi nhuận, và để kiếm được lợi nhuận phải lớn hơn sự khác biệt giá. Hiện tại, thông qua tính toán so sánh tài khoản và tính toán chênh lệch giá, nó là một lỗ. Tôi đã sửa đổi một phiên bản, do đó phí xử lý được tính bằng tham số phí xử lý chính xác bằng lợi nhuận chênh lệch giá của thị trường được kiểm tra bằng mô hình này để quan sát so sánh.

Có thể thấy rằng trong điều kiện mặc định về phí xử lý (2 ‰ theo mặc định), khi chênh lệch phòng ngừa rủi ro là 0,000047246531444007644 BTC, việc phòng ngừa rủi ro là lỗ và lỗ là khoảng -0,8058704560025944.

Phiên bản nghiên cứu về điều chỉnh phí xử lý

Bảo hiểm tam giác (sửa đổi phí xử lý).ipynb

Trong [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]}]
})

Hiển thị thông tin tài khoản trao đổi ban đầu và dấu hiệu:

  • Cặp giao dịch trong Exchange A là: ETH_BTC
  • Cặp giao dịch trong Exchange B là: ETH_USDT
  • Cặp giao dịch trong Exchange C là: BTC_USDT

Trong [2]:

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

Ra khỏi [2]: { Số dư: 1, FrozenBalance: 0, Cổ phiếu: 10, FrozenStocks: 0 }

Trong [3]:

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

Ra khỏi [1]: { Số dư: 10000, FrozenBalance: 0, Cổ phiếu: 1, FrozenStocks: 0 }

Trong [4]:

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

Ra khỏi [1]: { Số dư: 10 000, FrozenBalance: 0, Cổ phiếu: 1, FrozenStocks: 0 }

Trong [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Ra khỏi [5]: 2

Trong [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Ra ngoài[6]: 11

Trong [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Ra ngoài[7]: 20000

Có thể thấy rằng tổng số BTC ban đầu là 2, tổng số ETH là 11, và tổng số USDT là 20000.

Trong [8]:

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

Ra ngoài[8]: { Thời gian: 1554831960000, Cao: 0.03396501, Mức thấp: 0.03396499, Bán: 0.03396501, Mua: 0.03396499, Cuối cùng: 0.033965, Số lượng: 4696,555. OpenInterest: 0

Trong [9]:

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

Ra khỏi[9]: { Thời gian: 1554831960000, Tốc độ cao: 175.08000001, Tối thiểu: 175.07999999, Bán: 175.08000001, Mua: 175.07999999, Cuối cùng: 175.08, Tập: 20730.37, OpenInterest: 0

Trong [10]:

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

Ra khỏi[10]: { Thời gian: 1554831960000, Tối cao: 5161.90000001, Tối thiểu: 5161.89999999, Bán: 5161.90000001, Mua: 5161.89999999, Cuối cùng: 5161.9, Số lượng: 2109.9292, OpenInterest: 0

Có thể thấy rằng đối tượng của trao đổi A, trao đổi B và giao dịch là ETH, nghĩa là trao đổi A / B có thể thực hiện các hoạt động phòng hộ gián tiếp, nhưng họ không thể phòng hộ trực tiếp vì các loại tiền tệ định giá khác nhau. Giả sử rằng sàn giao dịch A thực hiện một giao dịch muaexchanges[0].Buy(price, amount), và giá bán của đối tác được sử dụng làm giá đặt hàng khi mua, nghĩa là,tickerA.SellSàn giao dịch B thực hiện một giao dịch bán để phòng ngừa rủi ro, tức là,exchanges[1].Sell(price, amount), và giá mà đối tác muốn mua được sử dụng làm giá lệnh khi bán, tức là,tickerB.BuyBởi vì trao đổi A tiêu thụBTCkhi mua, và trao đổi B nhận được USDT khi bán, trao đổi A cần thay thếUSDTvới BTC để bù đắp cho BTC tiêu thụ bởi trao đổi A, tức là trao đổi C thực hiệnexchanges[2].Buy(price, amount), và trao đổiUSDTvớiBTCĐể mua, sàn giao dịch C cần xem giá bán của đối tác, nghĩa là,tickerC.SellGiá mua của sàn giao dịch A phải thấp hơn giá bán của sàn giao dịch B, sau đó sàn giao dịch C có thể mua lại BTC được sàn giao dịch A tiêu thụ với ít USDT hơn. Vì vậy nó là như sau:

Trong [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

Ra khỏi [1]: 0.000047266535449966285

Rõ ràng, giá mua của Sàn giao dịch A cao hơn so với Sàn giao dịch B và Sàn giao dịch C, và phòng ngừa rủi ro rõ ràng là mất tiền. Hướng phòng hộ khác là tương tự. Sàn giao dịch A thực hiện hoạt động bán ETH, Sàn giao dịch B thực hiện hoạt động mua ETH và Sàn giao dịch C bán BTC cho USDT. Việc đạt được tiền tệ luôn cân bằng và chỉ có USDT tăng hoặc giảm (tức là sự khác biệt kiếm được).

Trong [12]:

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

Ra khỏi [1]: 0.000047246531444007644

Hãy thực hiện mộttickerA.Buy - tickerB.Sell / tickerC.BuyHoạt động phòng ngừa rủi ro để tìm ra cách mỗi giá trị thay đổi.

Trong [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.

Ra khỏi [1]: { Số dư: 1,0339514, FrozenBalance: 0, Hồ tồn kho: 9, FrozenStocks:

Trong [14]:

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

Ra khỏi [1]: { ID: 1, Giá: 0.03396499, Số tiền: 1, Số tiền giao dịch: 1, Giá trung bình: 0.03396499, Loại: 1, Tiến độ: 0, Tình trạng: 1, ContractType: ETH_BTC_Huobi }

Trong [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

Ra khỏi [1]: 0.000013585996

Trong [16]:

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

Ra khỏi [1]: { Số dư: 9824.84996798, FrozenBalance: 0, Hồ tồn kho: 2, FrozenStocks: 0

Trong [17]:

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

Ra khỏi [1]: { ID: 1, Giá: 175.08000001, Số tiền: 1, Số tiền giao dịch: 1, Giá trung bình: 175.08000001, Loại: 0, Tiến độ: 0, Tình trạng: 1, ContractType: ETH_USDT_OKEX }

Trong [18]:

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

Ra khỏi [1]: 0.000013567097387396117

Trong [19]:

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

Ra khỏi [1]: { Số dư: 10174.91841463, FrozenBalance: 0, Cổ phiếu: 0.9661, FrozenStocks: 0

Trong [20]:

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

Ra khỏi [1]: { ID: 1, Giá: 5161.89999999, Số tiền: 0,0339, Số tiền giao dịch: 0,0339, Giá trung bình: 5161.89999999, Loại: 1, Tiến độ: 0, Tình trạng: 1, ContractType: BTC_USDT_OKEX }

Trong [21]:

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

Ra khỏi [1]: 0.000013559999999973732

Đặt số tiền được tính toán sau khi tính rủi ro.

Trong [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Ra khỏi [1]: 2.0000514000000003

Trong [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Ra khỏi [23]: 11

Trong [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Ra khỏi [1]: 19999.76838261

Trong [25]:

nowSumBTC - initSumBTC

Ra ngoài[25]: 0.000051400000000256796

Trong [26]:

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

Ra khỏi [1]: 0.26532166000081153

Trong [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.

Ra khỏi [1]: 0.0337042700011807

Trong [28]:

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

Ra ngoài[28]: 0.03372495390449328

Nó có thể được nhìn thấy rằng sự khác biệt giá trong thời gian phòng hộ làdiffA2B: 0,000047246531444007644. Phí xử lý cho ba phòng hộ được chuyển đổi thành BTC như sau:feeA+feeB+feeC.

Trong [29]:

feeA + feeB + feeC

Ra khỏi [1]: 0.00004071309338736985

Có thể thấy rằng trong cấu hình backtest, phí xử lý được thay đổi thành"fee":[0.04,0.04], tức là 0,04%.feeA+feeB+feeClà bằng 0,00004071309338736985, về cơ bản gần với chênh lệch giá diffA2B tại thời điểm phòng ngừa rủi ro. Cuối cùng, lợi nhuận và lỗ được tính toán rất nhỏ, chỉ 0,03372495390449328, và lợi nhuận và lỗ được tính toán thông qua thay đổi tài khoản về cơ bản là giống với chênh lệch giá được tính toán. Tài liệu nghiên cứu này có thể được sử dụng để tính toán có thể bảo hiểm chênh lệch bao nhiêu cho phòng ngừa rủi ro tam giác.


Có liên quan

Thêm nữa