avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
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의 현재 가치에 따라 계좌 잔액은 현금 5,000엔과 0.1BTC가 됩니다. 즉, 현금과 BTC 시장 가치의 초기 비율은 1:1입니다.
  • 만약 BTC 가격이 6,000엔으로 상승하면, 즉 BTC의 시장 가격이 계좌 잔액보다 크고, 그 차이가 설정된 임계값을 초과하면 (6,000-5,000)/6,000/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); // 休眠
    }
}

전체 전략 프레임워크는 실제로 매우 간단합니다. main 함수, 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
}

주문 거래 로직은 명확하고 모든 주석이 코드에 작성되었습니다. 그림을 클릭하면 확대할 수 있습니다.

주요 과정은 다음과 같습니다.

  • 계정 정보를 얻으세요.
  • 틱 데이터를 가져옵니다.
  • 틱 데이터에 대한 입찰-매도 가격 차이를 계산합니다.
  • 계좌 잔액과 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 자산을 블록체인 자산 바구니로 대체할 수도 있습니다.

마지막으로, Benjamin Graham의 저서 The Intelligent Investor에서 인용한 유명한 말로 이 기사를 마무리해 보겠습니다.주식 시장은 가치를 정확하게 측정할 수 있는 “저울”이 아닙니다. 대신 “투표 기계”입니다. 수많은 사람들이 내리는 결정은 합리성과 감정의 혼합입니다. 많은 경우 이러한 선택은 It is far from 합리적인 가치 판단. 투자의 비결은 가격이 내재적 가치보다 훨씬 낮을 때 투자하고, 시장 추세가 회복될 것이라고 믿는 것입니다. ——벤저민 그레이엄, 지적인 투자자