
En las estrategias de cobertura, existen varios tipos de coberturas. Cobertura entre mercados, cobertura entre períodos, etc. Hoy vamos a hablar sobre la cobertura entre productos o, más precisamente, sobre estrategias de cobertura entre divisas en el trading cuantitativo de activos blockchain. Los activos subyacentes en las transacciones de cobertura convencionales son los mismos, mientras que la cobertura entre divisas implica comprar y vender diferentes activos subyacentes. Al cubrir un mismo producto, podemos utilizar la diferencia de precio como precio de compra y de venta en la operación de cobertura. En el caso de la cobertura cruzada más simple del mismo producto, la diferencia de precio fluctúa repetidamente dentro de un rango determinado. La cobertura entre productos no puede utilizar las diferencias de precios como precios de compra y venta, porque las diferencias de precios entre distintos productos no son muy intuitivas de observar. Por lo general, se utiliza la relación de precios como precio de compra y de venta.
Por ejemplo: Un par comercial: LTC_USDT Par comercial B: ETH_USDT
de acuerdo aA交易对的价格/B交易对的价格Este valor de relación de precios se utiliza para dispersar las posiciones de apertura. Cuanto mayor sea la relación, más necesitaremos vender A y comprar B. Por el contrario, si la proporción se hace menor, compre A y venda B. La estrategia de cobertura de una cantidad igual de USDT cada vez es, en realidad, una estrategia de negociación en red basada en la fortaleza relativa del precio de LTC/ETH. La estrategia no es complicada. Sin embargo, debe tenerse en cuenta que esta combinación de cobertura en realidad utiliza ETH como moneda de precio de anclaje para denominar LTC. Este precio anclado puede tener una tendencia unilateral, aunque puede fluctuar la mayor parte del tiempo. Sin embargo, es un riesgo que se debe tener en cuenta y al que hay que prestar atención.
Utilizando la plataforma de negociación cuantitativa Inventor, es fácil escribir un prototipo de estrategia:
Cuando se ejecuta el código de política, debe hacer referencia a
y
「Biblioteca de dibujo lineal」: https://www.fmz.com/strategy/27293
“Biblioteca de trading al contado de criptomonedas”: se proporciona en la columna de plantillas cuando cada usuario crea una nueva estrategia.
/*backtest
start: 2019-05-01 00:00:00
end: 2019-11-04 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"LTC_USDT","balance":100000,"stocks":30},{"eid":"OKEX","currency":"ETH_USDT","balance":100000,"stocks":30}]
*/
/*
A exchanges[0] : EOS_USDT
B exchanges[1] : ETH_USDT
*/
var Interval = 500
// 参数
var numPoint = 100 // 节点数
var distance = 0.08 // 比例间距
var amountPoint = 100 // 节点金额,单位USDT
var arrHedgeList = []
function main () {
var isFirst = true
while(true) {
var rA = exchanges[0].Go("GetTicker")
var rB = exchanges[1].Go("GetTicker")
var tickerA = rA.wait()
var tickerB = rB.wait()
if (tickerA && tickerB) {
var priceRatioSell = tickerB.Buy / tickerA.Sell // B sell , A buy
var priceRatioBuy = tickerB.Sell / tickerA.Buy // B buy , A sell
if (isFirst) {
for (var i = 0 ; i < numPoint ; i++) {
var point = {
priceRatio : priceRatioSell + (i + 1) * distance,
coverRatio : priceRatioSell + i * distance,
amount : (0.08 * i + 1) * amountPoint,
isHold : false,
}
arrHedgeList.push(point)
}
isFirst = false
}
for (var j = 0 ; j < arrHedgeList.length; j++) {
if (priceRatioSell > arrHedgeList[j].priceRatio && arrHedgeList[j].isHold == false) {
// B sell , A buy
Log("对冲,价格比", priceRatioSell, "#FF0000")
$.Buy(exchanges[0], arrHedgeList[j].amount / tickerA.Sell)
$.Sell(exchanges[1], arrHedgeList[j].amount / tickerB.Buy)
arrHedgeList[j].isHold = true
LogStatus(_D(), exchanges[0].GetAccount(), "\n", exchanges[1].GetAccount())
$.PlotLine("ratio", (priceRatioSell + priceRatioBuy) / 2)
break
}
if (priceRatioBuy < arrHedgeList[j].coverRatio && arrHedgeList[j].isHold == true) {
// B buy , A sell
Log("对冲,价格比", priceRatioBuy, "#32CD32")
$.Sell(exchanges[0], arrHedgeList[j].amount / tickerA.Buy)
$.Buy(exchanges[1], arrHedgeList[j].amount / tickerB.Sell)
arrHedgeList[j].isHold = false
LogStatus(_D(), exchanges[0].GetAccount(), "\n", exchanges[1].GetAccount())
$.PlotLine("ratio", (priceRatioSell + priceRatioBuy) / 2)
break
}
}
}
Sleep(Interval)
}
}
Usando la configuración de backtest predeterminada:


Se puede observar que solo se utilizan unas pocas decenas de líneas de código para construir una estrategia a partir de las propias ideas. En la plataforma de negociación cuantitativa Inventor, es muy fácil hacer realidad el prototipo de una idea. En el gráfico anterior, podemos ver que esta relación de precios oscila la mayor parte del tiempo, pero hay una cierta tendencia. La dirección de optimización puede ser el control de la posición durante la cobertura o la adición de cierta identificación de tendencias.
En términos de control de posición, la cantidad de cobertura de cada nodo de cobertura se puede aumentar de forma incremental, por ejemplo, en el código:
if (isFirst) {
for (var i = 0 ; i < numPoint ; i++) {
var point = {
priceRatio : priceRatioSell + (i + 1) * distance,
coverRatio : priceRatioSell + i * distance,
amount : (0.08 * i + 1) * amountPoint, // 每次递增amountPoint的8%
isHold : false,
}
arrHedgeList.push(point)
}
isFirst = false
}
Esto permite concentrar posiciones relativamente más pesadas en ubicaciones con ratios de precios más altos, evitando tomar posiciones demasiado grandes cuando el ratio de precios es más bajo. Por supuesto, este tipo de cobertura entre productos es muy arriesgada. Si el precio de una moneda sigue aumentando en relación con otra, se producirán pérdidas flotantes. Por lo tanto, la cobertura entre productos requiere una correlación más fuerte entre los dos productos.
Esta estrategia es sólo una DEMO inicial y puede modificarse y optimizarse aún más.