Benjamin Graham, mentor Warren Buffett, pernah menulis dalam bukunya Investor yang Pintar, bahwa ada model perdagangan yang dinamika dari saham dan obligasi yang seimbang.Model transaksi ini sangat sederhana:
Dalam pendekatan ini, fluktuasi dana obligasi sebenarnya sangat kecil, jauh lebih rendah dari fluktuasi saham, sehingga obligasi di sini dianggap sebagai 'bond referensi', yaitu, menggunakan obligasi untuk mengukur apakah saham menghasilkan terlalu banyak atau terlalu sedikit.
Jika harga saham naik, maka nilai pasar saham akan lebih besar dari nilai pasar obligasi, dan ketika rasio nilai pasar keduanya melebihi ambang batas yang ditetapkan, maka posisi total akan disesuaikan kembali, menjual saham, dan membeli obligasi, sehingga rasio nilai pasar saham dan obligasi kembali ke 1:1 awal.
Sebaliknya, penurunan harga saham membuat nilai pasar saham kurang dari nilai pasar obligasi, dan ketika rasio nilai pasar keduanya melebihi ambang batas yang ditetapkan, posisi total disesuaikan kembali, membeli saham, dan menjual obligasi, sehingga rasio nilai pasar saham dan obligasi kembali ke 1:1 awal.
Dengan begitu, rasio antara saham dan obligasi yang seimbang secara dinamis cukup untuk menikmati buah-buahan dari pertumbuhan saham dan mengurangi volatilitas aset. Sebagai pelopor investasi nilai, Graham memberikan ide bagus bagi kita.
Strategi keseimbangan dinamis dalam aset blockchain BTC
Logika strategis
Dengan demikian, baik BTC naik atau turun, saldo akun selalu dinamis untuk menjaga nilai pasar BTC. Jika BTC turun, beli beberapa, dan kemudian kembali, jual beberapa lagi, seolah-olah tidak ada masalah.
Jadi, bagaimana cara menggunakan kode untuk melakukan ini? Mari kita lihat dulu kerangka kerja strategi dengan inventor sebagai contoh dari platform perdagangan kuantitatif:
// 撤单函数
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); // 休眠
}
}
Seluruh kerangka kebijakan sebenarnya sangat sederhana, dengan main main, onTick sub, CancelPendingOrders, dan parameter yang diperlukan.
// 下单函数
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
}
Di bawah ini adalah tata letak logika transaksi yang jelas, semua komentar telah ditulis dalam kode, Anda dapat mengklik gambar untuk melihat lebih besar.
Proses utama adalah sebagai berikut:
// 撤单函数
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秒
}
}
}
}
Jika Anda tidak memiliki akun Facebook, Anda tidak akan dapat mengaksesnya.
// 回测环境
/*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); // 休眠
}
}
Parameter eksternal
Selanjutnya, mari kita uji strategi keseimbangan dinamis sederhana ini untuk melihat apakah itu berhasil. Berikut ini adalah ulasan dari data sejarah BTC, untuk referensi saja.
Pengukuran Lingkungan
Hasil tes ulang
Kurva pengukuran ulang
Berikut ini adalah grafik pergerakan harga BTC pada periode yang sama.
Pada periode review, BTC telah mengalami penurunan selama 8 bulan, bahkan terburuknya lebih dari 70%, yang menyebabkan banyak investor kehilangan kepercayaan pada aset blockchain. Strategi ini memiliki keuntungan kumulatif hingga 160% dan risiko pengembalian tahunan lebih dari 5%. Untuk strategi investasi yang sederhana, laba atas investasi ini telah melampaui sebagian besar massa hip-hop.
Kode sumber strategi telah dibagikan ke situs inventor quantify.https://www.fmz.com/strategy/110545Tidak perlu mengkonfigurasi retest langsung secara online.
Strategi penyeimbangan dinamis ini, hanya memiliki satu parameter inti (threshold threshold), adalah metode investasi yang sangat sederhana, yang tidak mengejar keuntungan yang berlebihan, tetapi keuntungan yang kuat. Berbeda dengan strategi tren, strategi penyeimbangan dinamis adalah gerakan mundur. Dan strategi penyeimbangan dinamis adalah kebalikan, menurunkan harga saat pasar panas, menurunkan harga saat pasar dingin, dan meningkatkan volatilitas, yang sedikit mirip dengan pengendalian makroekonomi.
Pada kenyataannya, strategi keseimbangan dinamis adalah strategi yang menganut konsep harga yang tidak dapat diprediksi, dan juga menangkap fluktuasi harga. Inti utama dari strategi keseimbangan dinamis adalah menetapkan dan menyesuaikan proporsi alokasi aset, dan memicu ambang nilai. Karena alasan luasnya artikel ini, tidak ada cara untuk melakukan hal itu secara langsung.
Untuk mengakhiri, mari kita tutup dengan kata-kata terkenal dari Benjamin Graham dalam bukunya Investor Yang Pintar:Pasar saham bukanlah alat berat yang dapat mengukur nilai dengan tepat, melainkan mesin pemungutan suara, dimana keputusan yang dibuat oleh orang yang tak terhitung jumlahnya adalah campuran rasional dan emosional, yang seringkali jauh berbeda dari penilaian nilai rasional.Benjamin Graham adalah seorang investor cerdas.