avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Stratégies de couverture multidevises dans le trading quantitatif d'actifs blockchain

Créé le: 2019-11-04 11:44:15, Mis à jour le: 2023-10-17 21:25:35
comments   0
hits   2670

Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain

Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain

Dans les stratégies de couverture, il existe différents types de couvertures. Couverture inter-marchés, couverture inter-périodes, etc. Aujourd’hui, nous allons parler de la couverture inter-produits, ou plus précisément, des stratégies de couverture inter-devises dans le trading quantitatif d’actifs blockchain. Les actifs sous-jacents des transactions de couverture conventionnelles sont les mêmes, tandis que la couverture de devises croisées implique l’achat et la vente d’actifs sous-jacents différents. Lors de la couverture d’un même produit, nous pouvons utiliser la différence de prix comme prix d’achat et de vente dans la transaction de couverture. Pour la couverture inter-marchés la plus simple du même produit, la différence de prix fluctue de manière répétée dans une certaine fourchette. La couverture multiproduits ne peut absolument pas utiliser les différences de prix comme prix d’achat et de vente, car les différences de prix entre différents produits ne sont pas très intuitives à observer. En général, le ratio de prix est utilisé comme prix d’achat et de vente.

Par exemple: Une paire de trading : LTC_USDT Paire de trading B : ETH_USDT

selonA交易对的价格/B交易对的价格Cette valeur de ratio de prix est utilisée pour disperser les positions d’ouverture. Plus le ratio est élevé, plus nous devons vendre A et acheter B. Au contraire, si le ratio devient plus petit, achetez A et vendez B. La couverture d’un montant égal d’USDT à chaque fois est en fait une stratégie de trading en grille basée sur la force relative des prix de LTC/ETH. La stratégie n’est pas compliquée. Il convient toutefois de noter que cette combinaison de couverture utilise en réalité l’ETH comme devise de prix d’ancrage pour dénommer le LTC. Ce prix ancré peut avoir une tendance unilatérale, bien qu’il puisse fluctuer la plupart du temps. Cependant, ce risque doit être pris en compte et pris en compte.

En utilisant la plateforme de trading quantitative Inventor, il est facile d’écrire un prototype de stratégie : Lorsque le code de stratégie est en cours d’exécution, il doit référencer Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain et Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain 「Bibliothèque de dessins au trait」: https://www.fmz.com/strategy/27293 « Bibliothèque de trading au comptant de crypto-monnaies » : elle est fournie dans la colonne de modèle lorsque chaque utilisateur crée une nouvelle stratégie.

/*backtest
start: 2019-05-01 00:00:00
end: 2019-11-04 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"LTC_USDT","balance":100000,"stocks":30},{"eid":"OKEX","currency":"ETH_USDT","balance":100000,"stocks":30}]
*/

/*
A exchanges[0] : EOS_USDT   
B exchanges[1] : ETH_USDT
*/

var Interval = 500

// 参数
var numPoint = 100        // 节点数
var distance = 0.08       // 比例间距
var amountPoint = 100     // 节点金额,单位USDT
var arrHedgeList = []

function main () {
    var isFirst = true
    while(true) {
        var rA = exchanges[0].Go("GetTicker")
        var rB = exchanges[1].Go("GetTicker")

        var tickerA = rA.wait()
        var tickerB = rB.wait()

        if (tickerA && tickerB) {
            var priceRatioSell = tickerB.Buy / tickerA.Sell     // B sell , A buy
            var priceRatioBuy = tickerB.Sell / tickerA.Buy      // B buy , A sell
            
            if (isFirst) {
                for (var i = 0 ; i < numPoint ; i++) {
                    var point = {
                        priceRatio : priceRatioSell + (i + 1) * distance,
                        coverRatio : priceRatioSell + i * distance,
                        amount : (0.08 * i + 1) * amountPoint,
                        isHold : false,
                    }
                    arrHedgeList.push(point)
                }
                isFirst = false
            }

            for (var j = 0 ; j < arrHedgeList.length; j++) {
                if (priceRatioSell > arrHedgeList[j].priceRatio && arrHedgeList[j].isHold == false) {
                    // B sell , A buy
                    Log("对冲,价格比", priceRatioSell, "#FF0000")
                    $.Buy(exchanges[0], arrHedgeList[j].amount / tickerA.Sell)
                    $.Sell(exchanges[1], arrHedgeList[j].amount / tickerB.Buy)
                    arrHedgeList[j].isHold = true
                    LogStatus(_D(), exchanges[0].GetAccount(), "\n", exchanges[1].GetAccount())
                    $.PlotLine("ratio", (priceRatioSell + priceRatioBuy) / 2)
                    break 
                }

                if (priceRatioBuy < arrHedgeList[j].coverRatio && arrHedgeList[j].isHold == true) {    
                    // B buy , A sell
                    Log("对冲,价格比", priceRatioBuy, "#32CD32")
                    $.Sell(exchanges[0], arrHedgeList[j].amount / tickerA.Buy)
                    $.Buy(exchanges[1], arrHedgeList[j].amount / tickerB.Sell)
                    arrHedgeList[j].isHold = false
                    LogStatus(_D(), exchanges[0].GetAccount(), "\n", exchanges[1].GetAccount())
                    $.PlotLine("ratio", (priceRatioSell + priceRatioBuy) / 2)
                    break
                }
            }
        }
        Sleep(Interval)
    }
}

Vous pouvez utiliser le backtesting pour vérifier initialement l’idée de stratégie.

Utilisation des paramètres de backtest par défaut :

Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain

Stratégies de couverture multidevises dans le trading quantitatif d’actifs blockchain

On peut constater que seules quelques dizaines de lignes de code sont nécessaires pour construire une stratégie à partir de ses propres idées. Sur la plateforme de trading quantitatif Inventor, il est très facile de réaliser le prototype d’une idée. D’après le graphique ci-dessus, nous pouvons voir que ce ratio de prix oscille la plupart du temps, mais il existe une certaine tendance. La direction d’optimisation peut être le contrôle de position pendant la couverture ou l’ajout d’une certaine identification de tendance.

En termes de contrôle de position, le montant de couverture de chaque nœud de couverture peut être augmenté de manière incrémentielle, par exemple, dans le code :

if (isFirst) {
    for (var i = 0 ; i < numPoint ; i++) {
        var point = {
            priceRatio : priceRatioSell + (i + 1) * distance,
            coverRatio : priceRatioSell + i * distance,
            amount : (0.08 * i + 1) * amountPoint,          // 每次递增amountPoint的8%
            isHold : false,
        }
        arrHedgeList.push(point)
    }
    isFirst = false
}

Cela permet de concentrer des positions relativement plus lourdes dans des endroits où le ratio de prix est plus élevé, évitant ainsi de prendre des positions trop importantes lorsque le ratio de prix est plus bas. Bien entendu, une telle couverture croisée des produits est très risquée. Si le prix d’une pièce continue d’augmenter par rapport à une autre pièce, des pertes flottantes se produiront. Par conséquent, la couverture croisée des produits nécessite une corrélation plus forte entre les deux produits.

Cette stratégie n’est qu’une DÉMO initiale et peut être ultérieurement modifiée et optimisée.