avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Strategi keseimbangan dinamis berdasarkan mata uang digital

Dibuat di: 2020-03-03 10:17:43, diperbarui pada: 2023-10-09 22:49:27
comments   3
hits   3707

Strategi keseimbangan dinamis berdasarkan mata uang digital

I. Ringkasan

Mentor Warren Buffett, Benjamin Graham pernah menyebutkan model perdagangan keseimbangan dinamis antara saham dan obligasi dalam bukunya “The Intelligent Investor”. Strategi keseimbangan dinamis berdasarkan mata uang digital Model perdagangan ini sangat sederhana:

  • Investasikan 50% uang Anda pada reksa dana saham dan 50% sisanya pada reksa dana obligasi. Artinya, saham dan obligasi masing-masing menyumbang setengahnya.
  • Menyeimbangkan kembali aset pada interval tertentu atau berdasarkan perubahan pasar untuk mengembalikan rasio aset saham terhadap aset obligasi ke rasio awal 1:1. Ini adalah keseluruhan logika strategi, termasuk kapan harus membeli dan menjual, dan berapa banyak yang harus dibeli dan dijual. Cukup sederhana!

2. Prinsip keseimbangan dinamis

Dalam metode ini, volatilitas dana obligasi sebenarnya sangat kecil, jauh lebih rendah daripada volatilitas saham, sehingga obligasi digunakan sebagai “jangkar acuan” di sini, yaitu menggunakan obligasi untuk mengukur apakah saham telah naik terlalu banyak. Itu masih peningkatan yang terlalu sedikit.

Jika harga saham naik, nilai pasar saham akan lebih besar dari nilai pasar obligasi. Ketika rasio nilai pasar keduanya melebihi ambang batas yang ditetapkan, posisi total akan disesuaikan kembali, saham akan dijual, dan Obligasi tersebut akan dibeli untuk mengembalikan rasio nilai pasar saham-obligasi ke nilai semula 1:1.

Sebaliknya, jika harga saham turun, nilai pasar saham akan lebih rendah dari nilai pasar obligasi. Ketika rasio nilai pasar keduanya melebihi ambang batas yang ditetapkan, maka posisi total akan disesuaikan kembali untuk membeli saham dan menjual obligasi untuk mengembalikan rasio nilai pasar saham-obligasi ke nilai semula 1:1. Strategi keseimbangan dinamis berdasarkan mata uang digital

Dengan cara ini, dengan menyeimbangkan rasio antara saham dan obligasi secara dinamis, adalah mungkin untuk menikmati hasil pertumbuhan saham dan mengurangi volatilitas aset. Sebagai pelopor investasi nilai, Graham memberi kita ide yang bagus. Karena ini adalah strategi yang lengkap, mengapa kita tidak menerapkannya pada mata uang kripto?

3. Logika Strategi

Strategi Keseimbangan Dinamis dalam Aset Blockchain BTC

Logika Strategi

  • Berdasarkan nilai BTC saat ini, saldo akun akan berjumlah ¥5000 dalam bentuk tunai dan 0,1 BTC, dengan kata lain, rasio awal antara nilai pasar tunai dengan BTC adalah 1:1.
  • Jika harga BTC naik menjadi ¥6000, yaitu nilai pasar BTC lebih besar dari saldo akun, dan selisih di antara keduanya melampaui ambang batas yang ditetapkan, maka koin (6000-5000)/6000/2 akan dijual. Ini berarti BTC telah terapresiasi dan uang tersebut dapat ditukar kembali.
  • Jika harga BTC turun menjadi ¥4000, artinya nilai pasar BTC kurang dari saldo akun, dan selisih di antara keduanya melebihi ambang batas yang ditetapkan, maka belilah koin (5000-4000)/4000/2. Ini berarti BTC telah terdepresiasi, jadi belilah kembali BTC.

Dengan cara ini, tidak peduli apakah BTC naik atau turun, saldo akun dan nilai pasar BTC selalu tetap sama. Jika BTC terdepresiasi, belilah sebagian, dan ketika naik kembali, jual sebagian, seperti halnya keseimbangan.

4. Kerangka Strategis

Jadi, bagaimana cara mengimplementasikannya dengan kode? Mari kita ambil contoh Inventor Quantitative Trading Platform. Pertama, mari kita lihat kerangka strateginya:

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

Keseluruhan kerangka strategi sebenarnya sangat sederhana, dengan fungsi utama, fungsi order onTick, fungsi CancelPendingOrders, dan parameter yang diperlukan.

5. Modul pesanan

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

Logika perdagangan pesanan jelas dan semua komentar telah ditulis dalam kode. Anda dapat mengeklik gambar untuk memperbesarnya.

Proses utamanya adalah sebagai berikut:

  • Dapatkan informasi akun.
  • Dapatkan data Tick.
  • Hitung spread bid-ask pada data tick.
  • Hitunglah perbedaan antara saldo akun dan nilai pasar BTC.
  • Hitung kondisi pembelian dan penjualan, harga pesanan, dan jumlah pesanan.
  • Tempatkan pesanan dan kembalikan true.

6. Modul Pembatalan Pesanan

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

Modul pembatalan pesanan bahkan lebih sederhana, langkah-langkahnya adalah sebagai berikut:

  • Tunggu selama 1 detik sebelum membatalkan pesanan. Ini berbeda untuk beberapa bursa. Anda tahu.
  • Lanjutkan untuk memperoleh susunan pesanan yang belum terpenuhi. Jika pengecualian dikembalikan, lanjutkan untuk memperolehnya.
  • Jika susunan pesanan yang tidak terpenuhi kosong, status pembatalan pesanan akan segera dikembalikan.
  • Jika ada pesanan yang tidak terpenuhi, seluruh array dilintasi dan pesanan dibatalkan satu per satu sesuai dengan nomor pesanan.

7. Kode sumber 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 Strategi keseimbangan dinamis berdasarkan mata uang digital

8. Pengujian Ulang Strategi

Selanjutnya, mari kita uji strategi keseimbangan dinamis sederhana ini untuk melihat apakah berhasil. Berikut ini adalah backtest pada data historis BTC, untuk referensi Anda saja.

Lingkungan Pengujian Ulang Strategi keseimbangan dinamis berdasarkan mata uang digital

Kinerja Uji Ulang Strategi keseimbangan dinamis berdasarkan mata uang digital

Kurva uji balik Strategi keseimbangan dinamis berdasarkan mata uang digital

Berikut adalah grafik harga BTC lainnya untuk periode yang sama Strategi keseimbangan dinamis berdasarkan mata uang digital

Selama periode uji ulang, BTC telah jatuh selama 8 bulan, dengan penurunan maksimum melebihi 70%, yang menyebabkan banyak investor kehilangan kepercayaan terhadap aset blockchain. Pengembalian kumulatif dari strategi ini setinggi 160%, dan rasio risiko-pengembalian tahunan melebihi 5. Untuk strategi investasi yang sedemikian sederhana, laba atas investasi ini telah melampaui sebagian besar orang yang berinvestasi sepenuhnya.

9. Dapatkan kode sumber strategi

Kode sumber strategi telah dipublikasikan di situs web resmi Inventor Quantitative https://www.fmz.com/strategy/110545. Tidak diperlukan konfigurasi untuk pengujian ulang daring secara langsung.

10. Kesimpulan

Strategi keseimbangan dinamis ini hanya memiliki satu parameter inti (ambang batas), yang merupakan metode investasi sangat sederhana yang mengejar keuntungan stabil daripada keuntungan berlebih. Berbeda dengan strategi tren, strategi keseimbangan dinamis melawan tren. Strategi keseimbangan dinamis justru sebaliknya. Ketika pasar sedang panas, Anda mengurangi posisi untuk mendinginkannya, dan ketika pasar sedang tenang, Anda menambah posisi dan tetap tidak aktif. Strategi ini agak mirip dengan regulasi ekonomi makro.

Faktanya, strategi keseimbangan dinamis adalah keterampilan yang menganut konsep bahwa harga tidak dapat diprediksi sambil menangkap fluktuasi harga. Kunci dari strategi keseimbangan dinamis adalah menetapkan dan menyesuaikan rasio alokasi aset dan ambang pemicu. Karena keterbatasan ruang, mustahil sebuah artikel dapat mencakup semuanya. Perlu Anda ketahui bahwa di balik kata-kata, terdapat hati. Hal terpenting tentang strategi keseimbangan dinamis adalah ide investasi. Anda bahkan dapat mengganti aset BTC tunggal dalam artikel ini dengan sekeranjang aset blockchain.

Akhirnya, mari kita akhiri artikel ini dengan kutipan terkenal dari Benjamin Graham dalam bukunya The Intelligent Investor:Pasar saham bukanlah “mesin penimbang” yang dapat mengukur nilai secara akurat. Sebaliknya, ini adalah “mesin pemungutan suara”. Keputusan yang dibuat oleh banyak orang merupakan campuran antara rasionalitas dan emosi. Seringkali, pilihan-pilihan ini jauh dari penilaian nilai rasional. Rahasia berinvestasi adalah berinvestasi ketika harga jauh di bawah nilai intrinsik dan percaya bahwa tren pasar akan pulih. ——Benjamin Graham, Investor Cerdas