avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Được tạo ra trong: 2020-03-03 10:17:43, cập nhật trên: 2023-10-09 22:49:27
comments   3
hits   3707

Chiến lược cân bằng động dựa trên tiền kỹ thuật số

I. Tóm tắt

Người cố vấn của Warren Buffett là Benjamin Graham đã từng đề cập đến mô hình giao dịch cân bằng động giữa cổ phiếu và trái phiếu trong cuốn sách “Nhà đầu tư thông minh” của ông. Chiến lược cân bằng động dựa trên tiền kỹ thuật số Mô hình giao dịch này rất đơn giản:

  • Đầu tư 50% tiền của bạn vào quỹ cổ phiếu và 50% còn lại vào quỹ trái phiếu. Nghĩa là cổ phiếu và trái phiếu mỗi bên chiếm một nửa.
  • Cân bằng lại tài sản theo các khoảng thời gian cố định hoặc dựa trên những thay đổi của thị trường để khôi phục tỷ lệ tài sản cổ phiếu so với tài sản trái phiếu về mức ban đầu là 1:1. Đây là toàn bộ logic của chiến lược, bao gồm thời điểm mua và bán, cũng như mua và bán bao nhiêu. Thật đơn giản!

2. Nguyên lý cân bằng động

Trong phương pháp này, tính biến động của quỹ trái phiếu thực sự rất nhỏ, thấp hơn nhiều so với tính biến động của cổ phiếu, vì vậy trái phiếu được sử dụng làm “mỏ neo tham chiếu” ở đây, tức là sử dụng trái phiếu để đo lường xem cổ phiếu có tăng quá nhiều hay không. Nó vẫn tăng quá ít.

Nếu giá cổ phiếu tăng, giá trị thị trường của cổ phiếu sẽ lớn hơn giá trị thị trường của trái phiếu. Khi tỷ lệ giá trị thị trường của hai bên vượt quá ngưỡng đã đặt, tổng vị thế sẽ được điều chỉnh lại, cổ phiếu sẽ được bán và trái phiếu sẽ được mua để đưa tỷ lệ giá trị thị trường cổ phiếu-trái phiếu trở lại mức ban đầu là 1:1.

Ngược lại, nếu giá cổ phiếu giảm, giá trị thị trường của cổ phiếu sẽ thấp hơn giá trị thị trường của trái phiếu. Khi tỷ lệ giá trị thị trường của hai bên vượt quá ngưỡng đã đặt, tổng vị thế sẽ được điều chỉnh lại để mua cổ phiếu và bán trái phiếu để đưa tỷ lệ giá trị thị trường cổ phiếu-trái phiếu trở về mức ban đầu là 1:1. Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Theo cách này, bằng cách cân bằng động tỷ lệ giữa cổ phiếu và trái phiếu, chúng ta có thể tận hưởng thành quả tăng trưởng của cổ phiếu và giảm sự biến động của tài sản. Là người tiên phong trong đầu tư giá trị, Graham cung cấp cho chúng ta một ý tưởng hay. Vì đây là một chiến lược hoàn chỉnh, tại sao chúng ta không áp dụng nó vào tiền điện tử?

3. Logic chiến lược

Chiến lược cân bằng động trong Blockchain Asset BTC

Chiến lược Logic

  • Theo giá trị hiện tại của BTC, số dư tài khoản sẽ là 5000 Yên tiền mặt và 0,1 BTC, tức là tỷ lệ ban đầu của tiền mặt so với giá trị thị trường BTC là 1:1.
  • Nếu giá BTC tăng lên ¥6000, tức là giá trị thị trường của BTC lớn hơn số dư tài khoản và chênh lệch giữa chúng vượt quá ngưỡng đã đặt thì sẽ bán (6000-5000)/6000/2 coin. Điều này có nghĩa là BTC đã tăng giá và tiền có thể được đổi lại.
  • Nếu giá BTC giảm xuống còn ¥4000, tức là giá trị thị trường của BTC thấp hơn số dư tài khoản và chênh lệch giữa chúng vượt quá ngưỡng đã đặt, thì hãy mua (5000-4000)/4000/2 coin. Điều này có nghĩa là BTC đã mất giá, vì vậy hãy mua lại BTC.

Theo cách này, bất kể BTC tăng hay giảm giá, số dư tài khoản và giá trị thị trường của BTC luôn được giữ bằng nhau. Nếu BTC mất giá, hãy mua một ít và khi giá tăng trở lại, hãy bán một ít, giống như một sự cân bằng vậy.

4. Khung chiến lược

Vậy, làm thế nào để triển khai nó bằng mã? Hãy lấy Nền tảng giao dịch định lượng Inventor làm ví dụ. Trước tiên, hãy xem xét khuôn khổ chiến lược:

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

Toàn bộ khuôn khổ chiến lược thực sự rất đơn giản, với một hàm chính, một hàm lệnh onTick, một hàm CancelPendingOrders và các tham số cần thiết.

5. Mô-đun đặt hàng

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

Logic giao dịch lệnh rõ ràng và tất cả các bình luận đã được viết vào mã. Bạn có thể nhấp vào hình ảnh để phóng to.

Quá trình chính diễn ra như sau:

  • Nhận thông tin tài khoản.
  • Nhận dữ liệu Tick.
  • Tính toán chênh lệch giá mua-bán trên dữ liệu tích tắc.
  • Tính toán sự chênh lệch giữa số dư tài khoản và giá trị thị trường BTC.
  • Tính toán điều kiện mua và bán, giá đặt lệnh và số lượng đặt lệnh.
  • Đặt hàng và trả về đúng.

6. Module Hủy đơn hàng

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

Module hủy đơn hàng thậm chí còn đơn giản hơn, các bước thực hiện như sau:

  • Đợi 1 giây trước khi hủy đơn hàng. Đây là vấn đề ở một số sàn giao dịch, bạn biết đấy.
  • Tiếp tục lấy mảng các đơn hàng chưa hoàn thành. Nếu có ngoại lệ được trả về, hãy tiếp tục lấy.
  • Nếu mảng đơn hàng chưa hoàn thành trống, trạng thái hủy đơn hàng sẽ được trả về ngay lập tức.
  • Nếu có đơn hàng chưa được thực hiện, toàn bộ mảng sẽ được duyệt và các đơn hàng sẽ bị hủy từng đơn hàng một theo số đơn hàng.

7. Mã nguồn chiến lược hoàn chỉnh

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

Các thông số bên ngoài Chiến lược cân bằng động dựa trên tiền kỹ thuật số

8. Kiểm tra lại chiến lược

Tiếp theo, chúng ta hãy thử nghiệm chiến lược cân bằng động đơn giản này để xem nó có hiệu quả không. Sau đây là bản kiểm tra ngược về dữ liệu lịch sử của BTC, chỉ để bạn tham khảo.

Môi trường kiểm tra ngược Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Hiệu suất kiểm tra ngược Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Đường cong kiểm tra ngược Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Đây là một biểu đồ giá BTC khác cho cùng kỳ Chiến lược cân bằng động dựa trên tiền kỹ thuật số

Trong thời gian kiểm tra ngược, BTC đã giảm trong vòng 8 tháng, với mức giảm tối đa vượt quá 70%, khiến nhiều nhà đầu tư mất niềm tin vào tài sản blockchain. Lợi nhuận tích lũy của chiến lược này lên tới 160% và tỷ lệ lợi nhuận/rủi ro hàng năm vượt quá 5. Đối với một chiến lược đầu tư đơn giản như vậy, lợi nhuận đầu tư này đã vượt xa lợi nhuận của phần lớn những người đầu tư toàn lực.

9. Nhận mã nguồn chiến lược

Mã nguồn chiến lược đã được công khai trên trang web chính thức của Inventor Quantitative https://www.fmz.com/strategy/110545. Không cần cấu hình để kiểm tra ngược trực tuyến trực tiếp.

10. Kết luận

Chiến lược cân bằng động này chỉ có một tham số cốt lõi (ngưỡng), đây là phương pháp đầu tư rất đơn giản, theo đuổi lợi nhuận ổn định thay vì lợi nhuận vượt mức. Ngược lại với chiến lược xu hướng, chiến lược cân bằng động lại đi ngược lại xu hướng. Chiến lược cân bằng động thì ngược lại. Khi thị trường nóng, bạn giảm vị thế để hạ nhiệt, và khi thị trường yên tĩnh, bạn tăng vị thế và duy trì trạng thái ngủ đông. Nó có phần giống với quy định kinh tế vĩ mô.

Trên thực tế, chiến lược cân bằng động là một kỹ năng tuân thủ khái niệm rằng giá cả không thể đoán trước trong khi vẫn nắm bắt được những biến động giá. Chìa khóa của chiến lược cân bằng động là thiết lập và điều chỉnh tỷ lệ phân bổ tài sản và ngưỡng kích hoạt. Do hạn chế về mặt không gian, một bài viết không thể bao quát hết mọi thứ. Bạn phải biết rằng ngoài ngôn từ, còn có trái tim. Điều quan trọng nhất về chiến lược cân bằng động là ý tưởng đầu tư. Bạn thậm chí có thể thay thế tài sản BTC đơn lẻ trong bài viết này bằng một rổ tài sản blockchain.

Cuối cùng, chúng ta hãy kết thúc bài viết này bằng một câu trích dẫn nổi tiếng của Benjamin Graham trong cuốn sách The Intelligent Investor của ông:Thị trường chứng khoán không phải là “cỗ máy cân” có thể đo lường chính xác giá trị. Thay vào đó, nó là “cỗ máy bỏ phiếu”. Các quyết định được đưa ra bởi vô số người là sự kết hợp giữa lý trí và cảm xúc. Nhiều lần, những lựa chọn này là Nó còn lâu mới phán đoán giá trị hợp lý. Bí quyết đầu tư là đầu tư khi giá thấp hơn nhiều so với giá trị nội tại và tin rằng xu hướng thị trường sẽ phục hồi. —Benjamin Graham, Nhà đầu tư thông minh