
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.
Mô hình giao dịch này rất đơn giản:
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.

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ử?
Chiến lược cân bằng động trong Blockchain Asset BTC
Chiến lược Logic
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.
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.
// 下单函数
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:
// 撤单函数
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:
// 回测环境
/*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

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

Hiệu suất kiểm tra ngược

Đường cong kiểm tra ngược

Đây là một biểu đồ giá BTC khác cho cùng kỳ

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.
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.
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