avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Dynamische Bilanzstrategie basierend auf digitaler Währung

Erstellt in: 2020-03-03 10:17:43, aktualisiert am: 2023-10-09 22:49:27
comments   3
hits   3707

Dynamische Bilanzstrategie basierend auf digitaler Währung

I. Zusammenfassung

Warren Buffetts Mentor Benjamin Graham erwähnte in seinem Buch „Der intelligente Investor“ einmal ein Handelsmodell mit dynamischem Gleichgewicht zwischen Aktien und Anleihen. Dynamische Bilanzstrategie basierend auf digitaler Währung Dieses Handelsmodell ist sehr einfach:

  • Investieren Sie 50 % Ihres Geldes in Aktienfonds und die restlichen 50 % in Anleihenfonds. Das heißt, Aktien und Anleihen machen jeweils die Hälfte aus.
  • Passen Sie die Vermögenswerte in festgelegten Abständen oder auf der Grundlage von Marktveränderungen an, um das Verhältnis von Aktienvermögen zu Anleihevermögen auf das ursprüngliche Verhältnis von 1:1 zurückzusetzen. Dies ist die gesamte Logik der Strategie, einschließlich der Frage, wann gekauft und verkauft werden soll und wie viel gekauft und verkauft werden soll. Ganz einfach!

2. Dynamisches Gleichgewichtsprinzip

Bei dieser Methode ist die Volatilität von Anleihefonds tatsächlich sehr gering, viel niedriger als die Volatilität von Aktien, so dass Anleihen hier als „Referenzanker“ verwendet werden, d. h. Anleihen werden verwendet, um zu messen, ob die Aktien zu stark gestiegen sind. Es ist immer noch zu wenig Anstieg.

Wenn der Aktienkurs steigt, ist der Marktwert der Aktie höher als der Marktwert der Anleihe. Wenn das Marktwertverhältnis der beiden den festgelegten Schwellenwert überschreitet, wird die Gesamtposition neu angepasst, die Aktie wird verkauft und Die Anleihe wird gekauft, um das Marktwertverhältnis zwischen Aktien und Anleihen wiederherzustellen und den ursprünglichen Wert von 1:1 zu erreichen.

Im Gegenteil, wenn der Aktienkurs fällt, ist der Marktwert der Aktie geringer als der Marktwert der Anleihe. Wenn das Marktwertverhältnis der beiden den festgelegten Schwellenwert überschreitet, wird die Gesamtposition neu angepasst, um Aktien zu kaufen und Verkaufen Sie Anleihen, um das Marktwertverhältnis zwischen Aktien und Anleihen wieder auf den ursprünglichen Wert von 1:1 zu bringen. Dynamische Bilanzstrategie basierend auf digitaler Währung

Auf diese Weise ist es durch einen dynamischen Ausgleich des Verhältnisses zwischen Aktien und Anleihen möglich, die Früchte des Aktienwachstums zu genießen und die Volatilität der Vermögenswerte zu reduzieren. Als Pionier des Value Investing gibt uns Graham eine gute Idee. Da es sich hierbei um eine umfassende Strategie handelt, warum wenden wir sie nicht auf Kryptowährungen an?

3. Strategielogik

Dynamische Balance-Strategie im Blockchain-Asset BTC

Strategielogik

  • Entsprechend dem aktuellen Wert von BTC beträgt der Kontostand 5.000 ¥ in bar und 0,1 BTC, das heißt, das anfängliche Verhältnis von Bargeld zum BTC-Marktwert beträgt 1:1.
  • Wenn der Preis von BTC auf 6000 ¥ steigt, das heißt, der Marktwert von BTC höher ist als der Kontostand und die Differenz zwischen beiden den festgelegten Schwellenwert überschreitet, werden (6000-5000)/6000/2 Münzen verkauft. Dies bedeutet, dass BTC an Wert gewonnen hat und das Geld zurückgetauscht werden kann.
  • Wenn der Preis von BTC auf ¥4000 fällt, das heißt, der Marktwert von BTC geringer ist als der Kontostand und die Differenz zwischen beiden den festgelegten Schwellenwert überschreitet, dann kaufen Sie (5000-4000)/4000/2 Münzen. Dies bedeutet, dass BTC an Wert verloren hat. Kaufen Sie BTC also zurück.

Auf diese Weise bleiben der Kontostand und der Marktwert von BTC immer gleich, unabhängig davon, ob BTC im Wert steigt oder fällt. Wenn der Wert von BTC sinkt, kaufen Sie einen Teil, und wenn der Wert wieder steigt, verkaufen Sie einen Teil, genau wie bei einem Guthaben.

4. Strategischer Rahmen

Also, wie implementiert man es mit Code? Nehmen wir als Beispiel die Inventor Quantitative Trading Platform. Schauen wir uns zunächst den Strategierahmen an:

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

Der gesamte Strategierahmen ist eigentlich sehr einfach und besteht aus einer Hauptfunktion, einer OnTick-Order-Funktion, einer CancelPendingOrders-Funktion und den erforderlichen Parametern.

5. Bestellmodul

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

Die Orderhandelslogik ist klar und alle Kommentare wurden in den Code geschrieben. Sie können auf das Bild klicken, um es zu vergrößern.

Der Hauptprozess ist wie folgt:

  • Kontoinformationen abrufen.
  • Holen Sie sich Tick-Daten.
  • Berechnen Sie die Geld-Brief-Spanne anhand der Tick-Daten.
  • Berechnen Sie die Differenz zwischen Kontostand und BTC-Marktwert.
  • Berechnen Sie Kauf- und Verkaufsbedingungen, Bestellpreis und Bestellmenge.
  • Geben Sie eine Bestellung auf und geben Sie den Betrag zurück.

6. Modul zur Auftragsstornierung

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

Das Modul zur Auftragsstornierung ist noch einfacher. Die Schritte sind wie folgt:

  • Warten Sie 1 Sekunde, bevor Sie die Bestellung stornieren. Das ist bei manchen Börsen ein Problem, wissen Sie.
  • Fahren Sie mit dem Abrufen des Arrays nicht ausgeführter Bestellungen fort. Wenn eine Ausnahme zurückgegeben wird, fahren Sie mit dem Abrufen fort.
  • Wenn das Array der nicht erfüllten Bestellungen leer ist, wird der Status der Bestellstornierung sofort zurückgegeben.
  • Wenn nicht erfüllte Aufträge vorhanden sind, wird das gesamte Array durchlaufen und die Aufträge werden entsprechend der Auftragsnummer nacheinander storniert.

7. Vollständiger Strategie-Quellcode

// 回测环境
/*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); // 休眠
    }
}

Externe Parameter Dynamische Bilanzstrategie basierend auf digitaler Währung

8. Strategie-Backtesting

Als Nächstes testen wir diese einfache dynamische Ausgleichsstrategie, um zu sehen, ob sie funktioniert. Nachfolgend finden Sie einen Backtest der historischen BTC-Daten, der ausschließlich zu Ihrer Information dient.

Backtesting-Umgebung Dynamische Bilanzstrategie basierend auf digitaler Währung

Backtest-Performance Dynamische Bilanzstrategie basierend auf digitaler Währung

Backtest-Kurve Dynamische Bilanzstrategie basierend auf digitaler Währung

Hier ist ein weiteres BTC-Preisdiagramm für den gleichen Zeitraum Dynamische Bilanzstrategie basierend auf digitaler Währung

Während des Backtest-Zeitraums ist der BTC-Kurs acht Monate lang gefallen, wobei der maximale Rückgang 70 % überstieg, was dazu geführt hat, dass viele Anleger das Vertrauen in Blockchain-Assets verloren haben. Die kumulierte Rendite dieser Strategie beträgt bis zu 160 %, und das annualisierte Rendite-Risiko-Verhältnis liegt bei über 5. Für eine so einfache Anlagestrategie übertrifft diese Kapitalrendite die der überwiegenden Mehrheit der Leute, die alles auf eine Karte setzen.

9. Holen Sie sich den Strategie-Quellcode

Der Quellcode der Strategie wurde auf der offiziellen Website von Inventor Quantitative veröffentlicht: https://www.fmz.com/strategy/110545. Für das direkte Online-Backtesting ist keine Konfiguration erforderlich.

10. Fazit

Diese dynamische Balance-Strategie hat nur einen Kernparameter (Schwellenwert). Dabei handelt es sich um eine sehr einfache Anlagemethode, die stabile Renditen statt Überrenditen anstrebt. Im Gegensatz zur Trendstrategie geht die dynamische Balancestrategie gegen den Trend. Die dynamische Balance-Strategie ist genau das Gegenteil. Wenn der Markt heiß ist, reduzieren Sie Ihre Positionen, um ihn abzukühlen, und wenn der Markt ruhig ist, erhöhen Sie Ihre Positionen und bleiben inaktiv. Sie ähnelt in gewisser Weise der makroökonomischen Regulierung.

Tatsächlich handelt es sich bei der dynamischen Bilanzstrategie um eine Fähigkeit, die dem Konzept der Unvorhersehbarkeit von Preisen folgt, während Preisschwankungen erfasst werden. Der Schlüssel zur dynamischen Balance-Strategie liegt in der Festlegung und Anpassung der Vermögensallokationsquote und des Auslöseschwellenwerts. Aus Platzgründen ist es unmöglich, in einem Artikel alles abzudecken. Sie müssen wissen, dass hinter den Worten das Herz liegt. Das Wichtigste an der dynamischen Balance-Strategie ist die Anlageidee. Sie können das einzelne BTC-Asset in diesem Artikel sogar durch einen Korb von Blockchain-Assets ersetzen.

Abschließend möchten wir diesen Artikel mit einem berühmten Zitat von Benjamin Graham aus seinem Buch Der intelligente Investor beenden:Die Börse ist keine „Waagemaschine“, die Werte genau messen kann. Stattdessen ist sie eine „Wahlmaschine“. Die Entscheidungen unzähliger Menschen sind eine Mischung aus Rationalität und Emotionen. Oft sind diese Entscheidungen weit davon entfernt, rationales Werturteil. Das Geheimnis des Investierens liegt darin, zu investieren, wenn die Preise weit unter dem inneren Wert liegen, und darauf zu vertrauen, dass sich der Markttrend erholt. ——Benjamin Graham, Der intelligente Investor