[TOC]

Récemment, un ami m’a demandé s’il était possible de créer une stratégie d’arbitrage des taux de financement. Par exemple, il existe souvent une incohérence entre les taux de financement des CEX et des DEX, et cette stratégie pourrait exploiter les opportunités d’arbitrage et utiliser l’IA pour déterminer la pertinence d’une prise de position. Cependant, un problème persiste :Il n’existe pas d’outils performants pour détecter les opportunités d’arbitrage.。
Par coïncidence, une personne importante l’a recommandé.VarFundingCette plateforme collecte en temps réel les données de taux de financement de plusieurs plateformes d’échange, dont Binance, Hyperliquid, Lightner et Bybit, toutes référencées sur la plateforme. Plus important encore, en comparant ces données de taux de financement en temps réel, elle propose des combinaisons optimales d’opportunités d’arbitrage.

C’est comme recevoir un oreiller juste au moment où vous avez sommeil ! Aujourd’hui, je vous guiderai pas à pas dans la conception de cette stratégie d’arbitrage des taux de financement.
Avant d’aborder les stratégies, clarifions un point :Qu’est-ce que l’arbitrage de taux de financement exactement ?
Les contrats perpétuels possèdent un mécanisme appeléTaux de financementLes cycles de règlement varient d’une bourse à l’autre ; certains sont de 8 heures, d’autres de 4 heures, et d’autres encore d’une heure.
Les différentes plateformes d’échange présentent des structures d’utilisateurs et une liquidité différentes, ce qui engendre des rapports de force différents entre acheteurs et vendeurs. Par conséquent, les taux de financement d’une même cryptomonnaie varient souvent d’une plateforme à l’autre.
Par exemple, les frais de transaction BTC de la plateforme A sont de…+0.1%L’échange B est+0.05%。
À ce stade, nous pouvons :
En couvrant les positions des deux côtés, les profits et les pertes dus aux fluctuations de prix s’équilibrent, mais la différence de frais (0,05 %) est régulièrement empochée.

Voici la logique fondamentale du financement par arbitrage de taux : vous profitez de la différence de taux, et non des fluctuations de prix.
Ayant compris le principe de l’arbitrage des taux de financement, la question suivante est : comment le mettre en œuvre ?
L’approche traditionnelle consiste à écrire un programme complet, mais cette fois-ci, nous avons choisi d’utiliser…Flux de travailCeci est possible grâce au flux de travail. Le flux de travail présente plusieurs avantages uniques :
Chaque nœud est responsable d’une fonction indépendante : collecte de données, filtrage, évaluation par l’IA et exécution. Chaque nœud a ses propres responsabilités, la logique est claire et le débogage et la modification sont aisés.
Le processus opérationnel de l’ensemble de la stratégie est clair en un coup d’œil, et tout problème à n’importe quelle étape peut être rapidement localisé.
Pour modifier les critères de filtrage ou optimiser la logique transactionnelle, il vous suffit de modifier le nœud correspondant ; vous n’avez pas besoin de toucher aux autres parties.
Les flux de travail prennent naturellement en charge l’appel de modèles volumineux, ce qui facilite grandement la participation de l’IA à la prise de décision.
Pour ce besoinSources de données multiples, traitement en plusieurs étapesPour les stratégies d’arbitrage, le workflow est une méthode de mise en œuvre très adaptée.
Cette stratégie est divisée enDeux lignes principales:


Chacune des deux lignes a ses propres responsabilités : la ligne d’exécution gère la prise de décision et les transactions, tandis que la ligne de collecte de données est responsable du recueil et de la visualisation des données. Cette conception permet une exécution efficace de la stratégie tout en assurant un suivi en temps réel de son état opérationnel.
Cette stratégie nécessite la configuration de plusieurs paramètres clés :
['binance', 'hyperliquid', 'lighter']['high', 'medium', 'low']Nous pouvons paramétrer ces options de manière flexible en fonction de nos propres besoins.
La première étape de cette stratégie consiste à obtenir des données sur les opportunités d’arbitrage. Pour ce faire, on accède à l’API de VarFunding via une requête HTTP, en y transmettant une liste préconfigurée de plateformes d’échange :
const url = `https://varfunding.xyz/api/funding?exchanges=${exchangeList.join(',')}`;
La plateforme fournit les frais de transaction pour toutes les cryptomonnaies sur différentes plateformes d’échange, ainsi que ses combinaisons d’arbitrage optimales calculées. Cependant, en raison du volume important de données brutes, toutes ne sont pas exploitables. La stratégie sera filtrée afin de ne retenir que les opportunités où des positions longues et courtes sont disponibles sur les plateformes d’échange listées dans notre configuration.
const filteredMarkets = data.data.markets.filter(market => {
const bestExchange = market.bestRate?.exchange;
const worstExchange = market.worstRate?.exchange;
return exchangeList.includes(bestExchange) && exchangeList.includes(worstExchange);
});
Les données filtrées seront extraites dans un format concis, ne conservant que les informations clés : paire de devises, marché d’achat, marché de vente, spread de frais, rendement annualisé estimé et niveau de confiance. Ces données seront enregistrées pour une analyse ultérieure des opportunités d’arbitrage.
Disposer d’une seule donnée de taux est insuffisant, car les taux peuvent fluctuer temporairement. C’est pourquoi la stratégie consiste à collecter en continu des instantanés de données, en enregistrant les données de taux actuelles chaque minute et en ne conservant que les données historiques des N dernières heures.
Après avoir accumulé un échantillon suffisant, la stratégie effectuera une analyse statistique pour calculer la fréquence de chaque devise à différents niveaux de confiance :
const stats = {};
for (const snapshot of savedData) {
for (const [baseAsset, info] of Object.entries(snapshot.data)) {
if (!stats[baseAsset]) {
stats[baseAsset] = { high: 0, medium: 0, low: 0, total: 0 };
}
stats[baseAsset].total++;
if (info.confidence === 'high') stats[baseAsset].high++;
// ... 统计其他置信度
}
}
Ensuite, les devises sont classées selon les niveaux de confiance les plus fréquents, et un score pondéré est calculé :
score = (high出现次数 × 3 + medium出现次数 × 2 + low出现次数) / 总次数
Cette notation reflète la stabilité des opportunités d’arbitrage. Plus la notation est élevée, plus l’opportunité a été performante de manière constante sur le plan historique et plus elle est fiable.
Une fois l’analyse des frais terminée, la stratégie vérifiera les positions existantes à l’aide de la liste la plus récente des opportunités d’arbitrage. La logique principale de la détection de la clôture des positions consiste à parcourir toutes les plateformes d’échange afin de déterminer l’état actuel des positions.
function scanAllPositions() {
const allPositions = {};
for (const [exName, exIndex] of Object.entries(EXCHANGE_MAP)) {
const positions = exchanges[exIndex].GetPositions();
for (const pos of positions) {
const baseAsset = pos.Symbol.match(/^([A-Z0-9]+)_/)[1];
const isLong = pos.Amount > 0;
// 记录多空仓位信息
}
}
return allPositions;
}
Déterminez ensuite les postes à fermer. Deux scénarios sont possibles :
Le premier typeLes opportunités d’arbitrage ont disparu. Si la devise correspondante d’une position n’apparaît plus dans la dernière liste d’opportunités d’arbitrage, cela signifie que l’écart de frais s’est réduit et qu’il est conseillé de clôturer votre position pour sécuriser vos gains.
Le deuxième typeLa tendance s’est inversée. Par exemple, si vous aviez auparavant une position longue au point A et une position courte au point B, mais que les positions se sont maintenant inversées, vous devez d’abord clôturer vos anciennes positions.
La fermeture d’une position entraînera la fermeture simultanée des deux positions :
// 平多仓
exchanges[longExIndex].CreateOrder(symbol, "closebuy", -1, amount);
// 平空仓
exchanges[shortExIndex].CreateOrder(symbol, "closesell", -1, amount);
Et faites le point sur les postes vacants afin de vous assurer que les postes expirés sont traités avant de rechercher de nouvelles opportunités.
Après la vérification de la clôture de position, la stratégie effectuera des transactions en temps réel afin de vérifier les opportunités d’arbitrage sélectionnées. Cette vérification comporte deux aspects :
Calculez la différence de prix historique en obtenant les données des graphiques en chandeliers des deux bourses :
// 获取240根K线
const recordsLong = EX_Long.GetRecords(symbol, PERIOD_M1, 240);
const recordsShort = EX_Short.GetRecords(symbol, PERIOD_M1, 240);
// 计算价差
const spreads = [];
for (const time of commonTimes) {
const midPrice = (priceMapLong[time] + priceMapShort[time]) / 2;
const spread = (priceMapLong[time] - priceMapShort[time]) / midPrice;
spreads.push(spread);
}
// 统计指标
const avgSpread = 平均值(spreads);
const range = 最大值(spreads) - 最小值(spreads);
const stdDev = 标准差(spreads);
Ces indicateurs reflètent la cohérence des mouvements de prix entre les deux places boursières. De fortes fluctuations de prix indiquent un risque plus élevé.
Obtenez des données de marché en temps réel et calculez les coûts de transaction :
const tickerLong = EX_Long.GetTicker(symbol);
const tickerShort = EX_Short.GetTicker(symbol);
// 买卖价差(反映深度)
const longSpread = (tickerLong.Sell - tickerLong.Buy) / tickerLong.Last;
const shortSpread = (tickerShort.Sell - tickerShort.Buy) / tickerShort.Last;
// 开仓成本(在Long所买入,Short所卖出)
const openCost = (tickerLong.Sell - tickerShort.Buy) / midPrice;
// 平仓成本(在Short所买入,Long所卖出)
const closeCost = (tickerShort.Sell - tickerLong.Buy) / midPrice;
// 往返总成本
const roundTripCost = openCost + closeCost;
Si les coûts d’ouverture et de fermeture de positions sont trop élevés, ils réduiront les revenus liés aux commissions, et de telles opportunités ne vaudront pas la peine d’être saisies.
Après vérification, si aucune opportunité d’arbitrage n’est disponible dans les données (dataSi l’objet est vide, le processus s’arrête immédiatement. Si une nouvelle opportunité d’entrée se présente, la phase d’évaluation par l’IA commence.
Les chances de réussite de la vérification seront confiées à l’IA pour une évaluation complète. Nous avons utilisé une invite soigneusement conçue pour que l’IA raisonne comme un analyste d’arbitrage professionnel.
L’IA analysera plusieurs dimensions :
La capacité des revenus générés par les commissions à couvrir le risque de fluctuations des écarts de prix est un élément clé du raisonnement.
如果 rateSpread(每8小时收益)> range × 0.3
说明即使价差波动到极端情况,1-2个结算周期就能覆盖风险
Si l’écart moyen est négatif et que la position longue est sur une plateforme d’échange avec un prix inférieur, alors l’ouverture d’une position vous permet d’acheter à un prix moins cher, ce qui constitue une condition favorable à l’ouverture d’une position.
Les volumes d’échanges sur les deux places boursières sont-ils suffisants et l’écart entre le prix d’achat et le prix de vente est-il raisonnable ? Si le volume d’échanges sur 24 heures de l’une ou l’autre place boursière est inférieur à 100 000 $ ou si l’écart entre le prix d’achat et le prix de vente dépasse 0,3 %, la liquidité risque d’être insuffisante.
Les frais d’ouverture et de fermeture de positions peuvent-ils être couverts par les revenus des commissions dans un délai raisonnable ?
如果 roundTripCost < rateSpread × 2
意味着 2 个结算周期(16小时)就能覆盖交易成本
L’IA attribuera une note à chaque opportunité (de 0 à 100 points) et déterminera son niveau de risque (faible, moyen ou élevé). Seules les opportunités dont le score est suffisant seront mises en œuvre. Simultanément, l’IA suggérera un montant d’investissement approprié en fonction du niveau de risque.
Le résultat de l’IA est un tableau JSON, dont chaque élément contient : s’il faut recommander l’ouverture d’une position, une évaluation, le montant recommandé, le niveau de risque et la raison de la décision.
Une fois l’évaluation de l’IA réussie, la stratégie exécutera la position d’ouverture. Le processus d’exécution est très rigoureux :
Calculez le nombre de contrats à ouvrir en fonction du montant d’ouverture suggéré et du prix actuel :
const currentPrice = getCurrentPrice(ex, symbol);
const contractAmount = amountUSD / currentPrice / ctVal;
dans ctValIl s’agit de la valeur nominale du contrat, qui peut varier d’une bourse à l’autre.
Essayez de définir un effet de levier cible (10x par défaut), et s’il n’est pas pris en charge, diminuez-le progressivement :
const leveragesToTry = [10, 5, 3, 2, 1];
for (let lev of leveragesToTry) {
const result = ex.SetMarginLevel(symbol, lev);
if (result === true) {
return lev; // 设置成功
}
}
Après avoir passé une commande, celle-ci n’est pas considérée comme réussie immédiatement ; vous devez attendre la confirmation de commande.
const orderId = ex.CreateOrder(symbol, 'buy', -1, contractAmount);
// 循环检查订单状态
for (let i = 0; i < 20; i++) {
const order = ex.GetOrder(orderId);
if (order.Status === ORDER_STATE_CLOSED) {
// 完全成交
break;
}
Sleep(500);
}
Même si l’ordre apparaît comme exécuté, vous devez tout de même vérifier à nouveau les positions réellement détenues :
const position = getPosition(ex, symbol);
if (!position || Math.abs(position.Amount) === 0) {
// 订单成交但无持仓,开仓失败
return { success: false };
}
Si une seule direction de la position est ouverte avec succès (par exemple, une position longue est ouverte avec succès, mais une position courte échoue), la stratégie fermera automatiquement les positions ouvertes :
if (!results.short.success && results.long.success) {
// 尝试平掉多仓
const pos = getPosition(longEx, longSymbol);
executeClose(longEx, longSymbol, true, pos.Amount, longExchange);
}
Cela évite une exposition unilatérale et garantit la nature de couverture de l’arbitrage.
Une fois la position ouverte avec succès, la stratégie enregistrera les informations relatives à la position d’arbitrage, notamment l’heure d’ouverture, le prix et la quantité, pour les utiliser lors des vérifications de clôture ultérieures.
Lors de l’exécution de la stratégie, toutes les informations sont affichées en temps réel sur le tableau de bord de suivi, réparties en cinq tableaux : Vue d’ensemble du compte : solde, montant bloqué, capitaux propres totaux et récapitulatif des profits et pertes pour chaque plateforme d’échange ; Signaux d’arbitrage : opportunités d’arbitrage détectées, statut d’exécution et raisons d’échec ; Détails des décisions d’ouverture de position : score de l’IA, niveau de risque et critères d’évaluation pour chaque opportunité ; Positions d’arbitrage en temps réel : portefeuille d’arbitrage détenu, profits et pertes (positions longues/courtes) et durée de détention ; Statistiques des profits d’arbitrage : récapitulatif des profits et rendements d’arbitrage pour aujourd’hui, cette semaine, ce mois-ci et de manière cumulative.

Ces panneaux vous permettent de suivre en temps réel l’état de la stratégie, notamment la santé du compte, les opportunités actuelles et toutes les informations clés telles que les profits et pertes du portefeuille.
Enfin, parlons des risques et des précautions à prendre :
Bien que l’arbitrage des taux de financement soit une stratégie de couverture, il n’est pas sans risque. L’écart de prix entre deux plateformes d’échange peut fluctuer, et si cette fluctuation dépasse les gains liés au taux de financement, des pertes peuvent survenir. C’est pourquoi cette stratégie nécessite de vérifier la stabilité de cet écart de prix.
Si une plateforme d’échange manque de liquidités, le slippage lors de l’ouverture et de la fermeture de positions peut être important. Par exemple, si le carnet d’ordres est insuffisant, votre ordre au marché risque d’être exécuté à un prix très défavorable, ce qui augmentera considérablement le coût réel d’ouverture de position.
En particulier, certaines nouvelles plateformes d’échange décentralisées (DEX) peuvent présenter des problèmes liés à des vulnérabilités contractuelles ou à des pénuries de liquidités. Des cas de pertes de fonds subies par des utilisateurs en raison de failles dans les contrats intelligents de ces DEX ont été constatés.
Cette stratégie nécessite de détenir des fonds sur plusieurs places boursières. Par exemple, si vous pratiquez l’arbitrage sur trois places boursières, les fonds seront répartis sur trois plateformes, ce qui entraînera une utilisation du capital relativement faible.
Je vous suggère de commencer par un petit essai avec une somme d’argent.Après avoir assimilé la logique de la stratégie, augmentez progressivement votre investissement. Vous pouvez commencer par l’arbitrage entre deux places boursières majeures afin d’acquérir de l’expérience avant de vous étendre à d’autres plateformes.
Aujourd’hui, nous avons présenté cette stratégie d’arbitrage des taux de financement basée sur la plateforme VarFunding. Elle met en œuvre un processus complet, de la collecte des données à l’exécution automatisée, en passant par la vérification de la stabilité et l’évaluation par IA, et offre un suivi visuel clair.
L’idée centrale de la stratégie est :
Bien sûr, il ne s’agit que d’un cadre de base, et il reste encore beaucoup de marge d’optimisation :
Le code complet a été rendu public sur la plateforme de quantification des inventeurs.stratégie d’arbitrage des taux de financement des flux de travailNous invitons tout le monde à l’utiliser et à l’améliorer.