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:
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.Sell
Sà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.Buy
Bởi vì trao đổi A tiêu thụBTC
khi mua, và trao đổi B nhận được USDT khi bán, trao đổi A cần thay thếUSDT
vớ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 đổiUSDT
vớiBTC
Để mua, sàn giao dịch C cần xem giá bán của đối tác, nghĩa là,tickerC.Sell
Giá 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.Buy
Hoạ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:
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:
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:
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.
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:
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.Sell
Sà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.Buy
Bởi vì trao đổi A tiêu thụBTC
khi mua, và trao đổi B nhận được USDT khi bán, trao đổi A cần thay thếUSDT
vớ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 đổiUSDT
vớiBTC
Để mua, sàn giao dịch C cần xem giá bán của đối tác, nghĩa là,tickerC.Sell
Giá 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.Buy
Hoạ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:
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:
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:
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+feeC
là 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.