연구 환경을 사용하여 삼각형 헤지징의 세부사항과 헤지징 가능한 가격 차이에 처리 수수료의 영향을 분석합니다.

저자:리디아, 창작: 2022-12-29 09:46:17, 업데이트: 2023-09-20 09:55:09

img

연구 환경을 사용하여 삼각형 헤지징의 세부사항과 헤지징 가능한 가격 차이에 처리 수수료의 영향을 분석합니다.

처리 수수료 조정 없이 연구 버전

삼각형 헤지.ipynb

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

초기 교환 계좌 정보와 표시 표시:

  • 거래소 A의 거래 쌍은: ETH_BTC
  • 거래소 B의 거래 쌍은: ETH_USDT
  • 거래소 C의 거래 쌍은: BTC_USDT

[2]에서:

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

외출[2]: { 재고: 1, FrozenBalance: 0, 재고: 10, FrozenStocks: 0 }

[3]에서:

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

아웃[3]: { 재고: 10,000, FrozenBalance: 0, 재고: 1, FrozenStocks: 0 }

[4]:

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

외출[4]: { 재고: 10,000, FrozenBalance: 0, 재고: 1, FrozenStocks: 0 }

[5]에서:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

외출[5]: 2

[6]에서:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

외출[6]: 11

[7]에서:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

아웃[7]: 20000

BTC의 초기 총수는 2이고 ETH의 총수는 11이고 USDT의 총수는 20000이라고 볼 수 있습니다.

[8]에서:

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

아웃[8]: 시간: 1554831960000, 높은: 0.03396501, 낮은: 0.03396499, 판매: 0.03396501, 구매: 0.03396499, 마지막: 0.033965, 분량: 4696.555, 오픈인터레스: 0 }

[9]에서:

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

아웃[9]: 시간: 1554831960000, 최고: 175.08000001, 최저 175.07999999, 판매: 175.08000001, 구매: 175.07999999, 마지막 175.08 부: 20730.37, 오픈인터레스: 0 }

[10]에서:

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

아웃[10]: 시간: 1554831960000, 높은: 5161.90000001, 낮은: 5161.89999999, 판매: 5161.90000001, 5161.89999999, 마지막: 5161.9 양: 2109.9292 오픈인터레스: 0 }

거래소 A, 거래소 B 및 거래의 대상은 ETH, 즉 거래소 A/B는 간접적인 헤지 운영을 수행할 수 있지만 가격화폐가 다르기 때문에 직접적으로 헤지 할 수 없다는 것을 알 수 있습니다. 거래소 A의 가격화폐는 BTC이고 거래소 B의 것은 USDT입니다. 거래소 A가exchanges[0].Buy(price, amount), 그리고 상대방이 판매한 가격은 구매시 주문 가격으로 사용됩니다.tickerA.Sell거래소 B는 헤지를 위해 판매 거래를 수행합니다.exchanges[1].Sell(price, amount), 그리고 상대방이 구매하고자 하는 가격은 판매시 주문 가격으로 사용됩니다. 즉,tickerB.Buy왜냐하면 교환 A가 소비되기 때문입니다.BTC구매할 때, 거래소 B는 판매할 때 USDT를 얻었고, 교환 A는USDTBTC로 거래소 A에서 소비된 BTC를 보상합니다. 즉, 거래소 C가 실행합니다.exchanges[2].Buy(price, amount), 교환USDT와 함께BTC구매하려면 거래소 C가 상대방의 판매 가격을 확인해야 합니다.tickerC.Sell교환 A의 구매 가격은 교환 B의 판매 가격보다 낮아야 합니다. 그러면 교환 C는 교환 A가 소비한 BTC를 USDT보다 적은 금액으로 다시 구매할 수 있습니다. 당신은 USDT 금액의 차이를 벌게 됩니다. 그래서 다음과 같습니다:

[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

아웃[11]: 0.000047266535449966285

분명히 A 거래소의 구매 가격은 B 거래소와 C 거래소보다 높고, 헤딩은 분명히 돈을 잃는 것입니다. 다른 헤지 방향은 동일합니다. 거래소 A는 ETH 판매 작전을 실행하고, 거래소 B는 ETH 구매 작전을 실행하고, 거래소 C는 USDT에 BTC를 판매합니다. 통화를 달성하는 것은 항상 균형이고, USDT만 증가하거나 감소합니다 (즉, 얻은 차이).

[12]에서:

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

아웃[12]: 0.000047246531444007644

이제tickerA.Buy - tickerB.Sell / tickerC.Buy각 값이 어떻게 변하는지 알아내기 위한 헤지링 작업입니다.

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

아웃[13]: 잔액: 1,03389706, 얼어붙은 밸런스: 0 물자: 9개 FrozenStocks: 0

[14]에서:

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

아웃[14]: { id: 1, 가격은 0.03396499입니다. 금액: 1, 거래 금액: 1, 평균 가격: 0.03396499, 종류: 1, 오프셋: 0 상태: 1, 계약 유형: ETH_BTC_Huobi }

[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

외출[15]: 0.00006792998000000001

[16]에서:

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

외출[16]: { 잔액: 9824.56983998, 얼어붙은 밸런스: 0 양: 2개 FrozenStocks: 0

[17]에서:

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

아웃[17]: { id: 1, 가격: 175.08000001, 금액: 1, 거래 금액: 1, 평균 가격: 175.08000001, 타입: 0 오프셋: 0 상태: 1, 계약 타입: ETH_USDT_OKEX }

[18]에서:

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

아웃[18]: 0.00006783548693698057

[19]에서:

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

아웃[19]: 10174.12327555, 얼어붙은 밸런스: 0 주식: 0.9662, FrozenStocks: 0

[20]에서:

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

외출[20]: { id: 1, 가격: 5161.89999999, 금액: 0.0338 거래 금액: 0.0338, 평균 가격: 5161.89999999, 종류: 1, 오프셋: 0 상태: 1, 계약 유형: BTC_USDT_OKEX }

[21]에서:

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

외출 [1]: 0.00006759999999986903

피보험 후 총 자산 정보를 계산합니다:

[22]에서:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

아웃[22]: 2.00009706

[23]에서:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

아웃[23]: 11

[24]에서:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

외출 [1]: 19998.69311553

[25]에서:

nowSumBTC - initSumBTC

외출[25]: 0.00009705999999987114

[26]에서:

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

아웃[26]: 0.5010140139983642

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

외출 [1]: -0.8058704560025944

[28]에서:

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

외출[28]: -0.8058703331189396

우리가 볼 수 있듯이, 헤지링 때 가격 차이는 diffA2B입니다: 0.000047246531444007644. 세 개의 헤지에 대한 수수료는 BTC로 변환됩니다. feeA + feeB + feeC.

[29]에서:

feeA + feeB + feeC

외출[29]: 0.0002033654669368496

이러한 삼각형 헤딩의 경우 가격 차이는feeA+feeB+feeC적어도, 이것은 손실이 없거나 이익이 없다는 것을 의미합니다. 그리고 이윤을 창출하려면 가격 차이보다 커야 합니다. 현재는 계좌 비교 계산과 가격 차이 계산을 통해 손실입니다. 손실은 약 0.8058704560025944입니다. 저는 한 버전을 수정하여, 처리 수수료 매개 변수에 의해 계산된 처리 수수료는 비교 관찰을 위해 이 모델에 의해 테스트된 시장의 가격 차이 이익과 정확히 같습니다.

처리 수수료의 기본 조건 (2 ‰ 기본 조건) 에서, 헤지 차이점이 0.000047246531444007644 BTC인 경우 헤지는 손실이며 손실은 약 -0.8058704560025944입니다.

처리 수수료 조정 연구 버전

삼각형 헤지 (처리 수수료 조정)

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

초기 교환 계좌 정보와 틱을 표시합니다.

  • 거래소 A의 거래 쌍은: ETH_BTC
  • 거래소 B의 거래 쌍은: ETH_USDT
  • 거래소 C의 거래 쌍은: BTC_USDT

[2]에서:

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

외출[2]: { 재고: 1, FrozenBalance: 0, 재고: 10, FrozenStocks: 0 }

[3]에서:

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

아웃[3]: { 재고: 10,000, FrozenBalance: 0, 재고: 1, FrozenStocks: 0 }

[4]:

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

외출[4]: { 재고: 10,000, FrozenBalance: 0, 재고: 1, FrozenStocks: 0 }

[5]에서:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

외출[5]: 2

[6]에서:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

외출[6]: 11

[7]에서:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

아웃[7]: 20000

BTC의 초기 총수는 2이고 ETH의 총수는 11이고 USDT의 총수는 20000이라고 볼 수 있습니다.

[8]에서:

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

아웃[8]: 시간: 1554831960000, 높은: 0.03396501, 낮은: 0.03396499, 판매: 0.03396501, 구매: 0.03396499, 마지막: 0.033965, 분량: 4696.555, 오픈인터레스: 0 }

[9]에서:

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

아웃[9]: 시간: 1554831960000, 최고: 175.08000001, 최저 175.07999999, 판매: 175.08000001, 구매: 175.07999999, 마지막 175.08 부: 20730.37, 오픈인터레스: 0 }

[10]에서:

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

아웃[10]: 시간: 1554831960000, 높은: 5161.90000001, 낮은: 5161.89999999, 판매: 5161.90000001, 5161.89999999, 마지막: 5161.9 양: 2109.9292 오픈인터레스: 0 }

거래소 A, 거래소 B 및 거래의 대상은 ETH, 즉 거래소 A/B는 간접적인 헤지 운영을 수행할 수 있지만 가격화폐가 다르기 때문에 직접적으로 헤지 할 수 없다는 것을 알 수 있습니다. 거래소 A의 가격화폐는 BTC이고 거래소 B의 것은 USDT입니다. 거래소 A가exchanges[0].Buy(price, amount), 그리고 상대방이 판매한 가격은 구매시 주문 가격으로 사용됩니다.tickerA.Sell거래소 B는 헤지를 위해 판매 거래를 수행합니다.exchanges[1].Sell(price, amount), 그리고 상대방이 구매하고자 하는 가격은 판매시 주문 가격으로 사용됩니다. 즉,tickerB.Buy왜냐하면 교환 A가 소비되기 때문입니다.BTC구매할 때, 거래소 B는 판매할 때 USDT를 얻었고, 교환 A는USDTBTC로 거래소 A에서 소비된 BTC를 보상합니다. 즉, 거래소 C가 실행합니다.exchanges[2].Buy(price, amount), 교환USDT와 함께BTC구매하려면 거래소 C가 상대방의 판매 가격을 확인해야 합니다.tickerC.Sell교환 A의 구매 가격은 교환 B의 판매 가격보다 낮아야 합니다. 그러면 교환 C는 교환 A가 소비한 BTC를 USDT보다 적은 금액으로 다시 구매할 수 있습니다. 당신은 USDT 금액의 차이를 벌게 됩니다. 그래서 다음과 같습니다:

[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

아웃[11]: 0.000047266535449966285

분명히 A 거래소의 구매 가격은 B 거래소와 C 거래소보다 높고, 헤딩은 분명히 돈을 잃는 것입니다. 다른 헤지 방향은 동일합니다. 거래소 A는 ETH 판매 작전을 실행하고, 거래소 B는 ETH 구매 작전을 실행하고, 거래소 C는 USDT에 BTC를 판매합니다. 통화를 달성하는 것은 항상 균형이고, USDT만 증가하거나 감소합니다 (즉, 얻은 차이).

[12]에서:

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

아웃[12]: 0.000047246531444007644

이제tickerA.Buy - tickerB.Sell / tickerC.Buy각 값이 어떻게 변하는지 알아내기 위한 헤지링 작업입니다.

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

아웃[13]: 잔액: 1.0339514 얼어붙은 밸런스: 0 물자: 9개 FrozenStocks: 0

[14]에서:

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

아웃[14]: { id: 1, 가격은 0.03396499입니다. 금액: 1, 거래 금액: 1, 평균 가격: 0.03396499, 종류: 1, 오프셋: 0 상태: 1, 계약 유형: ETH_BTC_Huobi }

[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

외출[15]: 0.000013585996

[16]에서:

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

외출[16]: { 잔액: 9824.84996798, 얼어붙은 밸런스: 0 양: 2개 FrozenStocks: 0

[17]에서:

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

아웃[17]: { id: 1, 가격: 175.08000001, 금액: 1, 거래 금액: 1, 평균 가격: 175.08000001, 타입: 0 오프셋: 0 상태: 1, 계약 타입: ETH_USDT_OKEX }

[18]에서:

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

아웃[18]: 0.000013567097387396117

[19]에서:

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

아웃[19]: 잔액: 10174.91841463, 얼어붙은 밸런스: 0 주식: 0.9661, FrozenStocks: 0

[20]에서:

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

외출[20]: { id: 1, 가격: 5161.89999999, 금액: 0.0339, 거래 금액: 0.0339, 평균 가격: 5161.89999999, 종류: 1, 오프셋: 0 상태: 1, 계약 유형: BTC_USDT_OKEX }

[21]에서:

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

외출 [1]: 0.000013559999999973732

피보험 후 총 자산 정보를 계산합니다.

[22]에서:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

외출[22]: 2.0000514000000003

[23]에서:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

아웃[23]: 11

[24]에서:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

외출 [1]: 19999.76838261

[25]에서:

nowSumBTC - initSumBTC

외출[25]: 0.000051400000000256796

[26]에서:

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

아웃[26]: 0.26532166000081153

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

외출 [1]: 0.0337042700011807

[28]에서:

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

외출[28]: 0.03372495390449328

헤지링 과정에서 가격차가diffA2B: 0.000047246531444007644 세 개의 헤지징에 대한 처리 수수료는 BTC로 변환됩니다.feeA+feeB+feeC.

[29]에서:

feeA + feeB + feeC

외출[29]: 0.00004071309338736985

백테스트 구성에서 처리 수수료가"fee":[0.04,0.04]즉 0.04%입니다.feeA+feeB+feeC이 연구 문서는 가격 차이로 계산되는 것과 기본적으로 동일합니다. 이 연구 문서는 기본적으로 헤지링 시 가격 차이 diffA2B에 가깝습니다. 마지막으로 계산 된 이익과 손실은 0.03372495390449328, 단지 0.03372495390449328, 매우 작으며 계정 변경으로 계산 된 이익과 손실은 기본적으로 동일합니다. 이 연구 문서는 삼각형 헤지링에 대해 얼마나 많은 차이를 헤지 할 수 있는지 계산하는 데 사용할 수 있습니다.


관련

더 많은