Strategi imbangan dinamik berdasarkan mata wang digital

Penulis: , Dicipta: 2020-03-03 10:17:43, Dikemas kini: 2023-10-09 22:49:27

img

Satu, ringkasan

Penasihat Warren Buffett, Benjamin Graham pernah menulis dalam bukunya Investor yang Pintar, mengenai model perdagangan yang dinamika dengan saham dan bon yang seimbang.imgModel perdagangan ini sangat mudah:

  • Dengan modal 50 peratus, anda boleh melabur dalam dana saham dan 50 peratus lagi dalam dana bon; iaitu saham dan bon masing-masing adalah separuh.
  • Pembalasan semula aset dilakukan pada satu masa mengikut selang masa tetap atau perubahan pasaran untuk mengembalikan nisbah aset saham dan aset bon kepada 1:1 yang awal. Ini adalah keseluruhan logik strategi, termasuk bila dan berapa banyak untuk membeli.

2. Prinsip Keseimbangan Dinamik

Dalam pendekatan ini, kadar turun naik dana bon sebenarnya sangat kecil, jauh di bawah kadar turun naik saham, jadi bon di sini dianggap sebagai 'bond rujukan', iaitu menggunakan bon untuk mengukur sama ada saham terlalu banyak atau terlalu sedikit.

Jika harga saham meningkat, maka nilai pasaran saham akan lebih besar daripada nilai pasaran bon, apabila nisbah nilai pasaran kedua-duanya melebihi ambang yang ditetapkan, kedudukan keseluruhan disesuaikan semula, menjual saham, dan membeli bon, sehingga nisbah nilai pasaran saham dan bon kembali ke 1:1 yang awal.

Sebaliknya, harga saham jatuh, menjadikan nilai pasaran saham kurang daripada nilai pasaran bon, dan apabila nisbah nilai pasaran kedua-duanya melebihi ambang yang ditetapkan, kedudukan keseluruhan disesuaikan semula, membeli saham, dan menjual bon, menjadikan nisbah nilai pasaran saham dan bon kembali ke tahap awal 1:1.img

Dengan cara ini, perbandingan antara saham dan bon yang seimbang secara dinamik cukup untuk menikmati buah pertumbuhan saham dan mengurangkan turun naik aset. Sebagai pelopor pelaburan nilai, Graham memberi kita idea yang baik. Oleh kerana ini adalah strategi yang lengkap, mengapa kita tidak menggunakannya untuk mata wang digital?

Ketiga, logik strategi.

Strategi keseimbangan dinamik dalam aset blockchain BTC

Logik Strategi

  • Dengan nilai BTC semasa, baki akaun menyimpan ¥ 5000 tunai dan 0.1 BTC, iaitu nisbah awal nilai tunai dan pasaran BTC adalah 1:1.
  • Jika harga BTC meningkat kepada ¥6000, iaitu nilai pasaran BTC lebih besar daripada baki akaun, dan selisih antara kedua-duanya melebihi ambang tertakluk, jual (<6000-5000) /6000/2 sen. Ini menunjukkan BTC meningkat dan menukar wang kembali.
  • Jika harga BTC jatuh kepada ¥ 4000, iaitu nilai pasaran BTC kurang daripada baki akaun, dan perbezaan antara mereka melebihi ambang yang ditetapkan, beli ¥ 5000-4000 / 4000 / 2 koin.

Dengan cara ini, sama ada BTC meningkat atau menurun, baki akaun sentiasa dinamik dijaga sama dengan nilai pasaran BTC. Jika BTC menurun, beli beberapa, tunggu untuk kembali, dan jual beberapa lagi, seolah-olah tidak ada apa-apa.

4. Rangka Kerja Strategik

Jadi, bagaimana untuk mewujudkan ini dengan kod? Mari kita lihat pada platform perdagangan kuantitatif pencipta sebagai contoh, pertama-tama mari kita lihat kerangka strategi:

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

Rangka kerja dasar ini sebenarnya sangat mudah, dengan fungsi utama utama, fungsi bawah onTick, fungsi CancelPendingOrders, dan parameter yang diperlukan.

5. Bahagian 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
}

Peraturan logik urus niaga di bawah jelas, semua komen telah ditulis dalam kod, anda boleh mengklik gambar untuk melihat lebih besar.

Proses utama adalah sebagai berikut:

  • Mendapat maklumat akaun.
  • Dapatkan data Tick.
  • Perkiraan Tick Data Harga Beli Beli Berbeza.
  • Mengira baki akaun dan perbezaan harga pasaran BTC.
  • Mengira syarat jual beli, harga pesanan, kuantiti pesanan.
  • Tukar nombor dan pulangkan true.

6. Modul Penarikan

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

Mengeluarkan modul adalah lebih mudah, langkah-langkahnya adalah sebagai berikut:

  • Jika anda ingin membuat pembayaran, anda perlu menunggu satu saat sebelum mengeluarkan wang anda, pertukaran individu, anda tahu.
  • Melanjutkan mendapatkan matriks pesanan yang belum selesai, dan teruskan mendapatkan jika kembali ke luar biasa.
  • Jika matriks pesanan yang belum ditangani kosong, segera kembali ke status pengeluaran.
  • Jika ada pesanan yang belum diselesaikan, pergi ke seluruh artifak, dan secara beransur-ansur membatalkan mengikut nombor pesanan.

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

8. Ujian semula strategi

Seterusnya, mari kita uji strategi keseimbangan dinamik yang mudah ini untuk melihat apakah ia berkesan. Berikut adalah ulasan semula mengenai data sejarah BTC, hanya untuk rujukan anda.

Pengukuran semula persekitaran img

Uji semula prestasi img

Kurva pengukuran semula img

Satu lagi, grafik pergerakan harga BTC pada masa yang sama.img

Dalam tempoh yang ditonton semula, BTC telah mengalami penurunan selama 8 bulan dan bahkan penurunan tertinggi lebih daripada 70%, yang menyebabkan banyak pelabur kehilangan keyakinan terhadap aset blockchain. Strategi ini mempunyai keuntungan kumulatif sebanyak 160% dan risiko pendapatan tahunan lebih daripada 5%. Untuk strategi pelaburan yang sederhana, pulangan pelaburan ini telah melebihi kebanyakan orang hip-hop.

9. Mendapatkan kod sumber strategi

Kod sumber strategi telah dibuka kepada inventor quantify.orghttps://www.fmz.com/strategy/110545Tidak perlu mengkonfigurasi ujian semula secara langsung dalam talian.

10. Ringkasan

Strategi imbangan dinamik ini, yang hanya mempunyai satu parameter teras (threshold threshold), adalah kaedah pelaburan yang sangat mudah, yang tidak mengejar keuntungan yang berlebihan, tetapi keuntungan yang kukuh. Berbeza dengan strategi trend, strategi imbangan dinamik adalah pergerakan ke belakang. Sebaliknya, strategi imbangan dinamik adalah sebaliknya, menurunkan kadar semasa pasaran panas, dan meningkatkan kadar turun naik semasa pasaran sejuk, agak mirip dengan pengawalan makroekonomi.

Sebenarnya, strategi imbangan dinamik adalah idea harga yang tidak dapat diramalkan, tetapi juga satu teknik untuk menangkap turun naik harga. Inti utama strategi imbangan dinamik adalah menetapkan dan menyesuaikan peratusan peruntukan aset, dan juga memicu ambang nilai. Oleh kerana alasan yang luas, satu artikel tidak dapat melakukan semua itu secara langsung, hanya perlu mengetahui secara lisan.

Akhirnya, mari kita selesaikan dengan kata-kata terkenal Benjamin Graham dalam bukunya Investor Yang Pintar:Pasaran saham bukan 'timbalan' yang dapat mengukur nilai dengan tepat, sebaliknya ia adalah'mesin pengundian' di mana keputusan yang dibuat oleh orang yang tidak terhitung jumlahnya adalah campuran rasional dan emosi, dan banyak kali pilihan dan penilaian nilai rasional jauh berlawanan.Benjamin Graham, seorang pelabur yang bijak


Berkaitan

Lebih lanjut