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érenceet
/*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)
}
}
Utilisez les paramètres de backtesting par défaut:
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.