Stratégies de couverture multi-monnaies dans les transactions quantitatives d'actifs sur la blockchain

Auteur:Le petit rêve, Créé: 2019-11-04 11:44:15, Mis à jour: 2023-10-17 21:25:35

img

Stratégies de couverture multi-monnaies dans les transactions quantitatives d'actifs sur la blockchain

Dans les stratégies de couverture, il existe différents types de couverture. Les couvertures intermarchés, les couvertures intertemporelles, etc. Aujourd'hui, nous allons parler de couverture intervariété, c'est-à-dire des couvertures intermonnaies dans les transactions quantitatives d'actifs de la chaîne de blocs. Les objets indiqués dans les transactions de couverture habituelles sont les mêmes, tandis que les couvertures intermonnaies sont des objets achetés et vendus à des prix différents.

Par exemple: A est la paire de transactions: LTC_USDT La paire B est: ETH_USDT

SelonA交易对的价格/B交易对的价格Cette proportion de prix est numérique, une position dispersée. Cette proportion plus grande, plus nous vendons A et achetons B. La règle inverse change, achetons A et vendons B. Un montant USDT équivalent à chaque couverture est en fait une stratégie pour négocier sur la grille à un prix faible par rapport à LTC/ETH. La stratégie n'est pas compliquée.

Il est facile d'écrire un prototype de stratégie à l'aide de la plate-forme de négociation quantitative de l'inventeur: Le code stratégique doit être cité pour être exécutéimgetimgLe projet de la bibliothèque de lignes:https://www.fmz.com/strategy/27293"La bibliothèque des transactions instantanées de crypto-monnaies": ceci est une liste de modèles que chaque utilisateur apporte avec lui lorsqu'il 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)
    }
}

Nous pouvons vérifier les idées stratégiques dès le début en faisant des retouches.

Les paramètres de retouche par défaut:

img

img

On peut voir qu'en utilisant seulement quelques dizaines de lignes de code, il est très facile de construire sa propre stratégie d'idée, et il est très facile de réaliser un prototype d'idée.

Le contrôle des positions permet d'augmenter le montant de la couverture de chaque nœud de couverture, 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 les positions relativement plus lourdes sur les positions où le prix est plus élevé, et d'éviter de prendre des positions trop grandes lorsque le prix est plus bas. Bien sûr, une telle couverture intergénérationnelle est risquée, et si le prix d'une devise continue de monter par rapport à l'autre, elle entraîne une baisse, de sorte qu'une couverture intergénérationnelle nécessite une correlation plus forte des deux variétés.

Cette stratégie n'est qu'une première démonstration et peut continuer à être modifiée et optimisée.


Relationnée

Plus de