Una estrategia de equilibrio dinámico basada en la moneda digital

El autor: , Creado: 2020-03-03 10:17:43, Actualizado: 2023-10-09 22:49:27

img

Primero, resumen

El mentor de Warren Buffett, Benjamin Graham, en su libro The Smartest Investor, mencionó un modelo de negociación en el que las acciones y los bonos se equilibran dinámicamente.imgEl modelo de transacción es muy simple:

  • Invierte el 50% de los fondos en fondos de acciones y el 50% en fondos de bonos; es decir, las acciones y los bonos son la mitad.
  • Se realizan reequilibrios de activos a intervalos fijos de tiempo o cambios en el mercado, para que la proporción de activos de acciones y activos de bonos vuelva a la proporción inicial de 1:1. Esta es toda la lógica de la estrategia, incluyendo cuándo comprar y cuánto comprar.

El principio de equilibrio dinámico

En este enfoque, la volatilidad de los fondos de bonos es pequeña, mucho menor que la volatilidad de las acciones, por lo que los bonos se consideran aquí como 'bondas de referencia', es decir, se usan los bonos para medir si las acciones ganan demasiado o muy poco.

Si el precio de las acciones aumenta y hace que el valor del mercado de las acciones sea mayor que el valor del mercado de los bonos, cuando la proporción del valor del mercado de los dos supera el umbral establecido, se reajusta la posición total, se venden las acciones y se compran los bonos para que la proporción del valor del mercado de las acciones y bonos vuelva a la proporción inicial de 1:1.

Por el contrario, los precios de las acciones caen, lo que hace que el valor del mercado de las acciones sea menor que el valor del mercado de los bonos, y cuando la proporción del valor del mercado de los dos supera el umbral establecido, se reajusta la posición total, se compran acciones y se venden bonos, para que la proporción del valor del mercado de las acciones y bonos vuelva a la proporción inicial de 1:1.img

De esta manera, el equilibrio dinámico entre las acciones y los bonos es suficiente para disfrutar de los frutos del crecimiento de las acciones y reducir la volatilidad de los activos. Como pionero de la inversión en valor, Graham nos dio una buena idea.

La tercera es la lógica estratégica.

Estrategia de equilibrio dinámico en BTC, un activo de la cadena de bloques

La lógica estratégica

  • Según el valor actual de BTC, el saldo de la cuenta es de ¥ 5000 en efectivo y 0.1 BTC, es decir, la proporción inicial de efectivo y valor de mercado de BTC es de 1:1.
  • Si el precio de BTC sube a 6000 yenes, es decir, el valor de mercado de BTC es mayor que el saldo de la cuenta, y la diferencia entre ellos es mayor que el umbral establecido, vende (~ 6000-5000) / 6000/2 monedas.
  • Si el precio de BTC cae a ¥ 4000, es decir, el valor de mercado de BTC es menor que el saldo de la cuenta y la diferencia entre ellos es mayor que el umbral establecido, compre ¥ 5000-4000 / 4000 / 2.

De esta manera, el saldo de la cuenta se mantiene dinámicamente igual al valor de mercado de BTC, sea que BTC se devalúe o no. Si BTC se devalúa, se compra un poco, y luego se vende un poco más, como si fuera normal.

Cuatro, el marco estratégico

Así que, ¿cómo se puede hacer esto con código? Tomemos el ejemplo de inventores de plataformas de intercambio cuantitativas, primero vamos a ver el marco estratégico:

// 撤单函数
function CancelPendingOrders() {}

// 下单函数
function onTick() {}

// 主函数
function main() {
    // 过滤非重要信息
    SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
    while (true) { // 轮询模式
        if (onTick()) { // 执行 onTick 函数
            CancelPendingOrders(); // 取消未成交的挂单
            Log(_C(exchange.GetAccount)); // 打印当前账户信息
        }
        Sleep(LoopInterval * 1000); // 休眠
    }
}

El marco de la política es muy sencillo, con una función principal, una función de menú onTick, una función CancelPendingOrders y los parámetros necesarios.

5o, módulo de subordinación

// 下单函数
function onTick() {
    var acc = _C(exchange.GetAccount); // 获取账户信息
    var ticker = _C(exchange.GetTicker); // 获取 Tick 数据
    var spread = ticker.Sell - ticker.Buy; // 获取 Tick 数据的买卖价差
    // 账户余额与当前持仓价值的差值的 0.5倍
    var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
    var ratio = diffAsset / acc.Balance; // diffAsset / 账户余额
    LogStatus('ratio:', ratio, _D()); // 打印 ratio和当前时间
    if (Math.abs(ratio) < threshold) { // 如果 ratio的绝对值小于指定阈值
        return false; // 返回 false
    }
    if (ratio > 0) { // 如果 ratio大于 0
        var buyPrice = _N(ticker.Sell + spread, ZPrecision); // 计算下单价格
        var buyAmount = _N(diffAsset / buyPrice, XPrecision); // 计算下单量
        if (buyAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // 买入下单
    } else {
        var sellPrice = _N(ticker.Buy - spread, ZPrecision); // 计算下单价格
        var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // 计算下单量
        if (sellAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // 卖出下单
    }
    return true; // 返回 true
}

La lógica de transacción de la siguiente orden es clara, todas las notas están escritas en el código, puedes hacer clic en la imagen para verla en grande.

Los principales procesos son los siguientes:

  • También puede acceder a la información de su cuenta.
  • Obtenga los datos de Tick.
  • El cálculo de los datos de compra y venta de Tick.
  • Calcula el saldo de la cuenta y la diferencia en el valor de mercado de BTC.
  • Calcular las condiciones de compra y venta, el precio del pedido, el volumen del pedido.
  • En el caso de los números de orden, el número de orden es el número de orden, y el número de orden es el número de orden.

Seis, el módulo de retiro

// 撤单函数
function CancelPendingOrders() {
    Sleep(1000); // 休眠 1秒
    var ret = false;
    while (true) {
        var orders = null;
        // 持续获取未成交订单数组,如果返回异常,则继续获取
        while (!(orders = exchange.GetOrders())) {
            Sleep(1000); // 休眠 1秒
        }
        if (orders.length == 0) { // 如果订单数组为空
            return ret; // 返回撤单状态
        }
        for (var j = 0; j < orders.length; j++) { // 遍历未成交订单数组
            exchange.CancelOrder(orders[j].Id); // 依次取消未成交订单
            ret = true;
            if (j < (orders.length - 1)) {
                Sleep(1000); // 休眠 1秒
            }
        }
    }
}

El proceso de eliminación de módulos es más sencillo, los pasos son los siguientes:

  • Es una cuestión de tiempo, de tiempo, de tiempo, de tiempo, de tiempo.
  • Continuar obteniendo la matriz de pedidos pendientes y continuar obteniendo si se devuelve una anomalía.
  • Si la matriz de pedidos pendientes está vacía, regresa al estado de retirada inmediatamente.
  • Si hay pedidos pendientes, se recorre toda la matriz y se retira en función del número de pedido.

7. El código fuente de la estrategia completa

// 回测环境
/*backtest
start: 2018-01-01 00:00:00
end: 2018-08-01 11:00:00
period: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/



// 撤单函数
function CancelPendingOrders() {
    Sleep(1000); // 休眠 1秒
    var ret = false;
    while (true) {
        var orders = null;
        // 持续获取未成交订单数组,如果返回异常,则继续获取
        while (!(orders = exchange.GetOrders())) {
            Sleep(1000); // 休眠 1秒
        }
        if (orders.length == 0) { // 如果订单数组为空
            return ret; // 返回撤单状态
        }
        for (var j = 0; j < orders.length; j++) { // 遍历未成交订单数组
            exchange.CancelOrder(orders[j].Id); // 依次取消未成交订单
            ret = true;
            if (j < (orders.length - 1)) {
                Sleep(1000); // 休眠 1秒
            }
        }
    }
}

// 下单函数
function onTick() {
    var acc = _C(exchange.GetAccount); // 获取账户信息
    var ticker = _C(exchange.GetTicker); // 获取 Tick 数据
    var spread = ticker.Sell - ticker.Buy; // 获取 Tick 数据的买卖价差
    // 账户余额与当前持仓价值的差值的 0.5倍
    var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
    var ratio = diffAsset / acc.Balance; // diffAsset / 账户余额
    LogStatus('ratio:', ratio, _D()); // 打印 ratio和当前时间
    if (Math.abs(ratio) < threshold) { // 如果 ratio的绝对值小于指定阈值
        return false; // 返回 false
    }
    if (ratio > 0) { // 如果 ratio大于 0
        var buyPrice = _N(ticker.Sell + spread, ZPrecision); // 计算下单价格
        var buyAmount = _N(diffAsset / buyPrice, XPrecision); // 计算下单量
        if (buyAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // 买入下单
    } else {
        var sellPrice = _N(ticker.Buy - spread, ZPrecision); // 计算下单价格
        var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // 计算下单量
        if (sellAmount < MinStock) { // 如果下单量小于最小交易量
            return false; // 返回 false
        }
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // 卖出下单
    }
    return true; // 返回 true
}

// 主函数
function main() {
    // 过滤非重要信息
    SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
    while (true) { // 轮询模式
        if (onTick()) { // 执行 onTick 函数
            CancelPendingOrders(); // 取消未成交的挂单
            Log(_C(exchange.GetAccount)); // 打印当前账户信息
        }
        Sleep(LoopInterval * 1000); // 休眠
    }
}

Parámetros externos img

8. Re-evaluación estratégica

A continuación, vamos a probar esta sencilla estrategia de equilibrio dinámico para ver si funciona. A continuación se muestra una revisión de los datos históricos de BTC, solo para su referencia.

Reconocimiento del entorno img

Resultados de las pruebas img

Curva de repetición img

Aquí está otro gráfico de movimiento del precio del BTC en el mismo período.img

En el período de revisión, BTC ha caído durante 8 meses, incluso más del 70%, lo que ha causado que muchos inversores pierdan la confianza en los activos de blockchain. Esta estrategia tiene un rendimiento acumulado de hasta 160% y un riesgo de rendimiento anual de más de 5%.

9. Obtener el código fuente de la estrategia

El código fuente de la estrategia ha sido publicado en la página web de inventores.https://www.fmz.com/strategy/110545No hay necesidad de configurar una retrospección directa en línea.

10 y resumen

Esta estrategia de equilibrio dinámico, con un solo parámetro central (el umbral de la devaluación), es un método de inversión muy simple, que no busca ganancias excesivas, sino ganancias sólidas. En contraste con la estrategia de tendencia, la estrategia de equilibrio dinámico es un movimiento contrario. Y la estrategia de equilibrio dinámico es exactamente lo contrario, rebajar los valores cuando el mercado está caliente y aumentar la volatilidad cuando el mercado está frío, un poco similar a la regulación macroeconómica.

De hecho, la estrategia de equilibrio dinámico es una estrategia que se basa en la idea de la imprevisibilidad de los precios y también captura las fluctuaciones de los precios. El núcleo clave de la estrategia de equilibrio dinámico está en establecer y ajustar la proporción de la distribución de activos, y también en disparar los umbrales.

Para finalizar, vamos a terminar con una famosa frase de Benjamin Graham en su libro The Brilliant Investor:El mercado de valores no es un "peso" que mide el valor con precisión, sino que es una "máquina de votación", donde las decisiones tomadas por innumerables personas son una mezcla de razonamiento y emoción, y muchas veces estas decisiones y evaluaciones de valor racionales son muy diferentes.Benjamin Graham es un ingenioso inversor y uno de los más grandes inversores del mundo.


Relacionados

Más.