Warren Buffett's Mentor Benjamin Graham hat in seinem Buch "Smarter Investor" über ein dynamisch ausgeglichenes Handelsmodell von Aktien und Anleihen gesprochen.Das ist ein sehr einfaches Modell:
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.
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?
Dynamische Ausgleichsstrategien in Blockchain-Assets wie BTC
Strategische Logik
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.
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.
// 下单函数
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:
// 撤单函数
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:
// 回测环境
/*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
Lassen Sie uns nun diese einfache Dynamic Balancing-Strategie testen, um zu sehen, ob sie funktioniert.
Umgebung wiederholen
Wiederholung der Ergebnisse
Rückmessungskurve
Hier ist ein weiteres, gleichzeitiges Diagramm der BTC-Preise.
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.
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.
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.