Benjamin Graham, người cố vấn của Warren Buffett, đã từng đề cập đến một mô hình giao dịch chứng khoán trái phiếu cân bằng động trong cuốn sách của ông về nhà đầu tư thông minh.Một số người cho rằng, "Điều này là rất đơn giản".
Trong phương pháp này, tỷ lệ biến động của quỹ trái phiếu thực sự rất nhỏ, thấp hơn rất nhiều so với tỷ lệ biến động của cổ phiếu, vì vậy trái phiếu được coi là "cơ quan tham khảo", tức là, trái phiếu được sử dụng để đo lường liệu cổ phiếu có kiếm được nhiều hay í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, và khi tỷ lệ giá trị thị trường của cả hai vượt quá mức thềm được thiết lập, tổng vị trí sẽ được điều chỉnh lại, bán cổ phiếu và mua trái phiếu, để tỷ lệ giá trị thị trường cổ phiếu và trái phiếu trở lại mức ban đầu 1:1.
Thay vào đó, giá cổ phiếu giảm, làm cho giá trị thị trường của cổ phiếu thấp hơn giá trị thị trường của trái phiếu, và khi tỷ lệ giá trị thị trường của cả hai vượt quá mức thềm được thiết lập, tổng vị trí được điều chỉnh lại, mua cổ phiếu và bán trái phiếu, làm cho tỷ lệ giá trị thị trường trái phiếu trở lại mức ban đầu 1:1.
Như vậy, tỷ lệ cân bằng động giữa cổ phiếu và trái phiếu là đủ để hưởng lợi từ sự tăng trưởng của cổ phiếu và giảm biến động 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 tuyệt vời.
Chiến lược cân bằng năng động trong tài sản blockchain BTC
Logic chiến lược
Như vậy, bất kể BTC được tăng giá hay giảm giá, số dư tài khoản sẽ luôn được duy trì tương đương với giá trị thị trường của BTC. Nếu BTC bị giảm giá, bạn sẽ mua một số, và sau đó bán một số, giống như bình thường.
Vì vậy, làm thế nào để thực hiện với mã? Hãy lấy ví dụ của nhà phát minh của nền tảng giao dịch định lượng, trước tiên hãy xem khung 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ổ chính sách thực sự rất đơn giản, một hàm chính, một hàm 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
}
Dưới đây là các giao dịch logic rõ ràng, tất cả các chú thích đã được viết trong mã, bạn có thể nhấp vào hình ảnh để phóng to.
Các quy trình chính sau đây:
// 撤单函数
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秒
}
}
}
}
Các bước sau đây là cách đơn giản nhất để gỡ bỏ các module:
// 回测环境
/*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 tham số bên ngoài
Tiếp theo, chúng ta hãy thử một chiến lược cân bằng động đơn giản này và xem liệu nó có hiệu quả hay không. Dưới đây là những đánh giá về dữ liệu lịch sử của BTC, chỉ để tham khảo.
Phân tích môi trường
Kiểm tra hiệu suất
Đánh giá lại đường cong
Một bức ảnh khác, cùng thời điểm, về xu hướng giá của BTC.
Trong thời gian xem lại, BTC đã giảm trong 8 tháng, thậm chí giảm cao nhất hơn 70%, khiến nhiều nhà đầu tư mất niềm tin vào các tài sản blockchain. Chiến lược này có lợi nhuận tích lũy lên đến 160%, tỷ lệ rủi ro lợi nhuận hàng năm hơn 5%. Đối với một chiến lược đầu tư đơn giản như vậy, lợi nhuận đầu tư đã vượt quá đa số người Hip Hop.
Mã nguồn chiến lược đã được công bố trên trang web của nhà phát minhhttps://www.fmz.com/strategy/110545Không cần thiết phải cấu hình trực tiếp để kiểm tra trực tuyến.
Chiến lược cân bằng năng động này, chỉ có một tham số cốt lõi ("threshold threshold"), là một phương pháp đầu tư rất đơn giản, không theo đuổi lợi nhuận quá mức, mà là lợi nhuận vững chắc. Trái ngược với chiến lược xu hướng, chiến lược cân bằng năng động là ngược lại. Trong khi đó chiến lược cân bằng năng động là ngược lại, giảm giá trong khi thị trường nóng, giảm giá trong khi thị trường lạnh, giống như điều chỉnh kinh tế vĩ mô.
Trong thực tế, chiến lược cân bằng động chính là duy trì ý tưởng về sự không thể đoán trước giá cả, đồng thời là một thủ thuật để nắm bắt sự biến động của giá cả. Trung tâm quan trọng 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à kích hoạt ngưỡng.
Cuối cùng, chúng ta hãy kết thúc với một câu nói nổi tiếng của Benjamin Graham trong cuốn sách "The Brilliant Investor" của ông:Thị trường chứng khoán không phải là một "đường cân" để đo lường giá trị chính xác, mà là một "máy bầu cử", trong đó các quyết định của vô số người là một sự pha trộn của lý trí và cảm xúc, và nhiều lần các lựa chọn và đánh giá giá trị lý trí khác nhau rất nhiều.Benjamin Graham là một nhà đầu tư thông minh.