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éetLe 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)
}
}
Les paramètres de retouche par défaut:
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.