0
Seguir
1
Seguidores

Reflexiones sobre el movimiento de activos a través de una estrategia de cobertura de contratos

Creado el: 2020-10-20 16:48:32, Actualizado el: 2023-09-26 20:59:29
comments   2
hits   2377

Reflexiones sobre el movimiento de activos a través de una estrategia de cobertura de contratos

Reflexiones sobre el movimiento de activos a través de una estrategia de cobertura de contratos

Ha habido muchas noticias en el mundo de las criptomonedas recientemente, y las noticias sobre los intercambios también están volando por todos lados. Durante un tiempo, todos los entusiastas de las criptomonedas estuvieron en pánico, preocupados por la seguridad de sus activos de blockchain. Hay muchos anuncios pequeños en varios grupos de criptomonedas que ofrecen descuentos del 10% o 20% en monedas de segunda mano inactivas. Hay muchas personas que buscan diversas estrategias para “buscar una pérdida constante de dinero y una ganancia constante al mismo tiempo”. Muchos amigos de las monedas también bromearon: “Si hay una forma estable de ganar dinero, ¿por qué necesitamos una forma estable de perder dinero?” De hecho, las cosas que generan dinero de manera constante y pierden dinero de manera constante sonmoney printer, y no es fácil de encontrar. Perdona mi pobre inglés.

Sin embargo, todavía existe inestabilidad, ya que a través de la cobertura contractual es posible obtener pérdidas y ganancias al mismo tiempo.

Estrategia DEMO

/*backtest
start: 2020-09-30 00:00:00
end: 2020-10-19 00:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/

var step = 20    // 加仓价格步长

function main() {
    var pos1 = []
    var pos2 = []
    var ct = "quarter"                         // 例如用季度合约
    exchanges[0].SetContractType(ct)
    exchanges[1].SetContractType(ct)
    var diff = 0

    while (true) {
        var r1 = exchanges[0].Go("GetDepth")   // A交易所
        var r2 = exchanges[1].Go("GetDepth")   // B交易所
        var depth1 = r1.wait()
        var depth2 = r2.wait()

        if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff) {
            if(pos1.length == 0 && pos2.length == 0) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            } else if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff + step) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            }
        }
        
        if(pos1.length != 0 && pos1[0].Profit < -0.001) {
            var info1 = $.CoverShort(exchanges[0], ct, pos1[0].Amount)
            var info2 = $.CoverLong(exchanges[1], ct, pos2[0].Amount)
            pos1 = _C(exchanges[0].GetPosition)
            pos2 = _C(exchanges[1].GetPosition)
            diff = 0
        }
        LogStatus(_D(), diff)
        Sleep(500)
    }
}

Reflexiones sobre el movimiento de activos a través de una estrategia de cobertura de contratos

Reflexiones sobre el movimiento de activos a través de una estrategia de cobertura de contratos

Lógica de la estrategia: La estrategia comienza inicializando las variables de posición pos1 y pos2 como matrices vacías. La estrategia ingresa al bucle principal y al comienzo de cada bucle obtiene los datos de profundidad (datos del libro de órdenes) de los contratos de las dos bolsas y calcula la diferencia de precios. Si la diferencia de precio continúa expandiéndose más allá de “la última diferencia de precio más un paso”, continúe protegiéndose y aumentando las posiciones. Al mantener una posición, si la pérdida de la primera posición de intercambio excede un valor determinado (por ejemplo: -0,001), la posición se cerrará. Este proceso se repite repetidamente.

El principio en realidad es muy sencillo: si la diferencia de precios es grande, se opta por la cobertura. Espere a que la bolsa en la que espera que pierda dinero mantenga una pérdida y luego cierre la posición. Si el diferencial continúa ampliándose, continúe aumentando la posición para cubrirse hasta que la bolsa en la que espera que pierda dinero mantenga una pérdida. Los parámetros más importantes son: cuánta pérdida se requiere para cerrar una posición, el tamaño del paso de la diferencia de precio para agregar posiciones y el monto de cobertura.

La estrategia es relativamente sencilla y solo se utiliza para comprobar la idea. No es aplicable en operaciones reales. Todavía hay muchas cuestiones que deben tenerse en cuenta en el comercio real, como por ejemplo si el contrato a negociar se basa en divisas o en U, si los multiplicadores de los diferentes contratos en los intercambios A y B son los mismos, etc.

De esta manera, si una bolsa pierde dinero, la pérdida se convertirá aproximadamente en la ganancia de otra bolsa (debido a la diferencia de precios, puede haber pérdidas de cobertura, es decir, la pérdida es mayor que la ganancia). La estrategia utiliza una biblioteca de negociación de futuros.$.CoverShort,$.OpenShortEstas son las funciones de interfaz de la plantilla. Para realizar pruebas retrospectivas y ejecutar la DEMO anterior, debe hacer referencia a esta biblioteca de clases.

El prototipo de estrategia anterior es solo la exploración más simple. Es posible que haya que tener en cuenta más detalles en la operación real. Por ejemplo, la cantidad de aumento de la posición se puede diseñar para que sea incremental. Este es solo un punto de partida. Sería posible optimizar estrategias similares. Los expertos están invitados a hacer sugerencias.