Stratégies de couverture par devises dans le cadre de la négociation quantitative d'actifs de la chaîne de blocs

Auteur:Je ne sais pas., Créé: 2022-12-27 10:11:48, Mis à jour: 2023-09-20 10:02:24

img

Stratégies de couverture par devises dans le cadre de la négociation quantitative d'actifs de la chaîne de blocs

Dans les stratégies de couverture, il existe différents types de couverture: couverture cross-marché, couverture cross-période, etc. Aujourd'hui, nous allons parler de couverture cross-monnaie, qui est précisément la stratégie de couverture cross-monnaie dans le commerce quantitatif d'actifs blockchain. En général, l'objet d'une transaction de couverture est le même, tandis que la couverture cross-monnaie implique l'achat et la vente d'un sujet différent. Lors de la couverture de la même variété, nous pouvons utiliser la différence de prix comme le prix d'achat et de vente dans la transaction de couverture. Pour la couverture cross-marché la plus simple de la même variété, la différence de prix fluctue à plusieurs reprises dans une certaine plage. La différence de prix ne peut pas être utilisée comme prix d'achat et de vente pour la couverture cross-monnaie, car la différence de prix des différentes devises n'est pas très intuitive à observer, et le rapport de prix est généralement utilisé comme prix d'

Par exemple: Parie de négociation A: LTC_USDT Paire de négociation B: ETH_USDT

Distribuer les positions d'ouverture selon la valeur du rapport de prix dePrice of Trading pair A/Price of Trading pair B. Plus la proportion est grande, plus nous vendrons A et achèterons B. Si la proportion diminue, achetez A et vendez B. Le montant USDT équivalent de chaque couverture est en fait une stratégie pour le trading sur la grille basée sur le prix relatif de LTC/ETH. L'idée de stratégie n'est pas compliquée. Cependant, il convient de noter que ce type de portefeuille de couverture utilise en fait ETH comme monnaie de prix d'ancrage pour le prix de LTC. Le prix d'ancrage est susceptible de sortir de la tendance unilatérale. Bien que la plupart du temps il puisse s'agir d'une tendance volatile, ce risque doit être considéré et noté.

Il est facile d'écrire un prototype de stratégie en utilisant la plateforme de trading FMZ Quant: Lorsque le code de stratégie est exécuté, il doit faire référenceimgetimgPlot bibliothèque:https://www.fmz.com/strategy/27293Bibliothèque de négociation au comptant de devises numériques: Ceci est fourni avec la barre de modèles 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

// parameters
var numPoint = 100        // Number of nodes
var distance = 0.08       // Proportional distance
var amountPoint = 100     // Node amount in 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("Hedging, price ratio", 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("hedge, price ratio", 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)
    }
}

Grâce au backtesting, nous pouvons initialement vérifier les idées stratégiques

Utilisez les paramètres de backtesting par défaut:

img img

On peut voir que seules quelques dizaines de lignes de code ont été utilisées pour construire une stratégie de vos propres idées. Il est très facile de mettre en œuvre un prototype d'idées sur la plateforme de trading FMZ Quant. Selon la figure ci-dessus, cette proportion de prix fluctue la plupart du temps, mais il y aura 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, vous pouvez augmenter le montant de couverture de chaque nœud de couverture.

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,          // 8% of amountPoint per increment
            isHold : false,
        }
        arrHedgeList.push(point)
    }
    isFirst = false
}

De cette façon, les positions relativement importantes peuvent être concentrées dans la position ayant une proportion de prix élevée, afin d'éviter de grandes positions occupées lorsque la proportion de prix est faible. Bien sûr, une telle couverture contre les devises croisées est très risquée. Si le prix d'une devise continue d'augmenter par rapport au prix d'une autre devise, des pertes flottantes se produiront. Par conséquent, la couverture contre les devises croisées nécessite une corrélation plus forte entre les deux devises.

Cette stratégie n'est qu'une première démonstration, qui peut être améliorée et optimisée.


Relationnée

Plus de