avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Strategi keseimbangan dinamik berdasarkan mata wang digital

Dicipta dalam: 2020-03-03 10:17:43, dikemas kini pada: 2023-10-09 22:49:27
comments   3
hits   3707

Strategi keseimbangan dinamik berdasarkan mata wang digital

I. Rumusan

Mentor Warren Buffett Benjamin Graham pernah menyebut model perdagangan keseimbangan dinamik antara saham dan bon dalam bukunya “The Intelligent Investor”. Strategi keseimbangan dinamik berdasarkan mata wang digital Model dagangan ini sangat mudah:

  • Laburkan 50% daripada wang anda dalam dana saham dan baki 50% dalam dana bon. Iaitu, saham dan bon masing-masing menyumbang separuh.
  • Mengimbangi semula aset pada selang masa tetap atau berdasarkan perubahan pasaran untuk memulihkan nisbah aset saham kepada aset bon kepada 1:1 awal. Ini adalah logik keseluruhan strategi, termasuk masa untuk membeli dan menjual, dan berapa banyak untuk membeli dan menjual. Cukup mudah!

2. Prinsip keseimbangan dinamik

Dalam kaedah ini, turun naik dana bon sebenarnya sangat kecil, jauh lebih rendah daripada turun naik saham, jadi bon digunakan sebagai “sauh rujukan” di sini, iaitu, menggunakan bon untuk mengukur sama ada saham telah meningkat terlalu banyak peningkatan yang terlalu sedikit.

Jika harga saham meningkat, nilai pasaran saham akan lebih besar daripada nilai pasaran bon Apabila nisbah nilai pasaran kedua-duanya melebihi ambang yang ditetapkan, jumlah kedudukan akan dilaraskan semula, stok akan dijual, dan. bon akan dibeli untuk menjadikan nisbah nilai pasaran bon saham Kembalikan kepada 1:1 asal.

Sebaliknya, jika harga saham jatuh, nilai pasaran saham akan kurang daripada nilai pasaran bon Apabila nisbah nilai pasaran kedua-duanya melebihi ambang yang ditetapkan, jumlah kedudukan akan diselaraskan untuk membeli saham dan. menjual bon untuk membuat nisbah nilai pasaran bon saham Kembalikan kepada 1:1 asal. Strategi keseimbangan dinamik berdasarkan mata wang digital

Dengan cara ini, dengan mengimbangi nisbah antara saham dan bon secara dinamik, adalah mungkin untuk menikmati hasil pertumbuhan saham dan mengurangkan turun naik aset. Sebagai perintis pelaburan nilai, Graham memberikan kami idea yang baik. Memandangkan ini adalah strategi yang lengkap, mengapa kita tidak menggunakannya pada mata wang kripto?

3. Logik Strategi

Strategi Imbangan Dinamik dalam Blockchain Asset BTC

Logik Strategi

  • Mengikut nilai semasa BTC, baki akaun ialah ¥5000 tunai dan 0.1 BTC, iaitu nisbah awal tunai kepada nilai pasaran BTC ialah 1:1.
  • Jika harga BTC meningkat kepada ¥6000, iaitu nilai pasaran BTC lebih besar daripada baki akaun, dan perbezaan di antara mereka melebihi ambang yang ditetapkan, maka (6000-5000)/6000/2 syiling akan dijual. Ini bermakna BTC telah menghargai dan wang itu boleh ditukar kembali.
  • Jika harga BTC turun kepada ¥4000, iaitu nilai pasaran BTC kurang daripada baki akaun, dan perbezaan di antara mereka melebihi ambang yang ditetapkan, kemudian beli (5000-4000)/4000/2 syiling. Ini bermakna BTC telah susut nilai, jadi beli balik BTC.

Dengan cara ini, tidak kira sama ada BTC naik nilai atau susut nilai, baki akaun dan nilai pasaran BTC sentiasa dikekalkan sama. Jika BTC susut nilai, beli beberapa, dan apabila ia naik semula, jual beberapa, sama seperti baki.

4. Rangka Kerja Strategik

Jadi, bagaimana untuk melaksanakannya dengan kod? Mari kita ambil Platform Dagangan Kuantitatif Pencipta sebagai contoh Pertama, mari kita lihat rangka kerja 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); // 休眠
    }
}

Keseluruhan rangka kerja strategi sebenarnya sangat mudah, dengan fungsi utama, fungsi pesanan 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
}

Logik dagangan pesanan adalah jelas dan semua komen telah ditulis ke dalam kod Anda boleh klik pada gambar untuk membesarkannya.

Proses utama adalah seperti berikut:

  • Dapatkan maklumat akaun.
  • Dapatkan data Tick.
  • Kira sebaran bid-ask pada data semak.
  • Kira perbezaan antara baki akaun dan nilai pasaran BTC.
  • Kira syarat jual beli, harga pesanan dan kuantiti pesanan.
  • Buat pesanan dan kembalikan benar.

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 adalah lebih mudah, langkah-langkahnya adalah seperti berikut:

  • Tunggu 1 saat sebelum membatalkan pesanan Ini adalah masalah dalam beberapa pertukaran, anda tahu.
  • Teruskan mendapatkan susunan pesanan yang tidak dipenuhi Jika pengecualian dikembalikan, teruskan dapatkan.
  • Jika susunan pesanan yang tidak dipenuhi kosong, status pembatalan pesanan dikembalikan serta-merta.
  • Jika terdapat pesanan yang tidak dipenuhi, keseluruhan tatasusunan dilalui dan pesanan dibatalkan satu persatu 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 Strategi keseimbangan dinamik berdasarkan mata wang digital

8. Pengujian Balik Strategi

Seterusnya, mari kita uji strategi keseimbangan dinamik mudah ini untuk melihat sama ada ia berkesan. Berikut adalah ujian belakang pada data sejarah BTC, untuk rujukan anda sahaja.

Persekitaran Ujian Belakang Strategi keseimbangan dinamik berdasarkan mata wang digital

Prestasi Ujian Belakang Strategi keseimbangan dinamik berdasarkan mata wang digital

Keluk ujian belakang Strategi keseimbangan dinamik berdasarkan mata wang digital

Berikut ialah satu lagi carta harga BTC untuk tempoh yang sama Strategi keseimbangan dinamik berdasarkan mata wang digital

Semasa tempoh ujian belakang, BTC telah jatuh selama 8 bulan, dengan penurunan maksimum melebihi 70%, yang menyebabkan ramai pelabur hilang keyakinan terhadap aset blockchain. Pulangan kumulatif strategi ini adalah setinggi 160%, dan nisbah risiko pulangan tahunan melebihi 5. Untuk strategi pelaburan yang sebegitu mudah, pulangan pelaburan ini telah melebihi daripada kebanyakan orang yang menyertai semua.

9. Dapatkan kod sumber strategi

Kod sumber strategi telah diumumkan di tapak web rasmi Inventor Quantitative https://www.fmz.com/strategy/110545 Tiada konfigurasi diperlukan untuk ujian balik dalam talian secara langsung.

10. Kesimpulan

Strategi keseimbangan dinamik ini hanya mempunyai satu parameter teras (ambang), iaitu kaedah pelaburan yang sangat mudah yang mengejar pulangan yang stabil dan bukannya pulangan berlebihan. Berbeza dengan strategi aliran, strategi keseimbangan dinamik bertentangan dengan arah aliran. Strategi keseimbangan dinamik adalah sebaliknya Apabila pasaran panas, anda mengurangkan kedudukan untuk menyejukkan, dan apabila pasaran senyap, anda meningkatkan kedudukan dan kekal tidak aktif.

Malah, strategi keseimbangan dinamik adalah kemahiran yang mematuhi konsep bahawa harga tidak dapat diramalkan sambil menangkap turun naik harga. Kunci kepada strategi keseimbangan dinamik ialah menetapkan dan melaraskan nisbah peruntukan aset dan ambang pencetus. Disebabkan kekangan ruang, adalah mustahil untuk sesuatu artikel dapat merangkumi segala-galanya Anda perlu tahu bahawa di luar kata-kata, di sana terletak hati. Perkara yang paling penting mengenai strategi keseimbangan dinamik ialah idea pelaburan Anda juga boleh menggantikan aset BTC tunggal dalam artikel ini dengan sekumpulan aset blockchain.

Akhir sekali, mari kita akhiri artikel ini dengan petikan terkenal dari Benjamin Graham dalam bukunya The Intelligent Investor:Pasaran saham bukanlah “mesin timbang” yang boleh mengukur nilai dengan tepat Sebaliknya, ia adalah “mesin mengundi”. pertimbangan nilai rasional. Rahsia untuk melabur adalah untuk melabur apabila harga jauh di bawah nilai intrinsik dan percaya bahawa trend pasaran akan pulih. ——Benjamin Graham, Pelabur Pintar