Estrategias de cobertura de divisas cruzadas en la negociación cuantitativa de activos de cadena de bloques

El autor:- ¿ Por qué?, Creado: 2022-12-27 10:11:48, Actualizado: 2023-09-20 10:02:24

img

Estrategias de cobertura de divisas cruzadas en la negociación cuantitativa de activos de cadena de bloques

En las estrategias de cobertura, hay varios tipos de cobertura: cobertura de mercado cruzado, cobertura de período cruzado, etc. Hoy hablaremos de cobertura de moneda cruzada, que es precisamente la estrategia de cobertura de moneda cruzada en el comercio cuantitativo de activos de cadena de bloques. En general, el tema de una transacción de cobertura es el mismo, mientras que la cobertura de moneda cruzada implica comprar y vender diferentes temas. Al cubrir la misma variedad, podemos usar la diferencia de precio como el precio de compra y venta en la transacción de cobertura. Para la cobertura de mercado cruzado más simple de la misma variedad, la diferencia de precio fluctúa repetidamente dentro de un cierto rango. La diferencia de precio no se puede usar como el precio de compra y venta para la cobertura de moneda cruzada, porque la diferencia de precios de diferentes monedas no es muy intuitiva de observar, y la relación de precios generalmente se usa como el precio de compra y venta.

Por ejemplo: El par de operaciones A: LTC_USDT El par de operaciones B: ETH_USDT

Distribuir las posiciones de apertura según el valor de la relación de precios dePrice of Trading pair A/Price of Trading pair B. Cuanto mayor sea la proporción, más venderemos A y compraremos B. Si la proporción disminuye, compre A y venda B. La cantidad USDT equivalente de cada cobertura es en realidad una estrategia para el comercio en red basada en el precio relativo de LTC/ETH. La idea de estrategia no es complicada. Sin embargo, debe tenerse en cuenta que este tipo de cartera de cobertura en realidad utiliza ETH como la moneda de precio de anclaje para el precio de LTC. Es probable que el precio anclado salga de la tendencia unilateral. Aunque la mayoría de las veces puede ser una tendencia volátil, este riesgo debe considerarse y tenerse en cuenta.

Es fácil escribir un prototipo de estrategia utilizando la plataforma de comercio de FMZ Quant: Cuando el código de estrategia se ejecuta, necesita hacer referencia aimgyimgBiblioteca de tramas:https://www.fmz.com/strategy/27293Biblioteca de operaciones spot de divisas digitales: viene con la barra 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

// parameters
var numPoint = 100        // Number of nodes
var distance = 0.08       // Proportional distance
var amountPoint = 100     // Node amount in 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("Hedging, price ratio", 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("hedge, price ratio", 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)
    }
}

A través del backtesting, podemos inicialmente verificar las ideas estratégicas

Utilice la configuración predeterminada de backtesting:

img img

Se puede ver que sólo se utilizaron unas pocas docenas de líneas de código para construir una estrategia de sus propias ideas. Es muy fácil implementar un prototipo de ideas en la plataforma de comercio de FMZ Quant. Según la figura anterior, esta proporción de precios fluctúa la mayor parte del tiempo, pero habrá una cierta tendencia. La dirección de optimización puede ser el control de posición durante la cobertura o la adición de una cierta identificación de tendencia. En términos de control de posición, puede aumentar el monto de cobertura de cada nodo de cobertura. 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,          // 8% of amountPoint per increment
            isHold : false,
        }
        arrHedgeList.push(point)
    }
    isFirst = false
}

De esta manera, las posiciones relativamente pesadas pueden concentrarse en la posición con una proporción de precio alta, para evitar posiciones grandes ocupadas cuando la proporción de precio es baja. Si el precio de una moneda continúa subiendo en relación con el precio de otra moneda, ocurrirán pérdidas flotantes. Por lo tanto, la cobertura de divisas requiere una correlación más fuerte entre las dos monedas.

Esta estrategia es sólo una demostración inicial, que puede ser mejorada y optimizada.


Relacionados

Más.