Dynamische Ausgleichsstrategien auf Basis von digitalen Währungen

Schriftsteller: , Erstellt: 2020-03-03 10:17:43, Aktualisiert: 2023-10-09 22:49:27

img

Erstens: Zusammenfassung

Warren Buffett's Mentor Benjamin Graham hat in seinem Buch "Smarter Investor" über ein dynamisch ausgeglichenes Handelsmodell von Aktien und Anleihen gesprochen.imgDas ist ein sehr einfaches Modell:

  • 50% des Geldes in einem Aktienfonds und die restlichen 50% in einem Anleihenfonds zu investieren.
  • Eine Ausgleichung der Vermögenswerte in Abhängigkeit von einem festen Zeitintervall oder einer Marktänderung führt dazu, dass das Verhältnis von Aktien- und Anleihevermögen wieder auf das ursprüngliche 1:1 ansteigt. Das ist die ganze Logik der Strategie, einschließlich wann und wie viel man kauft.

2. Das Prinzip der dynamischen Balance

In dieser Methode ist die Volatilität von Anleihenfonds sehr gering, viel niedriger als die Volatilität von Aktien, so dass die Anleihen hier als "Bezugsbrücke" betrachtet werden, d.h. sie werden verwendet, um zu messen, ob die Aktien zu viel oder zu wenig verdienen.

Wenn der Aktienpreis steigt und der Marktwert der Aktie größer ist als der der Schuldverschreibung, wird die Gesamtposition angepasst, die Aktien verkauft und die Schuldverschreibung gekauft, so dass der Aktien- und Schuldverschreibungsverhältnis wieder zu 1:1 zurückkehrt.

Stattdessen fallen die Aktienpreise, wodurch der Marktwert der Aktien kleiner ist als der der Anleihen, und wenn der Marktwert des Verhältnisses zwischen den beiden über die festgelegte Schwelle liegt, wird die Gesamtposition umgestellt, die Aktien gekauft und die Anleihen verkauft, so dass der Marktwert des Aktien-Anleihen-Verhältnisses wieder auf den ursprünglichen 1:1 liegt.img

So kann ein dynamisch ausgeglichenes Verhältnis zwischen Aktien und Anleihen die Früchte des Wachstums der Aktien genießen und die Asset Volatilität reduzieren. Als Pionier der Value Investing hat Graham uns eine gute Idee gegeben. Wenn dies eine vollständige Strategie ist, warum nutzen wir sie nicht für digitale Währungen?

3. Strategische Logik

Dynamische Ausgleichsstrategien in Blockchain-Assets wie BTC

Strategische Logik

  • Nach dem aktuellen Wert von BTC behalten die Kontostände 5000 Yen an Bargeld und 0,1 BTC, d. h. ein anfängliches Verhältnis von Bargeld und BTC-Marktwert von 1:1.
  • Wenn der BTC-Preis auf 6000 Yen steigt, d.h. der BTC-Marktwert größer ist als der Kontostand, und die Differenz zwischen den beiden über die gesetzte Schwelle liegt, verkaufen Sie (< 6000-5000) /6000/2 Münzen.
  • Wenn der BTC-Preis auf ¥ 4000 sinkt, d.h. der BTC-Marktwert kleiner ist als der Kontostand, und die Differenz zwischen den beiden über dem festgelegten Schwellenwert liegt, kauft man ¥ 5000-4000/4000/2.

So bleibt der Kontostand unabhängig davon, ob BTC ansteigt oder abwertet, stets gleich dem Marktwert von BTC. Wenn BTC abwertet, kauft man etwas und verkauft etwas, bis es zurückkommt, so wie es normal ist.

Viertens, ein strategisches Rahmenwerk.

Wie kann man das also mit Code erreichen? Nehmen wir das Beispiel der Erfinder von Quantitative Trading Plattformen und lassen Sie uns zuerst einen strategischen Rahmen betrachten:

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

Das ganze Strategie-Framework ist sehr einfach, mit einer Hauptfunktion, einer Unterfunktion von onTick, einer CancelPendingOrders-Funktion und den notwendigen Parametern.

Fünf, die Module unten.

// 下单函数
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 Transaktionslogik ist klar und alle Anmerkungen sind in den Code geschrieben.

Die wichtigsten Prozesse sind:

  • Erhalten Sie Informationen über Ihr Konto.
  • Erhalten Sie Tick-Daten.
  • Tick-Daten berechnen den Kauf- und Verkaufspreis.
  • Berechnen Sie die Differenz zwischen dem Kontostand und dem BTC-Marktwert.
  • Es gibt viele Möglichkeiten, wie man die Verkaufsbedingungen, den Preis und die Menge berechnet.
  • Sie wird dann nach unten gesammelt und gibt true zurück.

6. Modul zur Rücknahme

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

Die Module können einfach abgerufen werden, wie folgt:

  • Es gibt eine Reihe von Anwendungen, bei denen die Zahlung von Geld an die Banken erfolgt.
  • Erhält weiterhin die Array der ausstehenden Bestellungen, wenn eine Ausnahme zurückkehrt.
  • Wenn die Array der nicht abgewickelten Bestellungen leer ist, kehrt sie sofort in den Abhebungsstatus zurück.
  • Wenn es noch eine Bestellung gibt, geht es durch die gesamte Matrix und wird nach der Bestellnummer abgezogen.

Sieben, der vollständige 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); // 休眠
    }
}

Äußere Parameter img

8. Strategische Rückprüfung

Lassen Sie uns nun diese einfache Dynamic Balancing-Strategie testen, um zu sehen, ob sie funktioniert.

Umgebung wiederholen img

Wiederholung der Ergebnisse img

Rückmessungskurve img

Hier ist ein weiteres, gleichzeitiges Diagramm der BTC-Preise.img

In der Berichtsperiode ist BTC seit 8 Monaten im Rückgang und hat sogar einen Höchstwert von mehr als 70% erreicht, was viele Investoren an Vertrauen in Blockchain-Assets verloren hat. Die Strategie hat eine kumulative Ertragsrate von 160% und ein jährliches Ertragsrisiko von mehr als 5%. Für eine so einfache Investitionsstrategie ist die Rendite bereits über die meisten Hip-Hop-Menschen hinaus.

9. Erhalten Sie den Quellcode der Strategie

Der Quellcode der Strategie ist auf der Website der Erfinder quantifiziert.https://www.fmz.com/strategy/110545Sie müssen nicht direkt online überprüft werden.

10. Zusammenfassung

Die Dynamic Balance Strategy ist eine sehr einfache Anlagemethode mit nur einem zentralen Parameter, nämlich der Schwellenwertsteigerung. Sie zielt nicht auf übermäßige, sondern auf solide Erträge ab. Im Gegensatz zur Trendstrategie ist die Dynamic Balance Strategy gegenwärtig.

In der Tat ist die Dynamic Balancing Strategy genau die Idee, dass Preise unvorhersehbar sind, und gleichzeitig eine Handlung, um die Preisschwankungen zu erfassen. Das zentrale Kernstück der Dynamic Balancing Strategy ist die Festlegung und Anpassung der Vermögensverteilung und die Auslösung von Schwellenwerten. Aufgrund der Größe des Artikels kann ein Artikel nicht alles von Angesicht zu Angesicht tun.

Abschließend wollen wir mit einem berühmten Zitat von Benjamin Graham aus seinem Buch "The Brilliant Investor" enden:Der Aktienmarkt ist nicht eine "Wachsalon", mit der man seinen Wert genau messen kann, sondern vielmehr eine "Wahlmaschine", in der die Entscheidungen unzähliger Menschen eine Mischung aus Vernunft und Gefühl sind, die oft weit voneinander entfernt sind. Das Geheimnis der Investition besteht darin, zu investieren, wenn der Preis weit unter dem Eigenwert liegt, und zu glauben, dass sich der Markt entwickelt.Benjamin Graham ist ein kluger Investor.


Verwandt

Mehr