Utilice el entorno de investigación para analizar los detalles de la cobertura triangular y el impacto de las tarifas de gestión en la diferencia de precios cubierta.

El autor:- ¿ Por qué?, Creado: 2022-12-29 09:46:17, Actualizado: 2023-09-20 09:55:09

img

Utilice el entorno de investigación para analizar los detalles de la cobertura triangular y el impacto de las tarifas de gestión en la diferencia de precios cubierta.

Versión de investigación sin ajuste de las tasas de gestión

Se trata de la cobertura triangular.ipynb.

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

Indicación de la información inicial de la cuenta de cambio y de los indicadores:

  • El par de negociación en Exchange A es: ETH_BTC
  • El par de negociación en Exchange B es: ETH_USDT
  • El par de operaciones en Exchange C es: BTC_USDT

En [2]:

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

Fuera de juego[2]: { Saldo: 1, congeladoBalance: 0, existencias: 10, congeladas existencias: 0 }

En [3]:

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

Fuera[3]: { Saldo: 10000, congeladoBalance: 0, existencias: 1, congeladas existencias: 0 }

En [4]:

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

Fuera[4]: { Saldo: 10000, congeladoBalance: 0, existencias: 1, congeladas existencias: 0 }

En [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Fuera[5]: - ¿ Qué?

En [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Fuera de juego[6]: 11 años

En [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Fuera[7]: 20000

Se puede ver que el número total inicial de BTC es 2, el número total de ETH es 11, y el número total de USDT es 20000.

En [8]:

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

Fuera[8]: Es hora de la noche. Alto: 0.03396501. Bajo: 0.03396499, Vender: 0.03396501, el precio de venta es el siguiente: Comprar: 0.03396499, El último: 0.033965, Volumen: 4696.555, El interés abierto:

En [9]:

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

Fuera[9]: - ¿Por qué no lo haces? Lo más alto: 175.08000001. Bajo: 175.07999999, Vender: 175.08000001, el precio de venta es el siguiente: Comprar: 175.07999999, el precio de compra es de $175.0799999, el precio de compra es de $175.0799999, el precio de compra es de $175.0799999, El último: 175.08, Volumen: 20730.37, en el que se incluyen los siguientes: El interés abierto:

En el [10]:

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

Fuera [10]: Es hora de la noche. Alto: 5161.90000001, Bajo: 5161.89999999, Vender: 5161.90000001, Comprar: 5161.89999999, El último: 5161.9, Volumen: 2109.9292 y número de ejemplares. El interés abierto:

Se puede ver que el objeto de Exchange A, Exchange B y la transacción es ETH, es decir, Exchange A / B puede realizar operaciones de cobertura indirecta, pero no pueden cubrir directamente porque las monedas de precios son diferentes. Supongamos que el intercambio A realiza una operación de compra deexchanges[0].Buy(price, amount), y el precio vendido por la contraparte se utiliza como precio de la orden al comprar, es decir,tickerA.SellLa bolsa B realiza una operación de venta para cubrir, es decir,exchanges[1].Sell(price, amount), y el precio que la contraparte desea comprar se utiliza como precio de la orden al vender, es decir,tickerB.BuyPorque el intercambio A consumióBTCcuando se compra, y el intercambio B obtenido USDT cuando se vende, el intercambio A necesita reemplazarUSDTcon BTC para compensar el BTC consumido por el intercambio A, es decir, el intercambio C ejecutaexchanges[2].Buy(price, amount), y el intercambioUSDTconBTCPara comprar, el intercambio C necesita ver el precio de venta de la contraparte, es decir,tickerC.Sell. El precio de compra del intercambio A debe ser menor que el precio de venta del intercambio B, entonces el intercambio C puede recomprar BTC consumido por el intercambio A con menos USDT. Usted ganará la diferencia de la cantidad de USDT. Así que es lo siguiente:

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

Fuera [11]: Se trata de una serie de medidas que se aplican a las empresas.

Obviamente, el precio de compra de Exchange A es más alto que el de Exchange B y Exchange C, y la cobertura es obviamente pérdida de dinero. La otra dirección de cobertura es la misma. El Exchange A ejecuta la operación de venta de ETH, el Exchange B ejecuta la operación de compra de ETH y el Exchange C vende BTC por USDT. El logro de la moneda siempre está equilibrado y solo el USDT aumenta o disminuye (es decir, la diferencia ganada).

En [12]:

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

Fuera [12]: Se trata de una serie de medidas que se aplican a las empresas.

Vamos a hacer unatickerA.Buy - tickerB.Sell / tickerC.Buyoperación de cobertura para averiguar cómo cambia cada uno de los valores.

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

Fuera[13]: El saldo es de 1.03389706. El saldo congelado: 0, Las existencias: 9, ¿ Qué es eso?

En [14]:

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

Fuera [1]: - ¿Qué pasa? Precio: 0.03396499, Importe: 1, Contrato: 1, Precio promedio: 0.03396499, Tipo: uno. Desviación: 0, El estado: 1, Tipo de contrato: ETH_BTC_Huobi }

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

Fuera [1]: El importe de la ayuda se calculará en función de los siguientes factores:

En [16]:

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

Fuera [1]: { Saldo: 9824.56983998, el resto: 9824.56983998, el resto: 9824.56983998, el resto: 9824.56983998, FríoBalance: 0, Las existencias: 2, ¿ Qué es eso?

En [17]:

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

Fuera [1]: El número de identificación: 1, Precio: 175.08000001, Importe: 1, Contrato: 1 Precio promedio: 175.08000001, Tipo: 0, Desviación: 0, El estado: 1, Tipo de contrato: ETH_USDT_OKEX }

En el [18]:

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

Fuera [1]: Se trata de una serie de medidas que se aplican a las empresas de la Unión.

En [19]:

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

Fuera [1]: { Saldo: 10174.12327555, El saldo congelado: 0, Las existencias: 0.9662, ¿ Qué es eso?

En [20]:

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

Fuera [1]: - ¿Qué pasa? Precio: 5161.89999999, Cantidad: 0,0338. El acuerdo es de 0.0338. Precio promedio: 5161.89999999, Tipo: uno. Desviación: 0, El estado: 1, Tipo de contrato: BTC_USDT_OKEX }

En [21]:

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

Fuera[21]: Se trata de una serie de medidas que se aplican a los Estados miembros.

Calcular la información total sobre los activos después de la cobertura:

En [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Fuera[22]: 2.00009706

En [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Fuera[23]: 11 años

En [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Fuera[24]: 19998.69311553 el año en que se produjo el accidente.

En el [25]:

nowSumBTC - initSumBTC

Fuera de juego[25]: Se trata de una serie de medidas que se aplican a las empresas.

En [26]:

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

Fuera[26]: En el caso de las empresas de servicios de telecomunicaciones, las empresas de servicios de telecomunicaciones y las empresas de servicios de telecomunicaciones.

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

Fuera[27]: -0.8058704560025944 -0.8058704560025944 -0.8058704560025944 -0.805870454560025944 -0.80587045

En el [28]:

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

Fuera de juego[28]: - 0,8058703331189396 - ¿Qué es lo que quiere decir?

Como podemos ver, la diferencia de precio en el caso de la cobertura es de la siguiente manera: 0,000047246531444007644. Las tarifas para las tres coberturas, convertidas a BTC son: feeA + feeB + feeC.

En [29]:

feeA + feeB + feeC

Fuera[29]: Se trata de un proyecto de investigación.

Se puede ver que para tal cobertura triangular, la diferencia de precio debe ser mayor quefeeA+feeB+feeCPor lo menos, lo que significa que no hay pérdida, no hay ganancia, y para obtener un beneficio debe ser mayor que la diferencia de precio. En la actualidad, a través del cálculo de comparación de cuentas y el cálculo de la diferencia de precios, es una pérdida. He modificado una versión, de modo que las tasas de manipulación calculadas por el parámetro de tasas de manipulación son exactamente iguales a la diferencia de precios del beneficio del mercado probado por este modelo de observación comparativa.

Se puede ver que, en la condición predeterminada de las tarifas de gestión (2 ‰ por defecto), cuando la diferencia de cobertura es de 0,000047246531444007644 BTC, la cobertura es una pérdida y la pérdida es de aproximadamente -0,8058704560025944.

Versión de investigación del ajuste de las tasas de gestión

La cobertura triangular (ajuste de las tasas de gestión).ipynb

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

Indicación de la información inicial de la cuenta de cambio y el marcador:

  • El par de negociación en Exchange A es: ETH_BTC
  • El par de negociación en Exchange B es: ETH_USDT
  • El par de operaciones en Exchange C es: BTC_USDT

En [2]:

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

Fuera de juego[2]: { Saldo: 1, congeladoBalance: 0, existencias: 10, congeladas existencias: 0 }

En [3]:

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

Fuera[3]: { Saldo: 10000, congeladoBalance: 0, existencias: 1, congeladas existencias: 0 }

En [4]:

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

Fuera[4]: { Saldo: 10000, congeladoBalance: 0, existencias: 1, congeladas existencias: 0 }

En [5]:

var initSumBTC = accA.Balance + accC.Stocks
initSumBTC

Fuera[5]: - ¿ Qué?

En [6]:

var initSumETH = accA.Stocks + accB.Stocks
initSumETH

Fuera de juego[6]: 11 años

En [7]:

var initSumUSDT = accB.Balance + accC.Balance
initSumUSDT

Fuera[7]: 20000

Se puede ver que el número total inicial de BTC es 2, el número total de ETH es 11, y el número total de USDT es 20000.

En [8]:

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

Fuera[8]: Es hora de la noche. Alto: 0.03396501. Bajo: 0.03396499, Vender: 0.03396501, el precio de venta es el siguiente: Comprar: 0.03396499, El último: 0.033965, Volumen: 4696.555, El interés abierto:

En [9]:

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

Fuera[9]: - ¿Por qué no lo haces? Lo más alto: 175.08000001. Bajo: 175.07999999, Vender: 175.08000001, el precio de venta es el siguiente: Comprar: 175.07999999, el precio de compra es de $175.0799999, el precio de compra es de $175.0799999, el precio de compra es de $175.0799999, El último: 175.08, Volumen: 20730.37, en el que se incluyen los siguientes: El interés abierto:

En el [10]:

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

Fuera [10]: Es hora de la noche. Alto: 5161.90000001, Bajo: 5161.89999999, Vender: 5161.90000001, Comprar: 5161.89999999, El último: 5161.9, Volumen: 2109.9292 y número de ejemplares. El interés abierto:

Se puede ver que el objeto de Exchange A, Exchange B y la transacción es ETH, es decir, Exchange A / B puede realizar operaciones de cobertura indirecta, pero no pueden cubrir directamente porque las monedas de precios son diferentes. Supongamos que el intercambio A realiza una operación de compra deexchanges[0].Buy(price, amount), y el precio vendido por la contraparte se utiliza como precio de la orden al comprar, es decir,tickerA.SellLa bolsa B realiza una operación de venta para cubrir, es decir,exchanges[1].Sell(price, amount), y el precio que la contraparte desea comprar se utiliza como precio de la orden al vender, es decir,tickerB.BuyPorque el intercambio A consumióBTCcuando se compra, y el intercambio B obtenido USDT cuando se vende, el intercambio A necesita reemplazarUSDTcon BTC para compensar el BTC consumido por el intercambio A, es decir, el intercambio C ejecutaexchanges[2].Buy(price, amount), y el intercambioUSDTconBTCPara comprar, el intercambio C necesita ver el precio de venta de la contraparte, es decir,tickerC.Sell. El precio de compra del intercambio A debe ser menor que el precio de venta del intercambio B, entonces el intercambio C puede recomprar BTC consumido por el intercambio A con menos USDT. Usted ganará la diferencia de la cantidad de USDT. Así que es lo siguiente:

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

Fuera [11]: Se trata de una serie de medidas que se aplican a las empresas.

Obviamente, el precio de compra de Exchange A es más alto que el de Exchange B y Exchange C, y la cobertura es obviamente pérdida de dinero. La otra dirección de cobertura es la misma. El Exchange A ejecuta la operación de venta de ETH, el Exchange B ejecuta la operación de compra de ETH y el Exchange C vende BTC por USDT. El logro de la moneda siempre está equilibrado y solo el USDT aumenta o disminuye (es decir, la diferencia ganada).

En [12]:

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

Fuera [12]: Se trata de una serie de medidas que se aplican a las empresas.

Vamos a hacer unatickerA.Buy - tickerB.Sell / tickerC.Buyoperación de cobertura para averiguar cómo cambia cada uno de los valores.

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

Fuera[13]: Saldo: 1,0339514, el saldo de las cuentas del Banco es de 1,0339514, FríoBalance: 0, Las existencias: 9, ¿ Qué es eso?

En [14]:

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

Fuera [1]: - ¿Qué pasa? Precio: 0.03396499, Importe: 1, Contrato: 1, Precio promedio: 0.03396499, Tipo: uno. Desviación: 0, El estado: 1, Tipo de contrato: ETH_BTC_Huobi }

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

Fuera [1]: Se trata de un artículo de la Directiva 2009/138/CE.

En [16]:

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

Fuera [1]: { Saldo: 9824.84996798, El saldo congelado: 0, Las existencias: 2, ¿ Qué es eso?

En [17]:

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

Fuera [1]: El número de identificación: 1, Precio: 175.08000001, Importe: 1, Contrato: 1 Precio promedio: 175.08000001, Tipo: 0, Desviación: 0, El estado: 1, Tipo de contrato: ETH_USDT_OKEX }

En el [18]:

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

Fuera [1]: Se trata de las empresas de la Unión Europea.

En [19]:

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

Fuera [1]: { Saldo: 10174.91841463, El saldo congelado: 0, Las existencias: 0.9661, ¿ Qué es eso?

En [20]:

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

Fuera [1]: - ¿Qué pasa? Precio: 5161.89999999, Cantidad: 0,0339. El acuerdo es de 0.0339. Precio promedio: 5161.89999999, Tipo: uno. Desviación: 0, El estado: 1, Tipo de contrato: BTC_USDT_OKEX }

En [21]:

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

Fuera[21]: Se trata de un artículo de la Directiva 2009/138/CE.

Calcular la información sobre el activo total después de la cobertura.

En [22]:

var nowSumBTC = nowAccA.Balance + nowAccC.Stocks
nowSumBTC

Fuera[22]: Las demás:

En [23]:

var nowSumETH = nowAccA.Stocks + nowAccB.Stocks
nowSumETH

Fuera[23]: 11 años

En [24]:

var nowSumUSDT = nowAccB.Balance + nowAccC.Balance
nowSumUSDT

Fuera[24]: 19999.76838261 el año de su nacimiento.

En el [25]:

nowSumBTC - initSumBTC

Fuera de juego[25]: Se trata de los siguientes:

En [26]:

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

Fuera[26]: 0,26532166000081153 y el resto de los Estados miembros

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

Fuera[27]: 0337042700011807

En el [28]:

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

Fuera de juego[28]: - ¿Qué es eso?

Se puede ver que la diferencia de precio durante la cobertura esdiffA2BSe trata de un proyecto de ley que tiene por objeto la creación de un centro de investigación. La tasa de gestión de las tres coberturas se convierte en BTC como:feeA+feeB+feeC.

En [29]:

feeA + feeB + feeC

Fuera de juego[29]: Se trata de una serie de medidas que se aplican a las empresas.

Se puede ver que en la configuración de backtest, la tarifa de manejo se cambia a"fee":[0.04,0.04], es decir, 0,04%.feeA+feeB+feeCEl valor de la diferencia de precio de la cobertura de triángulo es 0,00004071309338736985, que es básicamente cercano a la diferencia de precio diffA2B en el momento de la cobertura. Finalmente, la ganancia y pérdida calculada es muy pequeña, solo 0,03372495390449328, y la ganancia y pérdida calculada a través del cambio de cuenta es básicamente la misma que la calculada a través de la diferencia de precio.


Relacionados

Más.