4
Подписаться
1271
Подписчики

Стратегия динамического баланса на основе цифровой валюты

Создано: 2020-03-03 10:17:43, Обновлено: 2023-10-09 22:49:27
comments   3
hits   3707

Стратегия динамического баланса на основе цифровой валюты

I. Резюме

Наставник Уоррена Баффета Бенджамин Грэм однажды упомянул в своей книге «Разумный инвестор» торговую модель динамического баланса между акциями и облигациями. Стратегия динамического баланса на основе цифровой валюты Эта торговая модель очень проста:

  • Инвестируйте 50% своих денег в фонды акций, а оставшиеся 50% — в фонды облигаций. То есть, на акции и облигации приходится по половине каждой.
  • Ребалансируйте активы через фиксированные промежутки времени или на основе изменений на рынке, чтобы восстановить соотношение активов в виде акций и активов в виде облигаций до первоначального значения 1:1. Вот и вся логика стратегии, включая то, когда покупать и продавать, сколько покупать и продавать. Достаточно просто!

2. Принцип динамического равновесия

В этом методе волатильность фондов облигаций на самом деле очень мала, намного ниже волатильности акций, поэтому облигации используются здесь в качестве «якоря», то есть облигации используются для измерения того, выросли ли акции слишком сильно. Это все еще слишком мало прироста.

Если цена акций растет, рыночная стоимость акций будет больше рыночной стоимости облигаций. Когда соотношение рыночной стоимости двух превышает установленный порог, общая позиция будет скорректирована, акции будут проданы, и облигация будет куплена, чтобы восстановить соотношение рыночной стоимости акций и облигаций до исходного значения 1:1.

Напротив, если цена акций падает, рыночная стоимость акций будет меньше рыночной стоимости облигаций. Когда соотношение рыночной стоимости двух превышает установленный порог, общая позиция будет скорректирована для покупки акций и продать облигации, чтобы восстановить соотношение рыночной стоимости акций и облигаций до исходного 1:1. Стратегия динамического баланса на основе цифровой валюты

Таким образом, динамически балансируя соотношение между акциями и облигациями, можно воспользоваться плодами роста акций и снизить волатильность активов. Будучи пионером стоимостного инвестирования, Грэм подает нам хорошую идею. Поскольку это комплексная стратегия, почему бы нам не применить ее к криптовалютам?

3. Логика стратегии

Стратегия динамического баланса в блокчейн-активе BTC

Стратегическая логика

  • Согласно текущей стоимости BTC, остаток на счете составит 5000 иен наличными и 0,1 BTC, то есть начальное соотношение наличных денег к рыночной стоимости BTC составит 1:1.
  • Если цена BTC вырастет до 6000 иен, то есть рыночная стоимость BTC станет больше остатка на счете, а разница между ними превысит установленный порог, то будет продано (6000-5000)/6000/2 монеты. Это означает, что BTC вырос и деньги можно обменять обратно.
  • Если цена BTC упадет до 4000 иен, то есть рыночная стоимость BTC меньше остатка на счете, а разница между ними превысит установленный порог, то купите (5000-4000)/4000/2 монеты. Это означает, что BTC обесценился, поэтому выкупайте BTC обратно.

Таким образом, независимо от того, растет или падает курс BTC, баланс счета и рыночная стоимость BTC всегда остаются равными. Если BTC падает, купите часть, а когда он снова вырастет, продайте часть, просто как баланс.

4. Стратегические рамки

Итак, как это реализовать с помощью кода? Давайте возьмем в качестве примера Inventor Quantitative Trading Platform. Сначала давайте рассмотрим структуру стратегии:

// 撤单函数
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); // 休眠
    }
}

Вся структура стратегии на самом деле очень проста и включает в себя основную функцию, функцию ордера onTick, функцию CancelPendingOrders и необходимые параметры.

5. Заказать модуль

// 下单函数
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
}

Логика торговли ордерами понятна, все комментарии прописаны в коде. Вы можете нажать на картинку, чтобы увеличить ее.

Основной процесс выглядит следующим образом:

  • Получить информацию об аккаунте.
  • Получить данные Tick.
  • Рассчитайте спред между ценами спроса и предложения на основе тиковых данных.
  • Рассчитайте разницу между балансом счета и рыночной стоимостью BTC.
  • Рассчитайте условия покупки и продажи, цену заказа и объем заказа.
  • Оформите заказ и верните true.

6. Модуль отмены заказа

// 撤单函数
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秒
            }
        }
    }
}

Модуль отмены заказа еще проще, шаги следующие:

  • Подождите 1 секунду, прежде чем отменить заказ. Это проблема некоторых бирж, вы знаете.
  • Продолжаем получать массив невыполненных заказов. Если возвращено исключение, продолжаем получать.
  • Если массив невыполненных заказов пуст, статус отмены заказа возвращается немедленно.
  • При наличии невыполненных заказов выполняется обход всего массива и заказы отменяются по одному в соответствии с номером заказа.

7. Полный исходный код стратегии

// 回测环境
/*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); // 休眠
    }
}

Внешние параметры Стратегия динамического баланса на основе цифровой валюты

8. Стратегическое бэктестирование

Далее давайте проверим эту простую стратегию динамического баланса, чтобы увидеть, работает ли она. Ниже приведен бэктест на основе исторических данных BTC, представленный исключительно для справки.

Среда бэктестинга Стратегия динамического баланса на основе цифровой валюты

Производительность бэктеста Стратегия динамического баланса на основе цифровой валюты

Кривая бэктестинга Стратегия динамического баланса на основе цифровой валюты

Вот еще один график цены BTC за тот же период Стратегия динамического баланса на основе цифровой валюты

За период бэктестинга BTC падал на протяжении 8 месяцев, а максимальное падение превысило 70%, из-за чего многие инвесторы утратили доверие к блокчейн-активам. Совокупная доходность этой стратегии достигает 160%, а годовой коэффициент доходности/риска превышает 5. При такой простой инвестиционной стратегии доходность инвестиций превысила доходность инвестиций подавляющего большинства людей, которые идут ва-банк.

9. Получите исходный код стратегии

Исходный код стратегии опубликован на официальном сайте Inventor Quantitative https://www.fmz.com/strategy/110545. Для прямого онлайн-бэктестинга настройка не требуется.

10. Заключение

Эта стратегия динамического баланса имеет только один основной параметр (порог), что является очень простым методом инвестирования, направленным на получение стабильной прибыли, а не избыточной. В отличие от стратегии тренда, стратегия динамического баланса идет против тренда. Стратегия динамического баланса — полная противоположность. Когда рынок горячий, вы сокращаете позиции, чтобы остыть, а когда рынок спокойный, вы увеличиваете позиции и остаетесь в состоянии покоя. Это чем-то похоже на макроэкономическое регулирование.

По сути, стратегия динамического баланса — это навык, который придерживается концепции непредсказуемости цен и в то же время улавливает их колебания. Ключом к стратегии динамического баланса является установка и корректировка коэффициента распределения активов и порогового значения срабатывания. Из-за ограничений по объему статья не может охватить все. Вы должны знать, что за словами скрывается сердце. Самое важное в стратегии динамического баланса — это инвестиционная идея. Вы даже можете заменить один актив BTC в этой статье корзиной активов блокчейна.

Наконец, давайте закончим эту статью известной цитатой Бенджамина Грэма из его книги «Разумный инвестор»:Фондовый рынок — это не «весовая машина», которая может точно измерить стоимость. Вместо этого это «машина для голосования». Решения, принимаемые бесчисленным множеством людей, представляют собой смесь рациональности и эмоций. Зачастую эти выборы далеки от рациональное оценочное суждение. Секрет инвестирования заключается в том, чтобы вкладывать средства, когда цены намного ниже внутренней стоимости, и верить, что рыночная тенденция восстановится. ——Бенджамин Грэм, «Разумный инвестор»