Strategi keseimbangan dinamis berdasarkan mata uang digital

Penulis: , Dibuat: 2020-03-03 10:17:43, Diperbarui: 2023-10-09 22:49:27

img

Pertama, ringkasan

Benjamin Graham, mentor Warren Buffett, pernah menulis dalam bukunya Investor yang Pintar, bahwa ada model perdagangan yang dinamika dari saham dan obligasi yang seimbang.imgModel transaksi ini sangat sederhana:

  • Investasikan 50% dari dana yang Anda miliki di dalam dana saham, dan investasi 50% lainnya di dalam dana obligasi; yaitu, saham dan obligasi masing-masing setengah.
  • Aset-aset yang diimbangi kembali satu kali berdasarkan interval waktu yang tetap atau perubahan pasar, sehingga rasio aset saham dan aset obligasi kembali ke 1:1 awal. Ini adalah semua logika dari strategi ini, termasuk kapan dan berapa banyak yang harus dibeli.

Kedua, prinsip keseimbangan dinamis

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

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.

Ketiga, logika strategis

Strategi keseimbangan dinamis dalam aset blockchain BTC

Logika strategis

  • Berdasarkan nilai BTC saat ini, saldo akun menyimpan ¥5000 tunai dan 0,1 BTC, yaitu rasio awal dari nilai pasar tunai dan BTC adalah 1:1.
  • Jika harga BTC naik menjadi ¥6000, yaitu nilai pasar BTC lebih besar dari saldo akun, dan selisihnya lebih besar dari ambang batas yang ditetapkan, jual (<6000-5000) /6000/2 koin.
  • Jika harga BTC turun menjadi ¥ 4000, yaitu nilai pasar BTC kurang dari saldo akun, dan selisihnya lebih dari ambang batas yang ditetapkan, beli ¥ 5000-4000 / 4000 / 2 koin.

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.

Keempat, kerangka kerja strategis.

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.

5 Modul bawah

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

  • Mengakses informasi akun.
  • Untuk mendapatkan data Tick.
  • Perhitungan Tick data harga jual yang berbeda.
  • Perhitungan saldo rekening dan harga pasar BTC.
  • Menghitung kondisi jual beli, harga pesanan, jumlah pesanan.
  • Tuliskan, dan kembalikan true.

6 Modul Penghapusan

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

  • Anda harus menunggu satu detik sebelum menarik uang, pertukaran individu, Anda tahu.
  • Tetap mendapatkan dataran pesanan yang belum selesai, dan terus mendapatkan jika terjadi kesalahan.
  • Jika Array Pendinginan kosong, segera kembali ke status penarikan.
  • Jika ada pesanan yang belum selesai, cari di seluruh matriks, dan kemudian hapus sesuai dengan nomor pesanan.

7.Sumber Kode Strategi Lengkap

// 回测环境
/*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 img

8. Uji Kembali Strategis

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 img

Hasil tes ulang img

Kurva pengukuran ulang img

Berikut ini adalah grafik pergerakan harga BTC pada periode yang sama.img

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.

9. Mendapatkan kode sumber strategi

Kode sumber strategi telah dibagikan ke situs inventor quantify.https://www.fmz.com/strategy/110545Tidak perlu mengkonfigurasi retest langsung secara online.

10. Kesimpulan

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.


Berkaitan

Lebih banyak