Benjamin Graham, le mentor de Warren Buffett, a mentionné un modèle de négociation de l'équilibre dynamique des actions et des obligations dans son livre L'investisseur intelligent.Le modèle de transaction est très simple:
Dans cette approche, les taux de volatilité des fonds obligataires sont en fait très faibles, bien inférieurs à ceux des actions, de sorte que les obligations sont considérées ici comme des "paras de référence", c'est-à-dire que les obligations sont utilisées pour mesurer si les actions gagnent trop ou trop peu.
Si une hausse du prix d'une action rend la valeur marchande de cette dernière plus élevée que celle de la dette, le ratio entre les deux est révisé lorsque la valeur marchande est supérieure au seuil fixé.
En revanche, une baisse du prix des actions rend la valeur marchande des actions inférieure à celle des obligations, et lorsque le ratio entre les deux est supérieur au seuil fixé, la position globale est révisée, les actions achetées et les obligations vendues, ramenant le ratio entre les actions et les obligations à 1:1.
Ainsi, en équilibrant dynamiquement les ratios entre les actions et les obligations, on peut profiter des fruits de la croissance des actions et réduire la volatilité des actifs. Graham nous a donné une bonne idée en tant que pionnier de l'investissement en valeur. Puisque c'est une stratégie complète, pourquoi ne pas l'utiliser avec la monnaie numérique?
Stratégie d'équilibrage dynamique dans les actifs de la blockchain BTC
La logique stratégique
De cette façon, que BTC soit valorisé ou dévalué, le solde de compte est toujours dynamiquement égal à la valeur marchande de BTC. Si BTC est dévalué, achetez-en un peu, puis vendez-en un peu, comme si c'était normal.
Alors, comment le faire avec du code? Prenons l'exemple de la plateforme de trading quantitative inventée par les inventeurs, voyons d'abord le cadre stratégique:
// 撤单函数
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); // 休眠
}
}
L'ensemble du cadre de stratégie est en fait très simple, avec une fonction principale, une fonction de sous-menu onTick, une fonction CancelPendingOrders et les paramètres nécessaires.
// 下单函数
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
}
La logique de transaction est claire, toutes les annotations sont écrites dans le code, cliquez sur l'image pour l'agrandir.
Les principaux processus sont les suivants:
// 撤单函数
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秒
}
}
}
}
Il est plus facile de retirer les modules en suivant les étapes suivantes:
// 回测环境
/*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); // 休眠
}
}
Paramètres extérieurs
Maintenant, essayons cette simple stratégie d'équilibrage dynamique et voyons si cela fonctionne. Voici un résumé des données historiques de BTC, à titre de référence.
Résultats du test
Résultats des tests
La courbe de recul
Encore une fois, le graphique de la tendance du prix du BTC en même temps.
Au cours de la période d'évaluation, BTC a connu une baisse de plus de 8 mois, avec une baisse maximale de plus de 70%, ce qui a conduit de nombreux investisseurs à perdre confiance dans les actifs de la blockchain. Cette stratégie a un rendement cumulé de 160% et un risque de rendement annuel de plus de 5%. Pour une stratégie d'investissement aussi simple, le retour sur investissement est déjà supérieur à la majorité des hippies.
Le code source de la stratégie est disponible sur le site Web de l'inventeur.https://www.fmz.com/strategy/110545Il n'est pas nécessaire de configurer le test en ligne directement.
Cette stratégie d'équilibrage dynamique, qui ne comporte qu'un seul paramètre central (le seuil de dévaluation), est une méthode d'investissement très simple, qui ne cherche pas à obtenir des gains excessifs, mais à obtenir des gains solides. Contrairement à la stratégie de tendance, la stratégie d'équilibrage dynamique est un mouvement inverse.
En fait, la stratégie d'équilibrage dynamique est une stratégie qui s'appuie sur l'idée de l'imprévisibilité des prix, tout en capturant les fluctuations des prix. Le cœur clé de la stratégie d'équilibrage dynamique est de définir et d'ajuster les ratios d'allocation des actifs et de déclencher des seuils.
Pour finir, terminons par une citation célèbre de Benjamin Graham dans son livre L'Investisseur astucieux:Le marché boursier n'est pas une balance de valeurs, mais plutôt une machine à voter, où les décisions prises par d'innombrables personnes sont un mélange de choix rationnels et émotionnels, souvent très éloignés l'un de l'autre. Le secret de l'investissement est d'investir lorsque les prix sont bien inférieurs à la valeur intrinsèque et de croire que la tendance du marché rebondira.Benjamin Graham est un investisseur brillant.