Les ressources ont été chargées... Je charge...

Série d'investissements quantitatifs sur la chaîne de blocs - stratégie de balance dynamique

Auteur:La bonté, Créé: 2019-03-26 11:52:11, mis à jour:

Originaire: FMZ Quantwww.fmz.com

La "vraie chose" du commerce quantitatif est un lieu de rassemblement où vous pouvez vraiment bénéficier.

N° 1

Le mentor de Warren Buffett, Benjamin Graham, a mentionné dans son livre "L'investisseur intelligent" un modèle de négociation dans lequel les actions et les obligations sont dynamiquement équilibrées.imgCe modèle de négociation est très simple:

50% des fonds en main sont investis dans des fonds d'actions et les 50% restants sont investis dans des fonds obligataires, c'est-à-dire que les actions et les obligations représentent chacune la moitié.

Un rééquilibrage des positions d'actifs basé sur des intervalles fixes ou des variations du marché rétablit le ratio des actifs en actions par rapport aux actifs obligataires à un niveau initial de 1:1.

C'est toute la logique de toute la stratégie, y compris quand acheter et vendre, et combien acheter et vendre.

N° 2

Dans cette méthode, la volatilité des fonds obligataires est en réalité très faible, bien inférieure à la volatilité des actions, de sorte que les obligations sont utilisées ici comme ancres de référence, c'est-à-dire en utilisant des obligations pour mesurer si les stocks augmentent trop ou trop peu.

Si le prix des actions augmente, la valeur marchande de l'action sera supérieure à la valeur marchande de l'obligation. Lorsque le ratio de la valeur marchande de ces deux dépasse le seuil fixé, la position totale sera réajustée, l'action sera vendue et l'obligation sera achetée pour que le ratio valeur d'action à valeur d'obligation revienne à 1:1 initial.

À l'inverse, si le prix des actions chute, la valeur marchande de l'action sera inférieure à la valeur marchande de l'obligation. Lorsque le ratio de la valeur marchande de ces deux dépasse le seuil fixé, la position totale sera réajustée, l'action sera achetée et l'obligation sera vendue afin de ramener le ratio de capitalisation boursière de la valeur de l'obligation à la valeur de l'action à 1:1 initial.imgDe cette façon, le rapport entre l'équilibre dynamique des actions et des obligations est suffisant pour profiter du bénéfice de la croissance des actions et réduire la volatilité des actifs.

Puisque c'est une stratégie complète et mutuelle, pourquoi ne pas l'utiliser sur le marché des crypto-monnaies?

N° 3

Stratégie de balance dynamique des actifs de la chaîne de blocs en BTC

La logique de la stratégie

Selon la valeur actuelle des BTC, le solde du compte est maintenu à 6400 $ en espèces et 1 BTC, c'est-à-dire que le rapport initial de trésorerie à la valeur de marché des BTC est de 1:1.

Si le prix du BTC monte à 7400 $, c'est-à-dire que la valeur marchande du BTC est supérieure au solde du compte et que la différence entre eux dépasse le seuil fixé, alors (7400-6400)/7400/2 pièces sont vendues. Cela signifie que le BTC s'est apprécié et que nous devons échanger l'argent.

Si le prix du BTC tombe à 5400 $, c'est-à-dire que la valeur marchande du BTC est inférieure au solde du compte et que la différence entre eux dépasse le seuil fixé, achetez (6400-5400)/5400/2 pièces. Cela signifie que le BTC s'est déprécié et que nous devons racheter le BTC.

De cette façon, indépendamment du fait que le BTC soit apprécié ou déprécié, le solde du compte et la valeur marchande du BTC sont toujours maintenus dynamiquement égaux.

N° 4

Alors comment l'implémenter avec du code de programmation?

Prenons l'exemple de la plateforme de négociation quantitative FMZ.

// strategy parameter
var threshold = 0.05; // Threshold
var LoopInterval = 60; // Polling interval(seconds)
var MinStock = 0.001; // Minimum transaction volume
var XPrecision = 4; // Quantity accuracy
var ZPrecision = 8; // Price accuracy

// Withdrawal order function
function CancelPendingOrders() {

}

// Placing Order function
function onTick() {

}

// Main function
function main() {
    // Filter non-critical information
    SetErrorFilter("GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout");
    while (true) { // Polling mode
        if (onTick()) { // Execute the onTick function
            CancelPendingOrders(); // Cancel unexecuted pending orders
        }
        Sleep(LoopInterval * 1000); // Sleep
    }
}

L'ensemble du cadre de stratégie est en fait très simple, une fonction main, une fonction onTick de placement des commandes, une fonction CancelPendingOrders et les paramètres nécessaires.

N° 5

Module de commande

// Placing Order function
function onTick() {
    var acc = _C(exchange.GetAccount); // Get account information
    var ticker = _C(exchange.GetTicker); // Get Tick data
    var spread = ticker.Sell - ticker.Buy; // Get the bid-ask spread of Tick data
    // 0.5 times the difference between the account balance and the current position value
    var diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2;
    var ratio = diffAsset / acc.Balance; // diffAsset / Account Balance
    LogStatus('ratio:', ratio, _D()); // Print ratio and current time
    if (Math.abs(ratio) < threshold) { // If the absolute value of ratio is less than the specified threshold
        return false; // return false
    }
    if (ratio > 0) { // If ratio is greater than 0
        var buyPrice = _N(ticker.Sell + spread, ZPrecision); // Calculate the order price
        var buyAmount = _N(diffAsset / buyPrice, XPrecision); // Calculate the order quantity
        if (buyAmount < MinStock) { // If the order quantity is less than the minimum transaction volume
            return false; // return false
        }
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio); // Buy order
    } else {
        var sellPrice = _N(ticker.Buy - spread, ZPrecision); // Calculate the order price
        var sellAmount = _N(-diffAsset / sellPrice, XPrecision); // Calculate the order quantity
        if (sellAmount < MinStock) { // If the order quantity is less than the minimum transaction volume
            return false; // return false
        }
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio); // Sell order
    }
    return true; // return true
}

La logique de la transaction de commande est claire, et tous les commentaires ont été écrits dans le code.

Le processus principal est le suivant:

Obtenez des informations sur le compte.

Prends les données de Tick.

Calculer l'écart entre les prix d'achat et les prix d'achat des données Tick.

Calculer le solde du compte et l'écart de valeur marchande des BTC.

Calculer la condition de déclenchement de la négociation, le prix de l'ordre et la quantité de l'ordre.

Faites une commande et retournez vraie.

N° 6

Annuler le module de commande en attente

// Withdrawal order function
function CancelPendingOrders() {
    Sleep(1000); // Sleep 1 second
    var ret = false;
    while (true) {
        var orders = null;
        // Continue to get an array of unexecuted orders, if an exception is returned, continue to get
        while (!(orders = exchange.GetOrders())) {
            Sleep(1000); // Sleep 1 second
        }
        if (orders.length == 0) { // If the order array is empty
            return ret; // Return to withdrawal status
        }
        for (var j = 0; j < orders.length; j++) { // Traversing the array of unexecuted orders
            exchange.CancelOrder(orders[j].Id); // Cancel unexecuted orders one by one
            ret = true;
            if (j < (orders.length - 1)) {
                Sleep(1000); // Sleep 1 second
            }
        }
    }
}

Le module annuler les commandes en attente est encore plus simple, les étapes sont les suivantes:

Attendez une seconde avant de retirer la commande, car certaines bourses peuvent avoir des retards de serveur.

Continuez à obtenir une série d'ordres non exécutés, et si une exception est renvoyée, continuez à essayer jusqu'à ce qu'elle réussisse.

Si le tableau des ordres non exécutés est vide, il renvoie immédiatement l'état de retrait.

S'il y a des ordres non exécutés, l'ensemble du tableau est parcouru et l'ordre est retiré en fonction de l'identifiant d'ordre.

N° 7

Cette stratégie est le code source de la programmationimg imgSur la plate-forme de trading quantitative FMZ, avec seulement 80 lignes de code, une stratégie d'équilibrage dynamique blockchain BTC complète a été construite avec succès.

N° 8

Ensuite, testons cette simple stratégie d'équilibrage dynamique pour voir si elle fonctionne.

Environnement de contre-testimgPerformances des essais antérieursimgCourbe de test à l'enversimgUn autre, le même graphique de prix BTC de la périodeimgÇa vous choque?

Le BTC a poursuivi sa baisse de huit mois, et même la plus forte baisse a dépassé 70%, ce qui a fait perdre confiance à de nombreux investisseurs dans les actifs blockchain.

Le revenu cumulé de cette stratégie est aussi élevé que 160%, et le ratio annualisé de retour sur risque dépasse 5. Pour une stratégie de trading aussi simple, ce retour sur investissement a dépassé la majorité des types de joueurs All-in.

N° 9

Cette stratégie d'équilibrage, avec un seul paramètre de base (valeur seuil), est une méthode d'investissement très simple qui ne vise pas des rendements excédentaires mais des bénéfices solides.

Contrairement à la stratégie de tendance, la stratégie d'équilibre dynamique est contre la tendance. Cette stratégie consiste à réduire la position et à se refroidir lorsque le marché est trop chaud. Lorsque le marché est désert, il sera caché, ce qui est similaire à la régulation macroéconomique.

En effet, la stratégie d'équilibrage dynamique repose sur l'idée que le prix est imprévisible, tout en captant les fluctuations de prix.

Compte tenu de la longueur de l'article, il est impossible pour un article d'être complet sur tout. Comme le dit un vieil adage Donnez à un homme un poisson et vous le nourrissez pour une journée. Apprenez à un homme à pêcher et vous le nourrissez pour toute une vie.. La chose la plus importante à propos de la stratégie de balance dynamique est l'idée d'investissement. Vous pouvez même remplacer les actifs BTC individuels dans cet article par un panier de portefeuilles d'actifs blockchain.imgEnfin, terminons cet article par un paragraphe du célèbre livre de Benjamin Graham <>:

Le marché boursier n'est pas un "piseur" qui mesure avec précision la valeur. Au contraire, c'est une "machine à voter". Les décisions prises par d'innombrables personnes sont un dopant rationnel et émotionnel. Il y a beaucoup de fois où ces choix sont faits.

  • Je suis Benjamin Graham.

Pour copier directement le code source, veuillez visiter notre place de stratégie à:https://www.fmz.com/strategy/110900

Il y a beaucoup de stratégies que vous pouvez étudier, télécharger, louer ou acheter.

NO.10

À propos de nous

La raison de l'exploitation de ce site est de changer l'état actuel du monde du trading quantitatif où le manque de la vraie chose, où il y a beaucoup d'escroqueries et à peine de communications profondes, et de créer une plateforme d'apprentissage et de communication quantitative plus pure.www.fmz.com)

Si vous pensez que cet article vous a été utile, veuillez le transmettre à votre ami et nous soutenir.

Contactez-nous

Télégramme: FMZ Quant

Votre adresse électronique:henry@fmz.com

Site internet:www.fmz.com


Plus de