디지털 화폐 기반의 동적 균형 전략

저자: , 2020-03-03 10:17:43에서 작성, 2023-10-09 22:49:27에서 업데이트

img

제1장, 요약

워렌 버핏의 멘토인 벤자민 그레이엄은 "지혜로운 투자자"라는 책에서 주식과 채권의 동적 균형 거래 방식을 언급했다.img이 거래 모델은 매우 간단합니다.

  • 주식 펀드에 50%를 투자하고, 나머지 50%를 채권 펀드에 투자합니다. 즉, 주식과 채권은 각각 절반을 차지합니다.
  • 고정된 시간 간격 또는 시장 변화에 따라 한 번 재균형하여 주식 자산과 채권 자산의 비율을 초기 1:1로 되돌립니다. 이 전략의 전체 논리는 언제, 그리고 얼마나 구매해야 하는지에 관한 것입니다.

두 번째, 동적 균형 원칙

이 방법에서는 채권펀드의 변동률이 주식 변동률보다 훨씬 낮기 때문에, 채권은 여기서 '반응 유동'으로 간주된다. 즉, 채권으로 주가가 너무 많이 벌어지고, 너무 적게 벌어지는지 측정한다.

주식 가격이 상승하면 주식의 시가치가 채권의 시가치보다 커지고, 두 가지의 시가치 비율이 설정된 문턱을 초과하면 전체 지위를 재조정하여 주식을 판매하고 채권을 구입하여 주식 채권 시가치 비율을 초기 1:1로 되돌립니다.

반대로, 주식 가격이 하락하면 주식의 시가치가 채권의 시가치보다 작아지며, 두 가지의 시가치 비율이 설정된 문턱을 초과하면 총 포지션이 재조정되어 주식을 구입하고 채권을 판매하여 주식 채권 시가치 비율이 초기 1:1로 돌아갑니다.img

따라서 동적 균형 주식과 채권 사이의 비율은 주식 성장의 열매를 누릴 수 있고 자산의 변동성을 줄일 수 있습니다. 가치 투자의 선구자로서 그레이엄은 우리에게 좋은 아이디어를 제공합니다. 이것이 완전한 전략이기 때문에 왜 디지털 통화에서 그것을 사용하지 않을까요?

세 번째, 전략적 논리

블록체인 자산인 BTC의 동적 균형 전략

전략적 논리

  • 현재 BTC의 가치에 따라 계좌 잔액은 현금 5000 엔과 BTC 0.1을 보유하며, 즉 현금과 BTC 시장 가치의 초기 비율은 1:1이다.
  • 만약 BTC의 가격이 ¥6000, 즉 BTC의 시장 가치가 계정 잔액보다 커지고 그 사이의 차이는 설정된 문턱을 초과하면, 판매 (<6000-5000) /6000/2 동전. BTC가 상승한 것을 표시하고 돈을 다시 교환하십시오.
  • 만약 BTC의 가격이 ¥4000로 떨어지면, 즉 BTC의 시장 가치가 계좌 잔액보다 작고 그 사이의 차이는 설정된 약점에 해당하는 경우, BTC가 약화되었다는 것을 표시하고 BTC를 다시 구매하십시오.

따라서, BTC가 부가가치나 부가가치에 상관없이, 항상 동적으로 BTC의 시장 가치와 동일한 계좌 잔액을 유지합니다. BTC가 부가가치되면 몇 개를 구입하고, 다시 부가가치로 돌아와서 더 많은 것을 판매합니다.

네, 전략적 틀

그래서, 어떻게 코드를 사용해서 이 일을 할 수 있을까요? 우리는 발명가들의 양적 거래 플랫폼을 예로 들겠습니다.

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

전체 정책 프레임워크는 매우 간단합니다. 메인 메인 함수, 온틱 하위 함수, 딩 오더스 함수, 필요한 매개 변수와 함께요.

다섯째, 아래쪽 모듈

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

외부 변수 img

8. 전략적 재검토

다음으로, 이 간단한 동적 균형 전략을 테스트해보고 효과가 있는지 보자. 아래는 BTC의 역사적 데이터에 대한 재검토입니다.

환경검사 img

재검토 결과 img

재검토 곡선 img

또 한 장, 동시대 BTC 가격 추세표입니다.img

리모델링 기간 동안 BTC는 8개월 동안 계속 하락했으며 최대 하락률은 70%를 넘어섰으며, 많은 투자자들이 블록체인 자산에 대한 신뢰를 잃게 되었다. 이 전략은 누적 수익률이 160%에 달하고 연간 수익 위험률은 5% 이상이다. 이렇게 간단한 투자 전략의 수익률은 대부분의 힙합 대중보다 훨씬 높다.

9. 전략의 소스 코드를 획득

전략의 소스 코드는 발명자 정량화 웹사이트에 공개되었습니다.https://www.fmz.com/strategy/110545온라인 리테이크를 직접 설정할 필요가 없습니다.

10. 요약

이 문서의 동적 평형 전략은 하나의 핵심 매개 변수 (threshold threshold) 를 가지고 있으며, 초과 수익을 추구하는 것이 아니라 안정적인 수익을 추구하는 매우 간단한 투자 방법이다. 트렌드 전략과는 달리 동적 평형 전략은 역동적이다. 동적 평형 전략은 반대로, 시장이 뜨겁을 때 주식을 낮추고, 시장이 맑을 때 주식을 올리고, 거시경제 규제와 비슷하다.

사실, 동적 균형 전략은 가격의 예측불가능성을 고수하고 동시에 가격의 변동을 포착하는 기법이다. 동적 균형 전략의 핵심은 자산 분배 비율을 설정하고 조정하는 것, 그리고 한계값을 유발하는 것이다.

마지막으로, 벤저민 그레이엄의 저서 "The Brilliant Investor"에서 유명한 말을 인용하여 마무리하겠습니다.주식시장은 가치를 정확하게 측정할 수 있는 '중량기'가 아니라, 오히려 '투표기'이며, 수많은 사람들이 하는 결정은 이성적이고 감정적인 혼합물이며, 종종 이 선택과 이성적인 가치평가는 거리가 멀다. 투자의 비법은 가격이 내재적 가치보다 훨씬 낮을 때 투자하고 시장 추세가 회복될 것이라고 믿는 것이다. 벤제민 그레이엄: 똑똑한 투자자


관련

더 많은